gpt4 book ai didi

c++ - 旋转图像会导致 Qt 失真

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:03:55 27 4
gpt4 key购买 nike

我在 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 保留了图像质量。这种行为是完全奇怪的。有什么原因吗?

最佳答案

根据答案,新代码是这样的。发现自己有同样问题的其他用户可以获得此代码:

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

关于c++ - 旋转图像会导致 Qt 失真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12826812/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com