QPainter,阻止添加alpha因子

时间:2016-04-20 14:40:57

标签: qt alpha qpainter

我正在尝试用QPainter绘制一个矩形。这很顺利,但是我注意到如果我用相同的颜色在画家上设置笔和画笔,笔和画笔的alpha因子会以某种方式添加。这使得笔绘制的线条不太透明。反正有没有阻止这种颜色的添加?我希望如果笔和笔刷颜色相同,那么笔绘制的线条将是“不可见的”。在我的代码部分下方绘制矩形和输出图像。

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

enter image description here

2 个答案:

答案 0 :(得分:3)

当您使用alpha在另一个对象上绘制alpha对象时,会得到一个“透明度较低的交叉区域”,它由这两个半透明对象的alpha值之和表示(抱歉我的英文不好,我巴西人。

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

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

Each circle was drawn with alpha 25

希望它有所帮助。

答案 1 :(得分:1)

您需要更改画家composition mode

  

的QPainter :: CompositionMode_SourceOver

     

这是默认模式。源的alpha用于混合   目标顶部的像素。

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

如下面的评论中所述,您需要按顺序绘制填充和轮廓,以便合成模式启动,因为当您在一次调用中绘制两者时,它似乎被忽略。按顺序绘制不一定是性能开销,只是额外的行和代码中的一些重新排序。