2

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 は画質を維持します。その振る舞いはまったく奇妙です。理由はありますか?

4

2 に答える 2

1

回答に基づいて、新しいコードはこれです。同じ問題を抱えている他のユーザーは、次のコードを取得できます。

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));
}
于 2012-10-11T10:33:12.080 に答える