设备上下文 (HDC) 中的 Alpha 通道

Alpha channel in DeviceContext (HDC)

本文关键字:中的 Alpha 通道 HDC 上下文      更新时间:2023-10-16

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

不能

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

有关详细信息,请阅读以下三篇文章:

  • 使用 GDI 的透明图形,第 1 部分
  • 使用 GDI 的透明图形,第 1 部分 1/2
  • 使用 GDI 的透明图形,第 2 部分

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

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