6

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

4

2 回答 2

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();

这是文档中非常有用的部分,带有直观的插图。

如果您使用 OpenGL 着色器,这会简单得多,因为 opengl 对此有一些支持。除非您在有限的平台上,否则我建议您考虑在将来切换到该版本。

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

QImage::Format_ARGB32_Premultiplied 
于 2013-09-25T07:46:03.397 回答
3

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

Qt 提供了多种组合模式,提供不同的效果。这是 Qt 提供的合成示例的源代码,它向您展示了它可以做什么,并且您可以从源代码中看到如何组合图像。

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

简而言之,绘制第一张图像,然后像这样组合第二张图像:-

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

Qt 文档中可以看出,有很多不同的合成模式,它们将“合并”具有不同效果的图像。

于 2013-09-25T08:10:52.550 回答