我正在使用 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 处提取任何内容,要么没有正确复制回来。
最佳答案
您可以使用 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)
它将起作用。
关于c++ - 如何对现有颜色进行位图透明度处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14029928/