【问题标题】:QPainter, prevent adding of alpha factorsQPainter,防止添加 alpha 因子
【发布时间】:2016-04-20 14:40:56
【问题描述】:

我正在尝试使用 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)));

【问题讨论】:

    标签: qt alpha qpainter


    【解决方案1】:

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

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

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

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

      您需要更换画家composition mode

      QPainter::CompositionMode_SourceOver

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

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

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

      【讨论】:

      • 感谢您的帮助,但它似乎不起作用。也许这只有在多个形状相互叠加时才有效?
      • 可能,按顺序画填充和描边即可。
      猜你喜欢
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-28
      • 1970-01-01
      • 2022-10-15
      • 1970-01-01
      相关资源
      最近更新 更多