Вращение изображений вызывает искажения на Qt

У меня проблемы с поворотом изображения в Qt. Каждый раз, когда я поворачиваю свое изображение с QPainter оно становится все более и более искаженным. Это начальное изображение:

http://imageshack.us/photo/my-images/838/ship1.png/

После нескольких итераций это становится:

http://imageshack.us/photo/my-images/11/ship2e.png/

Это мой код:

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 сохраняет качество изображения. Поведение совершенно странное. Есть ли причина?

2

Решение

На основе ответов новый код является этим. Другие пользователи, которые сталкиваются с такой же проблемой, могут получить этот код:

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));
}
1

Другие решения

QPainter pixmap;
pixmap.setRenderHints(QPainter::Antialiasing|QPainter::SmoothPixmapTransform,true);

это то, что вы ищете.

-3