【发布时间】:2017-05-11 17:28:46
【问题描述】:
我有一个非常小的 Qt 应用程序,它使用标签来显示 jpeg 图像,而无需先将其放在窗口中。 (我从Display QImage with QtGui得到了很多帮助)
现在我想更改此 jpeg 的 Alpha 通道以使图像部分透明。我试过以下没有任何运气
int main (int argc, char *argv[])
{
QApplication app(argc, argv);
QLabel label (0, Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
label.resize(1280,720);
label.setPixmap(QPixmap("test.jpg"));
label.setScaledContents(true);
// This line should set the alpha transparency to 50%
label.setStyleSheet("background-color: rgba(255,255,255,50);");
label.show();
return app.exec();
}
样式表似乎根本不影响标签。我已经尝试更改其他 rgb 值(例如全 0)并在背景颜色和颜色之间交替,但图像始终相同。
更新: 感谢 eyllanesc,以下内容现在对我有用:
int main (int argc, char *argv[])
{
QApplication app(argc, argv);
QPixmap input ("test.jpg");
QImage image(input.size(), QImage::Format_ARGB32_Premultiplied);
image.fill(Qt::transparent);
QPainter p(&image);
p.setOpacity(0.5);
p.drawPixmap(0,0,input);
p.end();
QPixmap output = QPixmap::fromImage(image);
QLabel label (0, Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
label.setStyleSheet("background-color: rgba(255,255,255,50);");
label.resize(1280,720);
label.setPixmap(output);
label.setScaledContents(true);
label.show();
return app.exec();
}
【问题讨论】:
-
您是否要使图像背景略微透明,而使图像的其余部分完全不透明?或者你是想让整个 jpg 透明吗?我不相信 jpg 支持 alpha 通道,因此您不能拥有部分透明的 jpg 图像,但您可以使用自定义渲染或 QGraphicsOpacityEffect 图形效果使整个图像透明。
-
我需要使整个图像透明。我的目标是将静态图片(jpeg、png 等)作为某些视频的叠加层。