旋转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时如何用透明背景填充空白?的主要内容,如果未能解决你的问题,请参考以下文章

用背景颜色填充 png 透明度

如何用PS制作花型背景图

如何用渐变色填充部分背景?

寻找具有透明背景的旋转图像的边界框

css怎么可以只让背景透明 文字不透明

Imagemagick 旋转透明图像上不需要的黑色背景