У меня проблемы с поворотом изображения в Qt. Каждый раз, когда я поворачиваю свое изображение с QPainter оно становится все более и более искаженным. Это начальное изображение:
После нескольких итераций это становится:
Это мой код:
void Ship::Move(int x, int y)
{
QPixmap rotatePixmap(shipPixels.size());
rotatePixmap.fill(Qt::transparent);
QTransform transform;
transform.translate(
rotatePixmap.size().width() / 2,
rotatePixmap.size().height() / 2
);
transform.rotate(degree);
transform.translate(
- rotatePixmap.size().width() / 2,
- rotatePixmap.size().height() / 2
);
QPainter p(&rotatePixmap);
p.setRenderHints(
QPainter::Antialiasing | QPainter::SmoothPixmapTransform,
true
);
p.setTransform(transform);
p.drawPixmap(0, 0, shipPixels);
p.end();
shipPixels = rotatePixmap;
this->setPixmap(shipPixels);
this->move(QPoint(x, y));
degree = 0;
}
Для меня Qt сохраняет качество изображения. Поведение совершенно странное. Есть ли причина?
На основе ответов новый код является этим. Другие пользователи, которые сталкиваются с такой же проблемой, могут получить этот код:
void Ship::Move(int x, int y)
{
QPixmap sourceImage(shipPixels);
QPixmap rotatePixmap(sourceImage.size());
rotatePixmap.fill(Qt::transparent);
QTransform transform;
transform.translate(sourceImage.size().width() / 2, sourceImage.size().height() / 2);
transform.rotate(degree);
transform.translate(-sourceImage.size().width() / 2, -sourceImage.size().height() / 2);
QPainter p;
p.setRenderHints(QPainter::Antialiasing|QPainter::SmoothPixmapTransform, true);
p.begin(&rotatePixmap);
p.setTransform(transform);
p.drawPixmap(0, 0, sourceImage);
p.end();
rotatePixmap.save("temp.png");
this->setPixmap(rotatePixmap);
this->move(QPoint(x, y));
}
QPainter pixmap;
pixmap.setRenderHints(QPainter::Antialiasing|QPainter::SmoothPixmapTransform,true);
это то, что вы ищете.