QPainter,防止添加alpha因子

QPainter, prevent adding of alpha factors

我正在尝试使用 QPainter 绘制一个矩形。进展顺利,但我注意到,如果我在画家上设置了相同颜色的笔和画笔,笔和画笔的 alpha 因子会以某种方式添加。这会导致笔绘制的线条看起来不那么透明。无论如何要防止这种颜色的添加?我希望如果钢笔和画笔的颜色相同,则钢笔绘制的线条将是 "invisible"。在我的代码部分下方绘制矩形和输出图像。

QBrush newbrush = QBrush(painter->brush());
newbrush.setColor(QColor(0, 0, 255, 125));
newbrush.setStyle(Qt::SolidPattern);
painter->setBrush(newbrush);

QPen newpen = QPen(painter->pen());
newpen.setColor(QColor(0, 0, 255, 125));
newpen.setWidth(10);
painter->setPen(newpen);

painter->drawRect(QRect(QPoint(100, 50), QPoint(500, 500)));

您需要更换画家composition mode

QPainter::CompositionMode_SourceOver

This is the default mode. The alpha of the source is used to blend the pixel on top of the destination.

所以看看剩下的,看看哪一个适合你。

正如下面评论中提到的,您需要按顺序绘制填充和轮廓才能启动合成模式,因为当您同时绘制两者时它似乎被忽略了称呼。按顺序绘制不一定是性能开销,只是代码中多了一行和一些重新排序。

当您在另一个具有 alpha 的对象上绘制一个具有 alpha 的对象时,您会得到一个“不太透明的交叉区域”,它由这两个半透明对象的 alpha 值之和表示(抱歉我的英语不好,我是巴西人)。

在你的例子中,边框是在矩形上用 alpha 125 绘制的,矩形上也用 alpha 125,这给边框留下了 alpha 250 (125+125) 的印象。

您可以使用 painter->setPen( Qt::NoPen ); 删除边框或将其分开并绘制在矩形之外(使用 painter->fillRect() 绘制矩形,使用 painter->drawRect() 绘制边框)。

希望对您有所帮助。