如何 tint/highlight 仅对具有非零 alpha 的区域进行 qpixmap

how to tint/highlight qpixmap only the area that has non-zero alpha

我有一个具有透明区域的 QPixmap。我该怎么做才能仅将 highlight/tint 应用于具有非零 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();

输入图像:

预期结果图片:

正确的选项是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 目录中,有一个 "Composition Modes" 工具,可让您试验所有组合模式。我在 Qt 5.2.1 中找到它,但至少从 Qt 4.8 开始它应该存在。