Qt渲染到离屏显示,复制到可见不覆盖背景

Qt rendering to offscreen display, copy to visible without overwritng the background

我正在使用 Qt5.6,我开发了几个小部件,可以将内容呈现为离屏位图,然后将最终图像复制到可见区域。

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

我目前正在使用 'QPixmap' 创建屏幕外图像,然后我使用 Pixmap 创建画家并绘制屏幕外图像。当图像准备好后,我然后调用 'toImage' 函数到 return a 'QImage',然后将其复制到可见显示器。

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

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

问题是如何在不覆盖背景的情况下将图像从离屏区域复制到可见区域?

透明度的关键是叠加图像有一个 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 哪个更快,我无法给出建议。

如果 videofeed 的合成操作考虑了 alpha 通道,这应该可以解决您的问题。