AlphaBlend失败,错误码87
如题,写测试程序的时候遇到了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相关推荐
- qq联合登陆失败 错误码100044
最近刚将工程从eclipse搬到studio上,问题多多啊 . 其中一个就是qq联合登陆失败 错误码100044 各种查资料找原因 说法1:原来是上线之后的qq appid和appkey不一样,一致 ...
- mysql 远程 2003错误_MySQL远程连接失败(错误码:2003)
注:本文来源于< MySQL远程连接失败(错误码:2003)> (1) Xshell远程登陆服务器,用"ps aux|grep mysql"命令查看,MySQL服务已启 ...
- 小米手机安装失败错误码
小米手机安装失败错误码 用miui系统开发app,出现了一些安装失败的情况 错误码与原因 安装失败错误码 -7 与已安装应用签名不同 安装失败错误码 -15 应用仅仅属于测试的debug版本,仅限于a ...
- LoadLibrary 调用失败错误码记录
在某些服务器上,LoadLibrary 函数会出现调用失败的情况,以下是我的一些出错经验,希望能给其他人提供一些思路: 1.错误码 126 (找不到指定的模块): 1.确保该动态库存在,杀毒软件有时会 ...
- win7下使用共享内存方式CreateFileMapping失败错误码5的解决方法
在普通应用程序中使用共享内存方式创建内存共享对象时,CreateFileMapping函数总是返回句柄为NULL,通过GetLastError得到返回错误码 0x5, 问题解决: 使用Local 代替 ...
- win7工作组计算机无法连接打印机,win7无法连接打印机,操作失败,错误码为0x000003e...-win7无法连接到打印机,win7无法连接打印机拒绝...
因为网络打印机是装在WinXP的电脑上的原因,因为XP的驱动无法安装到Win7上,所以使得添加打印机失败.通抄过重置驱动就可以解决这个问题了 可以考虑如下操作: 1.最好所有计算机在同一工作组 ,我的 ...
- CStdioFile open失败 错误码123
1,路径中包含不存在的文件夹,比如CString path=_T("D:\\aa\\bb\\cc.txt");,如果aa,或者bb不存在则打开不成功. 可用GetFileAtrri ...
- 如何解决应用安装失败错误码-13的问题
今天遇到一个问题,有用户反馈从华为应用市场下载一个新应用时,提示安装失败. 打开提示信息,查看失败详情.看到具体的失败信息是Conflicting Provider,Error Code:-13.另外 ...
- Win10-1903安装补丁KB4497936总失败错误码0x800f081f的解决办法
清理升级记录库也没用... 从v2ex.com上看到的可用: 1)下载CAB补丁 访问:https://uupdump.ml/get.php?id=c0340fe5-efce-4c5c-bcb3-6e ...
- linux qq 登录失败 错误码 -1,下载最新pidgin2.0.1源代码解决登录QQ提示密码错误
相信现在大家很多人都开始用pidgin(gaim2)了,这个东西确实不错,但是该死的腾讯qq协议头变来变去,搞的linux下的im软件都上不了qq,前端时间pidgin还可以上的,现在也上不了了,还好 ...
最新文章
- 通过Flask和Redis构造一个动态维护的代理池
- [vue] vue父子组件双向绑定的方法有哪些?
- Java设计模式11:Facade
- Ubuntu16.04版安装VMwareTools的步骤和没法挂载目录问题的解决
- 2019交通顶级期刊_2019年顶级11面试准备书
- 北大、清华计算机课程资源集
- 铺地毯(luogu 1003)
- PHP专家陪练营试听课程下载
- SpringCloud Greenwich版本集成OAuth2.0
- 锐捷linux客户端进路由器,锐捷WLAN无线产品之SSH管理
- 微信公众号前端支付实现
- 戴尔DELL——G3-3590笔记本BIOS设置u盘启动
- 将数组分为两部分,使得这两部分和最接近,返回这两部分的差值
- 高并发下如何快速使用MQ实现缓冲流量,削峰填谷
- A. Busiest Computing Nodes
- 苹果笔记本的end键_苹果电脑键盘快捷键使用技巧
- 尊重孩子 梅兰芳“宠溺有道”
- Nginx负载均衡探活max_fails和fail_timeout的设置、根据参数转发upstream
- 一般处理程序可以类似路由的_网络核心动作路由处理程序和方法
- 企业/工作室官网 期末作业