gpt4 book ai didi

c++ - 如何使用 SourceOver 在 drawPixmap 上应用 alpha channel

转载 作者:搜寻专家 更新时间:2023-10-31 01:01:21 24 4
gpt4 key购买 nike

我试图了解 QPainter 的不同合成模式,但 alpha channel 对我来说仍然很模糊。

让我们看下面的例子:

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 channel 正确绘制。第二张图应该只覆盖第一张图中不透明的部分,但实际上覆盖了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 channel 的情况下应用,但第二个图像应用正确(仅覆盖 image_1 的非透明区域)。

我的问题是:

如何应用具有 SourceOver 功能的第一张图像,然后应用具有 SourceAtop 的第二张图像(第一张图像的目标 alpha)?

First and second example

最佳答案

您需要在单独的缓冲区上进行组合。

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();

enter image description here enter image description here enter image description here

关于c++ - 如何使用 SourceOver 在 drawPixmap 上应用 alpha channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29363768/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com