有没有办法我可以确定,如果一个裂使用阿尔法渠道?我读 问题333559问题685684, 但他们的问题是关于位图。显然,一些裂有alpha channel(虽然他们不能使用它。这叫"类型1"),而其他人不这样做("2类").我知道这样做如下:

鉴于一跳,

  1. 创建一个兼容的直流,并创建一个DIB部分。选择创造HBITMAP到兼容。

  2. 位块传输的源裂的兼容。现在检查DIB部分位。2型裂,此后每3个字节有一个字节总是0(如255 255 255 0);1型,这些字节通常255(如250 240 230 255).为了避免误报,我memset位的所有0x80之前的呼叫。

  3. 使用GetDIBits直接的源裂,指定HBITMAP为GetCurrentObject(跳,OBJ_BITMAP).对于这两种类型的裂,第4字节总是0.

  4. 改变DC位图通过调用ExtTextOut.2型、ExtTextOut总是设置的4个字节到0。1型、ExtTextOut永远离开他们的不变。

我还注意到,源裂的创建是通过Api(CreateCompatibleDC(),BeginPaint()...)总2型。1型裂是从标准的控制(如菜单中文本)。甚至是跳我CreateCompatibleDC从一种类型1变成一种类型2。

因此,一方面,我感到沮丧,Microsoft不提供同等信息的开发(另一个例子可能是因为你不知道方向的一个HBITMAP在创建之后),另一方面,我仍然想知道是否有一个方式区分这些跳.

谢谢你的帮助。

有帮助吗?

解决方案

我只是模仿GDI的行为和一切工作正常。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top