2012-06-20 68 views
5

我的程序生成3个不同的图像,我想使用一些不透明度设置来合并它们。在Qt中混合两个不同的图像

首先我有原始图像,我已经转换成QPixmap将其显示在QGraphicsView中。

First Image

然后用这张图片做一些计算并生成一个QImage,因为我需要基本的像素访问,我还添加了一个图例。

Second Image

我想要做的是能够混合两个图像,同时能够修改不透明度。 我没有要显示的工具为例,它应该是这样的:

Third image

但与第一图像和不透明度混合的数据图像。另外,我希望这个传说能够保持100%的可见度。如果需要,我可以为图例创建一个不同的QImage。

另外我知道究竟哪个像素应该被认为是透明的,而不是白色,如果它涉及到。

在未来,我想调整不透明度只是采用了滑盖的,所以我认为这将是更好,如果有不涉及计算全新形象的每次的解决方案...

任何潜在客户将不胜感激...

回答

3

您可以使用QGraphicsPixmapItem :: setOpacity为叠加图像设置范围为0.0 ... 1.0的alpha混合值,并为背景使用单独的图形项目作为前景。

如果您实际上需要生成具有混合图像的像素图,则可以在绘制像素图之前使用QPainter上的setOpacity。

+0

我做了你的建议,但我有最后一个问题,我的QImage的白色像素也混合,你知道如何避免这种情况吗?我希望白色像素表现得像透明一样。 我现在拥有的图片:[图片](http:// imgur。com/vEpxI) – Leo

+0

为什么不把图像顶部的原始图像与图例放在一起并修改原始图像的不透明度?或者是否有需要设置为透明的原始图像中的项目?在这种情况下,您需要修改原始图像以将这些像素alpha值设置为0. – Pete

+0

这就是我所做的,但我仍然有同样的问题:[像这样](http://imgur.com/a6qWk)。我改变了原始图像的不透明度,并将图例和数据可视化放在下面,但最后的白色仍然与原始图像混合。 – Leo

0

有一个QImage类型支持alpha通道QImage :: Format_ARGB32_Premultiplied将显示两个图像的不透明度由alpha控制 - 只需在每个顶部绘制两个QImages其他

但它是预乘所以你需要调整所有的像素,如果你改变A

+0

不得不调整所有的像素每次我改变一个加必须将第一个QPixmap转换为一个QImage真的困扰我,我想找一些更有效的东西,但我会挖掘你的想法,如果我不别找了别的。 – Leo

+0

无需转换为像素映射,QImage显示在硬件中完成。 –

+0

我不知道HW是什么,所以我可能不完全理解你的句子,但你在说什么pixmap? – Leo