我试图理解QPainter的不同构图模式,但alpha通道对我来说仍然模糊不清。
让我们看看以下示例:
QPainter painter(this);
painter.setCompositionMode(QPainter::CompositioMode_SourceOver);
painter.drawPixmap(rect(), QPixmap(":/Background_1.png"));
painter.setCompositionMode(QPainter::CompositioMode_SourceAtop);
painter.drawPixmap(rect(), QPixmap(":/Background_2.png"));
使用Alpha通道正确绘制第一张图像。第二张图像应仅覆盖第一张图像中不透明的部分,但实际上覆盖率为100%。
让我们看看第二个例子:
QPainter painter(this);
painter.setCompositionMode(QPainter::CompositioMode_Source); //Changed here
painter.drawPixmap(rect(), QPixmap(":/Background_1.png"));
painter.setCompositionMode(QPainter::CompositioMode_SourceAtop);
painter.drawPixmap(rect(), QPixmap(":/Background_2.png"));
在这种情况下,第一张图像在没有Alpha通道的情况下应用,但第二张图像正确应用(仅覆盖image_1的非透明区域)。
我的问题是:
如何应用具有SourceOver功能的第一个图像,然后使用SourceAtop(第一个图像的目标alpha)应用第二个图像?
答案 0 :(得分:3)
你需要在不同的缓冲区上进行组合。
QPainter painter;
QImage image(size(), QImage::Format_ARGB32);
image.fill(0);
painter.begin(&image);
painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
painter.drawPixmap(rect(), QPixmap("Background_1.png"));
painter.setCompositionMode(QPainter::CompositionMode_SourceAtop);
painter.drawPixmap(rect(), QPixmap("Background_2.png"));
painter.end();
painter.begin(this);
painter.drawPixmap(rect(), QPixmap("clouds-05.jpg"));
painter.drawImage(rect(), image);
painter.end();