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()
绘制边框)。
希望对您有所帮助。
我正在尝试使用 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()
绘制边框)。
希望对您有所帮助。