【问题标题】:Alpha channel in DeviceContext (HDC)DeviceContext (HDC) 中的 Alpha 通道
【发布时间】:2012-04-24 12:36:16
【问题描述】:

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

【问题讨论】:

    标签: c++ windows winapi gdi


    【解决方案1】:

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

    欲了解更多信息,请阅读以下三篇文章:

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

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

    【讨论】:

      猜你喜欢
      • 2011-01-21
      • 2010-11-29
      • 1970-01-01
      • 2011-06-11
      • 2011-05-06
      • 2012-11-30
      • 2011-12-04
      • 2011-09-07
      • 1970-01-01
      相关资源
      最近更新 更多