c++ - 如何对现有颜色进行位图透明度处理?

标签 c++ winapi bitmap transparency

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

相关文章:

windows - 如何在 GetLastError() 返回 ERROR_MOD_NOT_FOUND 后获取丢失的 DLL 名称

c++ - CreateFileMapping() 返回 null

android - 从位图中获取图像并将其放入字符串中

c# - 带有 Arduino 的 Alt-Tab 踏板

C++警告如果在函数中重新声明成员变量

C++正在从不同的线程写入和读取变量未定义的行为

ios - 导致设备内存泄漏的位图

c++ - 在 C++ 中有替代的 str.find 吗?

捕获窗口像素而不考虑其 z 顺序

c# - 使用 C# 5.0 进行并行图像处理