DeviceContext中的Alpha通道(HDC)

请帮助我在HDC的alpha通道。 我使HDC直stream投掷CreateCompatibleDC。 比调用CreateDIBSection并可以在内存中find图像的字节。 比调用DrawFrameControl这个直stream。 所有的作品,但在内存中有4个字节每个像素和alpha通道填充00。即使有FF前。 但是我需要alpha通道。 我怎样才能使DrawFrameControl设置真正的alpha值或只是不要触摸它们。 谢谢。 对不起,英文不好

Solutions Collecting From Web of "DeviceContext中的Alpha通道(HDC)"

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

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

  • 与GDI透明图形,第1部分
  • 与GDI透明图形,第1部分1/2
  • 与GDI透明图形,第2部分

前两个可能会给你足够的信息,以达到你想要的。

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