在Qt中混合两个不同的图像

Leo*_*Leo 6 c++ qt opacity qpixmap qimage

我的程序生成3个不同的图像,我想使用一些不透明度设置组合它们.

首先我有原始图像,我已经将其转换为QPixmap以在QGraphicsView中显示它.

第一张图片.

然后使用此图像我进行一些计算并生成QImage,因为我需要基本像素访问,我还添加了一个图例.

第二张图片.

我想做的是能够混合两个图像,同时能够修改不透明度.我没有显示示例的工具,它应该如下所示:

第三张图片

但是第一张图像和数据图像混合了不透明度.此外,我希望这个传奇保持100%可见.如果需要,我可以为图例创建不同的QImage.

此外,我确切地知道哪个像素应该被认为是透明的而不是白色的.

在未来我想用滑块调整不透明度,所以我认为如果有一个解决方案不涉及每次计算一个全新的图像会更好...

任何领导将不胜感激......

Pet*_*ete 3

您可以使用 QGraphicsPixmapItem::setOpacity 将覆盖图像的 alpha 混合值设置在 0.0...1.0 范围内,并为背景和前景设置单独的图形项。

如果您确实需要使用混合图像生成像素图,则可以在 QPainter 上使用 setOpacity,然后再在其上绘制像素图。

  • @Leo你应该将图例和“覆盖图像”(蓝色/白色的图像)分开。对于覆盖图像,在将其分配给图形项之前,将白色像素替换为透明像素。然后将叠加层放在原始图像上方并应用不透明度。相反,正如皮特所建议的,存在这样的问题:原始图像在覆盖层(然后位于原始图像下方)应该透明的部分上也具有不透明度。或者将原始图像放置在覆盖层下方(完全不透明)和上方(部分不透明)。但无论如何你需要透明度而不是白色像素 (2认同)
  • `QImage::Format_RGB888` 没有 Alpha 通道。您需要`QImage::Format_ARGB32`或`..._Premultiplied`。(http://qt-project.org/doc/qt-4.8/qimage.html#Format-enum) **注意:** “某些操作(例如使用 alpha 混合的图像合成)使用预乘 ARGB32 比使用预乘 ARGB32 更快纯 ARGB32。” ——所以这正是您所需要的。:) (2认同)