如何 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 开始它应该存在。
我有一个具有透明区域的 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 开始它应该存在。