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

标签 c++ qt transparency

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

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

我目前正在使用“QPixmap”创建屏幕外图像,然后我使用 Pixmap 创建画家并绘制屏幕外图像。图像准备就绪后,我调用“toImage”函数返回“QImage”,然后将其复制到可见显示器。

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

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

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

最佳答案

透明度的关键是覆盖图像有一个 alpha channel 。 QPixmap 使用底层图形系统的图形格式,它应该包括一个 alpha channel 。对于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 channel ,默认为 255(完全不透明)。

不幸的是,我无法就 QPixmap 或 QImage 哪个更适合您的设置给出建议。

如果视频源的合成操作考虑了 alpha channel ,这应该可以解决您的问题。

关于c++ - Qt渲染到离屏显示,复制到可见不覆盖背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40241708/

相关文章:

c++ - 在类型匹配中忽略模板参数

python - 在 Arch Linux ARM 中编译 ros-indigo-qt-gui-cpp 时出现的问题

c++ - 传递字符串 'by value' 本地值的变化反射(reflect)在原始值中

c++ - 为什么这个虚拟调用模棱两可?

c++ - Qt 5.12 Mac OS X 版本号bug

c++ - 获取 Qt 对象的大小

java - 是否可以在 ImageIcon 中保持透明背景?

ios - 如何使 UIImageView 的一部分透明以便在下面的层中显示 View

graphics - 光线追踪折射看起来 "fake"

c++ - 可以在 C++ 内存模型中合并原子负载吗?