所以,我正在使用 AlphaBlend () 将矩形从一个 HBITMAP 复制到另一个。
可以,但是有问题。每当我使用 FillRect() 函数时,HBITMAP 中的 alpha 值都会猛烈地变为 0。每次。
因此,在每次调用 FillRect() 等 Win32 API 函数后,我必须执行 GetDIBits(),将 alpha 重置回 255,然后执行 SetDIBits()。
那么,有没有办法创建 HBRUSH 或以其他方式告诉 FillRect() 不要触摸它将要绘制到的 HBITMAP 中的 alpha channel 值?
最佳答案
除了 AlphaBlend...BitBlt 是唯一一个以任何方式保留 alpha channel 的其他 GDI 函数。
因此,您的选择基本上是:
改用 DIBSections。这不会解决 GDI api 覆盖 alpha channel 的基本问题,但作为 DIBSection,您可以避免修补 alpha channel 所需的昂贵的 DDB -> DIB -> DDB 转换。 DIBSections 使您可以访问 HBITMAP 和存储位图位的内存部分。
使用像 GdiPlus 这样的 alpha 感知绘画 API而不是 GDI。
关于c++ - 使用 AlphaBlend() 和 FillRect(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1853584/