如何仅对具有非零alpha的区域着色/突出显示qpixmap

时间:2017-05-22 18:36:05

标签: qt qpainter

我有一个有一些透明区域的QPixmap。如何将突出显示/色调仅应用于具有非零alpha的区域?

这就是我现在所拥有的,它为整个图像着色。

QPixmap highlighedPixmap = myPixmap;
QPainter pixmapPainter;
pixmapPainter.begin(&highlighedPixmap);
pixmapPainter.setCompositionMode(QPainter::CompositionMode_ColorDodge);
pixmapPainter.fillRect(highlighedPixmap.rect(), QColor(180, 180, 180, 100));
pixmapPainter.end();

输入图片:

enter image description here

预期结果图片:

enter image description here

1 个答案:

答案 0 :(得分:0)

正确的选项是CompositionMode_SourceAtop

QPixmap highlighedPixmap = myPixmap;
QPainter pixmapPainter(&highlighedPixmap);
pixmapPainter.setCompositionMode(QPainter::CompositionMode_SourceAtop);
pixmapPainter.fillRect(highlighedPixmap.rect(), foregroundColor);
pixmapPainter.end();

... \ examples \ widgets \ painting \ composition 的Qt目录中,有一个“合成模式”工具,可让您体验所有合成模式。我在Qt 5.2.1中找到了它,但至少从Qt 4.8开始就应该存在。