【问题标题】:Using AlphaBlend() and FillRect()使用 AlphaBlend() 和 FillRect()
【发布时间】:2010-12-23 15:21:26
【问题描述】:

所以,我使用AlphaBlend() 将矩形从一个 HBITMAP 复制到另一个。

它可以工作,但是有一个问题。每当我使用 FillRect() 函数时,HBITMAP 中的 alpha 值都会被猛烈抨击为 0。每次。

所以我必须 GetDIBits(),将 alpha 重置回 255,然后在每次调用诸如 FillRect() 之类的 Win32 api 函数之后,再使用 SetDIBits()。

那么,有没有办法创建一个 HBRUSH 或以其他方式告诉 FillRect() 不要触摸它要绘制到的 HBITMAP 中的 alpha 通道值?

【问题讨论】:

    标签: c++ winapi gdi


    【解决方案1】:

    除了 AlphaBlend...BitBlt 是唯一能以任何方式保留 Alpha 通道的其他 GDI 函数。

    因此,您的选择基本上是:

    1. 切换到使用 DIBSection。这不会解决 GDI api 覆盖 alpha 通道的基本问题,但作为 DIBSection,您可以避免修补 alpha 通道所需的昂贵的 DDB -> DIB -> DDB 转换。 DIBSection 让您可以访问 HBITMAP 和存储位图位的内存部分。

    2. 使用 GdiPlus 之类的 alpha 感知绘画 API 而不是 GDI。

    【讨论】:

      猜你喜欢
      • 2012-09-24
      • 1970-01-01
      • 1970-01-01
      • 2013-04-13
      • 2012-07-23
      • 2012-02-16
      • 2018-12-11
      • 2020-06-13
      • 2014-01-09
      相关资源
      最近更新 更多