D2D1_ALPHA_MODE
是在 Microsoft Direct2D API 中定义的一个枚举类型,它用于指定绘图目标(RenderTarget)如何处理Alpha通道信息。Alpha通道通常指的是颜色数据中的透明度部分,它的值范围通常是0到1或0到255,其中0表示完全透明,而1或255表示完全不透明。
以下是 D2D1_ALPHA_MODE
枚举的几种可能取值及其含义:
D2D1_ALPHA_MODE_UNKNOWN:
表示Alpha模式未知或者未初始化。
D2D1_ALPHA_MODE_PREMULTIPLIED:
预乘Alpha模式。在这种模式下,渲染的目标像素的颜色值已经与它们的Alpha通道预先相乘。这意味着当你绘制具有非完全不透明度(即Alpha值小于1)的颜色时,RGB分量已经被按比例减少了。预乘Alpha有助于减少混合操作中的颜色失真,并且是高效地进行透明度混合的标准方法之一。
D2D1_ALPHA_MODE_STRAIGHT:
直接Alpha模式。在这种模式下,每个像素的RGB分量和Alpha通道是独立存储的,没有进行任何预乘计算。当执行绘制操作时,Direct2D将根据设置的混合模式来处理Alpha通道。
D2D1_ALPHA_MODE_IGNORE:
忽略Alpha模式。在这种模式下,Alpha通道不会影响绘制结果。所有的像素都被当作完全不透明来处理。
D2D1_ALPHA_MODE_FORCE_DWORD:
该选项通常用作枚举类型的占位符,实际应用中并不使用。
选择正确的Alpha模式对于正确显示带有透明度的图像、文本和其他图形元素至关重要。尤其是在多层绘制和混合操作中,确保正确的Alpha模式可以避免不必要的视觉错误。
“正常混合”是什么?
顾名思义,就是上层图片覆盖下层图片。从感官上,上层的颜色不应该被下层影响。
比如A覆盖B:
当两张图片完全不透明时A的像素取代B的像素。
而A、B非不透明时,透明度则在此次混合中起关键作用。
因此“正常混合”其实实质是“透明度混合(Alpha Blending)”
设A覆盖B
C表示Color(不包括不透明度通道)
α表示不透明度通道
下标A,B,O分别表示上层图像、下层图像、覆盖后图像
则对透明度有:
或者写成更常见的另一种形式:
对颜色通道有:
当颜色为“预乘透明度”的情形
当颜色为 预乘透明度(premultiplied alpha) 时,它的颜色通道预乘了α通道的值。
具体含义不在此展开,只给出此情形的透明度混合公式:
颜色透明通道预乘可以加快计算效率。