我正在尝试用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)));
答案 0 :(得分:3)
当您使用alpha在另一个对象上绘制alpha对象时,会得到一个“透明度较低的交叉区域”,它由这两个半透明对象的alpha值之和表示(抱歉我的英文不好,我巴西人。
在你的情况下,边框是用alpha 125在矩形上绘制的,也是alpha 125,这给边框留下了alpha 250(125 + 125)的印象。
您可以使用painter->setPen( Qt::NoPen );
删除边框,或者将其分隔并在矩形外部绘制(使用painter->fillRect()
作为矩形,painter->drawRect()
作为边框。
希望它有所帮助。
答案 1 :(得分:1)
您需要更改画家composition mode。
的QPainter :: CompositionMode_SourceOver
这是默认模式。源的alpha用于混合 目标顶部的像素。
所以看看剩下的,看看哪一个适合你。
如下面的评论中所述,您需要按顺序绘制填充和轮廓,以便合成模式启动,因为当您在一次调用中绘制两者时,它似乎被忽略。按顺序绘制不一定是性能开销,只是额外的行和代码中的一些重新排序。