我正在使用Win32。我找到here如果您使用:
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中抽出任何东西,要么它没有正确复制。
答案 0 :(得分:4)
您可以改为使用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)
即可。