旋转QImage时如何用透明背景填充空白?
Posted
技术标签:
【中文标题】旋转QImage时如何用透明背景填充空白?【英文标题】:How to fill the void with transparent background when rotating a QImage? 【发布时间】:2014-06-04 03:47:00 【问题描述】:当我在 Qt 中旋转图像时,它会自动放大图像以封装更大的尺寸,非常智能。但是,它用白色填充了新创建的空白,这不是我想要的。如何让它填充完全透明的颜色?
这是可能的代码。
QImage lSource("/path/to/an/image/file");
QTransform lRotation;
lRotation.rotate(30.0);
QImage lRotated(lSource.transformed(lRotation, Qt::SmoothTransformation));
ui.labelImage->setPixmap(QPixmap::fromImage(lRotated));
非常感谢!
【问题讨论】:
我怀疑,旋转图像的空白区域是透明的,白色是标签的背景颜色。您希望在那里看到什么颜色? 感谢您的及时回复!你是对的。这是标签的背景。我的错。 【参考方案1】:根据我上面的评论...
我怀疑旋转图像的空白区域是透明的,白色是标签的背景色。如果要为旋转的图像设置特定背景,可以执行以下操作:
// Create rotated image.
QImage lSource("source.png");
QTransform lRotation;
lRotation.rotate(30.0);
QImage lRotated(lSource.transformed(lRotation, Qt::SmoothTransformation));
// Create resulting image with specific background.
QImage img(lRotated.size(), QImage::Format_ARGB32);
img.fill(Qt::red); // Set the red background
QPainter p(&img);
p.drawImage(0, 0, lRotated);
QLabel l;
l.setPixmap(QPixmap::fromImage(img));
l.show();
【讨论】:
感谢您详尽的回答!是的,这是我的错。我通过简单地添加以下代码解决了这个问题: ui.labelImage->setBackgroundRole(QPalette::Dark);由于它被用作 QScrollArea 中的小部件,因此它与 QScroller 区域的背景完美匹配。以上是关于旋转QImage时如何用透明背景填充空白?的主要内容,如果未能解决你的问题,请参考以下文章