gpt4 book ai didi

c++ - 使用 AlphaBlend() 和 FillRect()

转载 作者:行者123 更新时间:2023-11-30 02:12:22 24 4
gpt4 key购买 nike

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

可以,但是有问题。每当我使用 FillRect() 函数时,HBITMAP 中的 alpha 值都会猛烈地变为 0。每次。

因此,在每次调用 FillRect() 等 Win32 API 函数后,我必须执行 GetDIBits(),将 alpha 重置回 255,然后执行 SetDIBits()。

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

最佳答案

除了 AlphaBlend...BitBlt 是唯一一个以任何方式保留 alpha channel 的其他 GDI 函数。

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

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

  2. 使用像 GdiPlus 这样的 alpha 感知绘画 API而不是 GDI。

关于c++ - 使用 AlphaBlend() 和 FillRect(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1853584/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com