HDC是否使用alpha通道?

时间:2010-02-25 19:34:35

标签: windows bitmap alpha hdc color-channel

有没有办法确定HDC是否使用alpha通道?我读过Question 333559Question 685684,但他们的问题是关于BITMAP。显然,一些HDC有alpha通道(虽然他们可能不会使用它。称之为“Type 1”)而其他人则不称(“Type 2”)。我通过以下方式了解这一点:

鉴于HDC,

  1. 创建兼容的DC,并创建DIB部分。在兼容的DC中选择创建的HBITMAP。

  2. BitBlt源HDC到兼容的DC。现在检查DIB部分位。对于类型2 HDC,每3个字节后有一个字节始终为0(如255 255 255 0);对于类型1,这些字节通常为255(如250 240 230 255)。为了避免误报,我在调用之前将这些位设置为0x80。

  3. 直接在源HDC上使用GetDIBits,将HBITMAP指定为GetCurrentObject(hdc,OBJ_BITMAP)。对于这两种类型的HDC,第4个字节始终为0.

  4. 通过调用ExtTextOut更改DC位图。对于类型2,ExtTextOut始终将第4个字节设置为0.对于类型1,ExtTextOut始终保持不变。

  5. 我还注意到由API创建的源HDC(CreateCompatibleDC(),BeginPaint()...)始终是类型2.类型1 HDC来自标准控件(如菜单文本)。即使是类型1的HDC I CreateCompatibleDC也会成为类型2。

    所以,一方面,我很沮丧,微软没有向开发者提供平等的信息(另一个例子可能是你在创建HBITMAP后无法知道HBITMAP的方向),另一方面,我是仍然想知道有没有办法区分这些HDC。

    感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我只是模仿GDI的行为,现在一切正常。