在PyQt中混合颜色?

时间:2011-09-10 13:24:42

标签: python qt pyqt

有没有办法通过组合2种不同颜色在PyQt中制作新的QColor?类似的东西:

QColor([30, QColor(123,0,45, 100)], [70, QColor(12, 34, 56, 100)])

其中30和70表示要采用的新颜色的百分比。

我需要的是在不透明的颜色上层叠半透明颜色的等效颜色。

1 个答案:

答案 0 :(得分:2)

你提问已经有一段时间了,但当然有一种方法可以将这些颜色“混合”在一起;它可能不是微不足道的,但它肯定是可能的。

通过这样做可以非常容易地组合两种颜色(假设color1和color2都是QColors):

QColor(.3* color1.red()   + .7 * color2.red(),
       .3* color1.green() + .7 * color2.green(),
       .3* color1.blue()  + .7 * color2.blue(),
       .3* color1.alpha() + .7 * color2.alpha()
      )

在两种颜色之间进行插值。

但是,这并没有考虑到一种颜色在另一种颜色之上。由于第一种颜色是不透明的,因此产生的颜色也是不透明的。但是,需要考虑alpha值的分数来计算得到的颜色,看起来像(取决于你的问题的解释):

QColor(color1.red()   + .color2.alpha() * color2.red(),
       color1.green() + .color2.alpha() * color2.green(),
       color1.blue()  + .color2.alpha() * color2.blue(),
       1
      )