如何在现有颜色上实现位图透明?

3

我正在使用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

您可以创建一个位图透明层。我的问题是这取决于目标位置的hdc已经为空。我的不是,因此代码会擦除(变为黑色)现有图像的一部分。如何将透明位图复制到已经绘制了内容的区域?
我尝试将掩码和图像都发送到1000, 1000 - 在hdc中没有任何东西被绘制,然后在BitBlt()中使用SRCCOPY将结果从hdc复制到hdc。但是要么什么也没有在1000, 1000处绘制出来,要么就无法正确地复制回来。
1个回答

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
);

如果您的源位图的背景颜色为黑色(#000000),只需将crTransparent设置为RGB(0,0,0)即可正常工作。

1
哦,我的天啊,这太完美了!非常感谢!我必须包含Msimg32.lib才能使它正常工作,但现在它完美地运行。 - Brian Gradin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接