如题,写测试程序的时候遇到了AlphaBlend函数失败,使用getlasterror获取错误码是87。找错找了好久,下面记录下。

1.源DC的位图不是32位的。

源DC就是指该函数的第二个HDC,第一个是目标DC,这个在微软的BLENDFUNCTION结构体说明(见msdn)里有提到。排查起来也容易,利用

BITMAP bmp;
GetObject(hBitmap, sizeof(BITMAP), (LPBYTE)&bmp);

下断点调试下,看看bmp的信息就知道了。

2.目标DC或者源DC的宽高有负值。msdn上面关于AlphaBlend函数的说明中有提到。

3.目标DC和源DC都是both the screen or the same memory bitmap(同一个屏幕或者同一个内存位图),并且源DC和目标DC的区域还有重合(交叉)。msdn上面关于AlphaBlend函数的说明中有提到。

4.源DC的宽高超出了源DC里位图的宽高。msdn上面关于AlphaBlend函数的说明中有提到。

5.源DC的位图(HBITMAP)正在被别的DC使用。这个特别标出来,比如创建兼容DC,创建兼容位图,然后将兼容位图选入到DC中(SelectObject函数),然后在位图上做各种操作(画图、写字等),最后一定要把这个位图的使用权给从dc里释放出来(SelectObject旧的到兼容DC里),这样后续这个HBITMAP才能继续被其他DC正确使用。(如果直接从这个兼容DC来使用AlphaBlend等函数进行上屏,那么肯定要上屏完毕才释放出来使用权啦。)

示例:

HDC hDc = GetDC(NULL);
HDC hMemDC = ::CreateCompatibleDC(hDc);
HBITMAP hBitmap = ::CreateCompatibleBitmap(hDc,200,200);
HGDIOBJ hOld = ::SelectObject(hMemDC,hBitmap);
RECT rcBMP = {0,0,200,200};//这个上duilib里面的绘制颜色的函数,带有alpha通道。也可以用其他的绘图函数加载图片等等。
CRenderEngine::DrawColor(hMemDC,rcBMP,0xFFFFFFFF);SelectObject(hMemDC,hOld);//必须把旧的obj给选入到DC里,以释放我们需要的hBitmap的使用权给其他DC用
DeleteDC(hMemDC);
ReleaseDC(hDc);//这里这个hBitmap就可以给其他dc用了。

最后再提醒一点:如果上用AlphaBlend来进行渲染(上屏),你的位图一定是32位的,一定要注意位图的alpha通道。gdi的画图函数都是不包含alpha通道的,如果创建了空白的32位位图,然后用gdi绘制,AlphaBlend会认为alpha通道值是0,也就是全透明了,可能就显示(渲染)不出任何东西了。

