文章目录
前言
Qt的QPainter十分强大,设置不同的组合模式,可以得到迥然不同的结果,比如调节图片的透明度等,因此是否有必要弄清除QPainter的组合模式代表的意义。
研究相关
- Source指的是绘制的输入,Destination指的是目的绘制区域本来存在的像素。
- 本文使用"Compositon Modes"程序对QPainter的组合模式进行解读,其中花是绘制区域原来存在的像素,椭圆是绘制的输入,Circle color是椭圆的的RGB通道数值,circle alpha是椭圆的透明通道数值。
QPainter::CompositionMode
QPainter::CompositionMode_SourceOver
- Qt帮组文档描述:This is the default mode. The alpha of the source is used to blend the pixel on top of the destination.
- SourceOver是默认的绘制模式,绘制结果 = 绘制输入*ratio_source + 目的区域原来像素 * ratio_destination。ratio_source和ratio_destination取决于绘制输入的alpha通道值与绘制区域的alpha通道数值的比值(大部分取决于绘制区域的alpha数值,关系不是线性)。
- 测试数据
目的区域像素 | 输入像素 | 结果 |
---|---|---|
(255, 255, 255, 10) | (0, 0, 0, 100) | (14, 14, 14, 102) |
(255, 255, 255, 10) | (0, 0, 0, 200) | (3,3,3,202) |
(255, 255, 255, 10) | (0, 0, 0, 255) | (0, 0, 0, 255) |
(255, 255, 255, 255) | (100, 0, 0, 200) | (133, 55, 55, 255) |
(255, 255, 255, 0) | (0, 0, 0, 200) | (0, 0, 0, 200) |
QPainter::CompositionMode_Source
- Qt帮组文档描述:The output is the source pixel. (This means a basic copy operation and is identical to SourceOver when the source pixel is opaque).
- Source模式:绘制结果 = 绘制输入,目的绘制区域原来的像素被完全覆盖。
- 当绘制输入的Alpha通道为255(不透明时),Source和SourceOver模式的表现相同,因为SourceOver模式中ratio_source = 1,ratio_destination = 0;
QPainter::CompositionMode_DestinationIn
- Qt帮组文档描述:The output is the destination, where the alpha is reduced by that of the source. This mode is the inverse of CompositionMode_SourceIn.
- DestinationIn模式,最后的绘制结果为原绘制区域图像,但是其alpha通道数值会受到输入的影响。
- 绘制结果 = 区域原像素(除Alpha通道外) + 区域原像素(Alpha通道)* 绘制输入(Alpha通道)/ 255,绘制输入(除Alpha通道)的值被丢弃,因此该模式一般仅用于设置绘制区域的透明度。
- 绘制结果通过代码测试出来
- x = 200; 输出为1325400063(4EFFFFFF
- 绘制结果通过代码测试出来