7

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

4

1 回答 1

8

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

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

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

这些文章采用通用方法使用 GDI 函数处理 alpha,通过扫描 alpha 被破坏的像素并修复它(并使用更高级的技术以正确的 alpha 绘制多个相互叠加的东西。) FrameRect绘制一个矩形其中线条是一个单位宽和高。您可能会发现使用线条绘制甚至直接在内存中编辑像素位图以在内存中绘制直线更有效。这避免了必须扫描整个位图以查找 GDI 绘制的像素 - 毕竟,因为它是一个具有一个单位宽边缘的矩形,您可以确切地知道哪些像素将被绘制到,并且可以自己编辑它们。

于 2012-04-12T09:12:48.580 回答