如何创建QPixmap的半透明副本
How can I create a translucent copy of a QPixmap?
在我正在制作的程序中,我需要两个图像,它们完全相同,但其中一个是半透明的。出于性能原因,我想创建两个单独的QPixmaps
,而不是只使用一个并设置QPainter
的不透明度。有没有一种简单的方法可以做到这一点?
不,没有性能方法可以做到这一点。
要修改QPixmap
的通道,必须:转换为QImage
,修改,转换回QPixmap
。根据您的应用程序,往返行程可能会使在QPainter
中执行此操作变得更简单:http://www.qtcentre.org/threads/51158-setting-QPixmap-s-alpha-channel
然而,如果你能把这一点纳入你的启动时间,那么往返可能是合理的,可以防止QPainter
中的重复转换。
- 将您的
QPixmap
转换为QImage
:http://doc.qt.io/qt-5/qpixmap.html#toImage - 如果您的
QPixmap
中没有alpha通道,则需要添加一个:http://doc.qt.io/qt-5/qimage.html#convertToFormat - 然后,对于图像中的每个像素,调用
setPixel
:http://doc.qt.io/qt-5/qimage.html#pixel-操作(请注意,setPixel
采用QRgb
。您需要从要修改的像素中获取红色、绿色和蓝色通道,并将它们与qRgba
中所需的alpha值一起使用:http://doc.qt.io/qt-5/qcolor.html#qRgba) - 最后,您需要使用
convertFromImage
:http://doc.qt.io/qt-5/qpixmap.html#convertFromImage
也许你应该读一下这个例子。我认为你需要使用构图模式来达到这个目的。
相关文章:
- 如何在全屏模式下(在OpenGL中)使背景透明
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- 当使用透明的std函数对象时,我们还需要写空的尖括号吗
- 如何使用cppcheck处理半相对包含路径
- 半随机数生成C++
- 是否可以为 QPixmap 派生类嵌入缩放方法?
- dx11 渲染到纹理仅显示透明颜色
- SDL2 透明背景
- OpenGL - 深度缓冲区在渲染半透明立方体时剪切掉不应该剪切的面
- Q3D表面:半透明QSurface3DSeries
- 如何在Qt中绘制半透明矩形
- 如何在 SDL2 中的不透明矩形之上绘制透明或半透明矩形
- QML:如何创建半透明/半透明的WebView元素
- Qt:如何使半透明,无窗,无铬窗口可拖动
- 如何在QT中使背景半透明
- 显示半透明圆的快速动画
- 在屏幕上放置一个半透明的标记(Windows XP)
- c++半透明窗口SDL
- Qt:重叠的半透明图形系统
- 如何创建QPixmap的半透明副本