首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HDC使用alpha通道吗?

HDC使用alpha通道吗?
EN

Stack Overflow用户
提问于 2010-02-25 19:34:34
回答 1查看 763关注 0票数 2

有什么方法可以确定HDC是否使用alpha通道?我读过Question 333559Question 685684,但他们的问题都是关于位图的。显然,有些HDC有alpha通道(尽管他们可能不使用它)。将此称为“类型1"),而其他人则不这样称呼(”类型2")。我这样做是知道这一点的:

如果是HDC,

  1. 创建兼容的DC,并创建DIB部分。将创建的HBITMAP选择到兼容的DC中。
  2. BitBlt是兼容DC的源HDC。现在检查DIB段位。对于类型2 HDC,在每3个字节之后总是有一个字节(像255 255 255 0);对于类型1,这些字节通常是255 (像250 240 230 255)。为了避免误报,我在调用之前将位设置为所有0x80。
  3. 直接在源hdc上使用GetDIBits,将HBITMAP指定为GetCurrentObject(hdc,OBJ_BITMAP)。对于这两种类型的HDC,第四个字节总是0。
  4. 通过调用ExtTextOut更改DC位图。对于类型2,ExtTextOut总是将第4个字节设置为0。对于类型1,ExtTextOut总是不动它们。

我还注意到由API (CreateCompatibleDC()、BeginPaint() .)创建的源HDC类型1 HDC来自标准控件(如菜单文本)。即使是来自类型1的HDC i CreateCompatibleDC也变成了类型2。

因此,一方面,我感到沮丧的是,微软没有向开发人员提供平等的信息(另一个例子可能是,在创建HBITMAP之后,您无法知道它的方向),另一方面,我仍然想知道是否有一种方法来区分这些HDC。

谢谢你帮忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-30 05:15:09

我只是模仿GDI的行为,现在一切都很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2336997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档