【问题标题】:how to merge two images into one using QImage and QPainter in qt? [closed]如何在qt中使用QImage和QPainter将两个图像合并为一个? [关闭]
【发布时间】:2013-09-25 07:32:30
【问题描述】:

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

【问题讨论】:

  • 您想以哪种方式合并您的图像?让它们平铺、重叠、垂直、水平?
  • 你对简单的 alpha 混合还满意吗?

标签: c++ qt qtgui qpainter qimage


【解决方案1】:

您已被引导到正确的位置,确实,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 中看到的那样,有很多不同的构图模式,它们会将您的图像“合并”成不同的效果。

【讨论】:

    【解决方案2】:

    你可以用 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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 2015-02-09
      相关资源
      最近更新 更多