Qt - 使用另一个图像作为蒙版在图像上绘制图像

时间:2015-09-20 12:34:49

标签: qt drawing transparency mask

以下是手头的问题。我需要能够选择一个背景(一个显示一个物体的图像,让我们说,一个星舰模型)。我希望能够将各种先前准备好的纹理应用到它上面的各个区域,因为某种颜色是你自己的对象"应用程序,但无需准备数十个单独的细分。

1 个答案:

答案 0 :(得分:0)

好的,所以这是一个新手的方式。我们有这些图片:

Original photo Alternative, quick photoshop

两种不同版本,原始照片和快速Photoshop照片。让我们说我们只想要第二张照片中的Borg-ish绿色偏转器和经纱舱,没有奇怪的粉红色船体。你必须有一个面具,基本上是一个相同分辨率的图像(或至少相同的宽高比,你可以可靠地缩放到图像的分辨率),区域填充颜色(或其他任何),和其他地方的透明区域。作为面具,我在空图层上使用了几笔画笔,设置为叠加模式,然后保存为PNG,具有透明度。这就是代码的用法:

首先,导入图像。

QPixmap background("orig.png"); //import base image
//import alt version/texture/whatever you want, anything will work with a good mask
QPixmap element("alt.png");  
QPixmap mask("deflector.png"); //mask. Just nacelles and deflector. 

然后,将我们感兴趣的区域与alt版本隔离

QPainter painter(&element);
painter.setCompositionMode(QPainter::CompositionMode_DestinationIn);
painter.drawPixmap(0, 0, mask.width(), mask.height(), mask);

最后将它绘制到目标对象上。

QPainter inter(&background);
inter.drawPixmap(0, 0, element);

ui->label->setPixmap(background);

结果: Result

此方法尊重您在Photoshop或其他图像编辑软件中可以完成的任何和所有透明度。

简单但有效的解决方案,适用于您的应用必须使用其他人在其他地方准备的图形时。