DeviceContext(HDC)中的Alpha通道

时间:2012-04-12 07:03:18

标签: c++ windows winapi hdc

请帮我处理HDC中的alpha通道。我让HDC dc抛出CreateCompatibleDC。比调用CreateDIBSection并可以在内存中找到图像的字节。比调用DrawFrameControl到这个dc。一切正常,但在内存中每个像素有4个字节,alpha通道填充00.即使之前有FF。但我需要alpha通道。如何让DrawFrameControl设置真正的alpha值或者不要触摸它们。谢谢。抱歉英语不好:(

1 个答案:

答案 0 :(得分:7)

您不能使GDI不写入每像素四位字节位图的alpha /保留字节。除了AlphaBlend之类的几个函数之外,GDI并不是真正的alpha感知。但是,您可以使用它写入的知识并将alpha重置为0 以了解它写入的像素,然后手动修复alpha。

有关更多信息,请阅读以下三篇文章:

前两个可能会为您提供足够的信息来实现您的目标。

这些文章采用了一种通用的方法来处理带有GDI函数的alpha,通过扫描alpha被破坏的像素并修复它(并进入更先进的技术,用正确的alpha绘制彼此之上的几个东西。) FrameRect绘制一个矩形,其中线条是一个单位宽和高。您可能会发现使用线条绘制更有效,甚至直接编辑内存中的像素位图,以在内存中绘制直线。这样可以避免为GDI绘制的像素扫描整个位图 - 毕竟,因为它是一个单位宽边的矩形,你可以确切地知道哪些像素已被绘制,并且可以自己编辑它们。

相关问题