关于C#:DeviceContext(HDC)中的Alpha通道

Alpha channel in DeviceContext (HDC)

请帮助我使用HDC中的Alpha通道。我使HDC DC抛出CreateCompatibleDC。比调用CreateDIBSection可以在内存中找到图像的字节。比将DrawFrameControl调用到此DC。一切正常,但是内存中每个像素有4个字节,alpha通道填充为00。即使以前有FF,也是如此。但是我需要Alpha通道。如何使DrawFrameControl设置真实的Alpha值,或者只是不要触摸它们。谢谢你。对不起,英语不好:(


您不能使GDI不能写入每像素4字节位图的alpha /保留字节。除了一些AlphaBlend之类的功能外,GDI并不真正了解Alpha。但是,您可以使用其写入的知识并将alpha重置为0来知道它写入的像素,然后手动修复alpha。

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

  • 带有GDI的透明图形,第1部分
  • 带有GDI的透明图形,第1 1/2部分
  • 带有GDI的透明图形,第2部分

前两个可能会给您足够的信息来实现您想要的。

这些文章采用通用方法来处理具有GDI功能的alpha,方法是扫描遮盖了alpha的像素并对其进行修复(并采用更先进的技术以正确的alpha相互绘制多个对象。) FrameRect绘制一个矩形,其中的线宽为1单位高。您可能会发现使用线条进行绘制,甚至直接编辑内存中的像素位图,以在内存中绘制直线,效率更高。这样就不必扫描整个位图以查找GDI绘制的像素了-毕竟,因为它是一个具有一个单位宽边的矩形,所以您确切地知道已经绘制了哪些像素,并且可以自己对其进行编辑。