AlphaBlend失败,错误码87相关推荐

  1. qq联合登陆失败 错误码100044

    最近刚将工程从eclipse搬到studio上,问题多多啊 . 其中一个就是qq联合登陆失败  错误码100044 各种查资料找原因 说法1:原来是上线之后的qq appid和appkey不一样,一致 ...

  2. mysql 远程 2003错误_MySQL远程连接失败(错误码:2003)

    注:本文来源于< MySQL远程连接失败(错误码:2003)> (1) Xshell远程登陆服务器,用"ps aux|grep mysql"命令查看,MySQL服务已启 ...

  3. 小米手机安装失败错误码

    小米手机安装失败错误码 用miui系统开发app,出现了一些安装失败的情况 错误码与原因 安装失败错误码 -7 与已安装应用签名不同 安装失败错误码 -15 应用仅仅属于测试的debug版本,仅限于a ...

  4. LoadLibrary 调用失败错误码记录

    在某些服务器上,LoadLibrary 函数会出现调用失败的情况,以下是我的一些出错经验,希望能给其他人提供一些思路: 1.错误码 126 (找不到指定的模块): 1.确保该动态库存在,杀毒软件有时会 ...

  5. win7下使用共享内存方式CreateFileMapping失败错误码5的解决方法

    在普通应用程序中使用共享内存方式创建内存共享对象时,CreateFileMapping函数总是返回句柄为NULL,通过GetLastError得到返回错误码 0x5, 问题解决: 使用Local 代替 ...

  6. win7工作组计算机无法连接打印机,win7无法连接打印机,操作失败,错误码为0x000003e...-win7无法连接到打印机,win7无法连接打印机拒绝...

    因为网络打印机是装在WinXP的电脑上的原因,因为XP的驱动无法安装到Win7上,所以使得添加打印机失败.通抄过重置驱动就可以解决这个问题了 可以考虑如下操作: 1.最好所有计算机在同一工作组 ,我的 ...

  7. CStdioFile open失败 错误码123

    1,路径中包含不存在的文件夹,比如CString path=_T("D:\\aa\\bb\\cc.txt");,如果aa,或者bb不存在则打开不成功. 可用GetFileAtrri ...

  8. 如何解决应用安装失败错误码-13的问题

    今天遇到一个问题,有用户反馈从华为应用市场下载一个新应用时,提示安装失败. 打开提示信息,查看失败详情.看到具体的失败信息是Conflicting Provider,Error Code:-13.另外 ...

  9. Win10-1903安装补丁KB4497936总失败错误码0x800f081f的解决办法

    清理升级记录库也没用... 从v2ex.com上看到的可用: 1)下载CAB补丁 访问:https://uupdump.ml/get.php?id=c0340fe5-efce-4c5c-bcb3-6e ...

  10. linux qq 登录失败 错误码 -1,下载最新pidgin2.0.1源代码解决登录QQ提示密码错误

    相信现在大家很多人都开始用pidgin(gaim2)了,这个东西确实不错,但是该死的腾讯qq协议头变来变去,搞的linux下的im软件都上不了qq,前端时间pidgin还可以上的,现在也上不了了,还好 ...

最新文章

  1. 通过Flask和Redis构造一个动态维护的代理池
  2. [vue] vue父子组件双向绑定的方法有哪些?
  3. Java设计模式11:Facade
  4. Ubuntu16.04版安装VMwareTools的步骤和没法挂载目录问题的解决
  5. 2019交通顶级期刊_2019年顶级11面试准备书
  6. 北大、清华计算机课程资源集
  7. 铺地毯(luogu 1003)
  8. PHP专家陪练营试听课程下载
  9. SpringCloud Greenwich版本集成OAuth2.0
  10. 锐捷linux客户端进路由器,锐捷WLAN无线产品之SSH管理
  11. 微信公众号前端支付实现
  12. 戴尔DELL——G3-3590笔记本BIOS设置u盘启动
  13. 将数组分为两部分,使得这两部分和最接近,返回这两部分的差值
  14. 高并发下如何快速使用MQ实现缓冲流量,削峰填谷
  15. A. Busiest Computing Nodes
  16. 苹果笔记本的end键_苹果电脑键盘快捷键使用技巧
  17. 尊重孩子 梅兰芳“宠溺有道”
  18. Nginx负载均衡探活max_fails和fail_timeout的设置、根据参数转发upstream
  19. 一般处理程序可以类似路由的_网络核心动作路由处理程序和方法
  20. 企业/工作室官网 期末作业

热门文章

  1. 神经网络为什么叫神经网络【一文看懂】
  2. 一个简单的矩阵乘法计算器
  3. python写出租车计费系统_出租车自动计费器设计(课程设计报告模板)
  4. 计算机程序员crc算法,CRC-8校验原理及软件实现
  5. android 地址json文件,Android访问assets本地json文件的方法
  6. 字节跳动A/B实验背后的秘密:样本量计算
  7. 13-Spring动态代理
  8. 2021年全球与中国数字频率计行业市场规模及发展前景分析
  9. 一个链接搞定源码下载
  10. 时域、频域、傅里叶变换