Qt渲染到屏幕外显示,复制到可见而不会覆盖背景

时间:2016-10-25 13:44:40

标签: c++ qt transparency

我使用的是Qt5.6,我开发了几个小部件,将内容渲染到屏幕外的位图,然后将最终图像复制到可见区域。

我在可见显示屏上有一个显示视频输入的区域,我想在视频上复制图像,而不会覆盖背景并避免闪烁。

我目前正在使用'QPixmap'创建离屏图像,然后我使用Pixmap创建一个画家并绘制离屏图像。当图像准备好后,我调用'toImage'函数返回'QImage',然后将其复制到可见显示中。

很多小部件都包含直线和圆圈,其中很多都没有填充。

我看过其他帖子没有使用QPixmap,只是使用'QImage',我应该使用'QPixmap'吗?

问题是如何将图像从屏幕外区域复制到可见区域而不覆盖背景?

1 个答案:

答案 0 :(得分:2)

透明度的关键是叠加图像有一个alpha通道。 QPixmap使用底层图形系统的图形格式,其中应包含alpha通道。对于QImage,可以显式指定格式,它应该是QImage :: Format_ARGB32_Premultiplied,参见[1]:http://doc.qt.io/qt-5/qimage.html#Format-enum

首先获得一个完全透明的QImage / QPixmap,调用QPixmap / QImage :: fill(QColor(0,0,0,0));在创建QPainter之前。 第4个参数是alpha通道,默认情况下为255(完全不透明度)。

不幸的是,无法为您的设置更快地提供QPixmap或QImage的建议。

如果合成操作与录像带一起考虑了alpha通道,这可以解决您的问题。