VC++中频繁读取位图,频繁重绘发生意外结果怎么回事?
重绘命令是这个:InvalidateRect(hWnd,NULL,1)位图读取是用这个代码:hbmp=(HBITMAP)LoadImage(NULL,L"..\\snc....
重绘命令是这个: InvalidateRect(hWnd,NULL,1)
位图读取是用这个代码:hbmp =(HBITMAP)LoadImage(NULL,L"..\\snc.bmp",IMAGE_BITMAP,700,450,LR_LOADFROMFILE);
SelectObject(mdc,hbmp);
BitBlt(hdc,162,30,700,450,mdc,0,0,SRCCOPY);
图像什么都可以正常显示,但是频繁重绘后,到大概上百次以后就发生位图无法读入的问题。ReleaseDC也用过,并不好使,求好心人解释,而且好像是大图才有的问题。 展开
位图读取是用这个代码:hbmp =(HBITMAP)LoadImage(NULL,L"..\\snc.bmp",IMAGE_BITMAP,700,450,LR_LOADFROMFILE);
SelectObject(mdc,hbmp);
BitBlt(hdc,162,30,700,450,mdc,0,0,SRCCOPY);
图像什么都可以正常显示,但是频繁重绘后,到大概上百次以后就发生位图无法读入的问题。ReleaseDC也用过,并不好使,求好心人解释,而且好像是大图才有的问题。 展开
展开全部
位图无法读入是由于GDI句柄资源耗尽导致的。当使用完资源后,必须通过调用函数以释放被占用的句柄资源,对于位图资源,需要使用DeleteObject函数释放。这是因为,在调用LoadImage这类API时,系统会在堆中分配GDI资源,直到用户调用了对应的函数,或者程序正常退出时,这些句柄资源才会被释放。而这些句柄资源在系统中是有限的,当对其申请达到上限时,程序就会发生异常,甚至还会导致系统异常(比如无法启动新的应用程序,程序窗体文字无法正常显示等)。以前我在写程序的过程中,也遇到这样的问题,当时连任务管理器无法启动(因为新程序启动时也会申请GDI句柄资源)。后来使用BoundsChecker之类的工具,才检测到是某个逻辑分支没有调用对应的释放函数(正是DeleteObject函数),加上去就好了。
参考资料: http://baike.baidu.com/view/1080246.htm
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
单片机复位电路原理通常包括以下几个主要步骤:1. 电平检测:单片机复位电路需要检测一个关键参数,即控制器的复位引脚是否处于高电平(2V)。如果复位引脚没有高电平,复位电路就会启动一个复位过程来清除单片机内部的错误状态并将其恢复到正常状态。2...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询