如何在qt中使用QImage和QPainter将两个图像合并为一个?

时间:2013-09-25 07:32:31

标签: c++ qt qtgui qpainter qimage

您好我正在开发blackberry10应用程序。在应用程序内部我有两个图像,我只需要将这两个图像合并为一个图像。 Cascades中没有功能可以将它们组合在一起。当我在黑莓开发者论坛上发布这个时,我被建议在qt中使用QImage和QPainter函数将两个图像合并为一个。我不知道如何使用这些功能。有人可以帮我这个代码吗?

2 个答案:

答案 0 :(得分:3)

你可以用QPainter做这样的事情来进行简单的alpha混合。此代码也可以轻松调整为其他内容:

QImage surface(...);
QPainter p(&surface);
p.setCompositionMode(QPainter::CompositionMode_Source);
// p.setBrush(LinearGradient from solid to transparent right to left)
p.drawRect(surface.size());
p.setCompositionMode(QPainter::CompositionMode_DestinationIn);
p.drawImage(image1);
p.end();
p.begin(image2);
p.drawImage(surface);
p.end();

这是一个非常useful part的文档,带有插图。

如果你使用OpenGL着色器,这会更简单,尽管opengl有一些支持这个副手。除非你在一个有限的平台上,否则我建议你考虑在将来转用它。

请注意,QImages也有一些alpha通道支持,但这可能不是最好在这里使用,所以把它当作“好奇心”:

QImage::Format_ARGB32_Premultiplied 

答案 1 :(得分:3)

你被引导到了正确的地方,事实上,QPainter可能会做你想要的,但当你说你要“合并这两个图像”时,你的问题是模棱两可的。这可能意味着你想要一半和另一半,或者你想以某种方式混合它们,这可能更有可能。

Qt提供多种组合模式,可提供不同的效果。 Qt提供的Here's the source code to the composition example,它向您展示了它可以做什么,您可以从源代码中看到如何组合图像。

具体来说,您将看到第一个图像被渲染(drawBase())然后在QPainter上设置合成模式并渲染第二个图像(drawSource())。

简单地说,绘制第一张图像然后将第二张图像组合起来: -

QPainter p(&destImage);
p.setCompositionMode(mode);
p.drawImage(0, 0, sourceImage);

正如您从Qt documentation所看到的,有很多不同的合成模式,它们会将您的图像“合并”为不同的效果。