如何对现有颜色进行位图透明度?

Bri*_*din 3 c++ winapi transparency bitmap

我正在使用 Win32。我在这里发现,如果您使用:

BitBlt(hdc, 0, 0, 32, 32, hdcMem, 0, 0, SRCAND); // hdc has mask in it
BitBlt(hdc, 0, 0, 32, 32, hdcMem, 0, 0, SRCPAINT);`// hdc has regular image in it
Run Code Online (Sandbox Code Playgroud)

您可以创建位图透明度。我的问题是,这依赖于 hdc 在目标位置上已经是空的事实。我的不是,所以代码擦除(使黑色)现有图像的一部分。如何将透明位图复制到已绘制内容的区域?

我尝试将掩码和图像发送到 1000, 1000 - hdc 中没有绘制任何内容,然后在 BitBlt() 中使用 SRCCOPY 将结果从 hdc 复制到 hdc。但是要么没有在 1000、1000 处提取,要么没有正确复制回来。

Hao*_*eng 7

你可以TransparentBlt改用。

BOOL TransparentBlt(
  _In_  HDC hdcDest,
  _In_  int xoriginDest,
  _In_  int yoriginDest,
  _In_  int wDest,
  _In_  int hDest,
  _In_  HDC hdcSrc,
  _In_  int xoriginSrc,
  _In_  int yoriginSrc,
  _In_  int wSrc,
  _In_  int hSrc,
  _In_  UINT crTransparent
);
Run Code Online (Sandbox Code Playgroud)

如果源位图的背景颜色是黑色( #000000),只需设置crTransparent为即可RGB(0,0,0)