vb 调用 getdibits 函数获得数组元素全部为0的问题
我做了1个程序 需要大量用到图片对比 而对比的基础是DIB函数当调用达到一定次数时(有时候1个小时多 有时候几个小时 最短是1个半小时 ) getdibits函数所获得的数组元素 全部为0 无法再进行对比操作
(是调试运行)
来个这方面的高手啊 千万别回答1半就不管了。。。。 CSDN里没结的帖子基本都这情况。。。求热心人
--------------------编程问答-------------------- 贴你的代码。否则都是空谈。 --------------------编程问答-------------------- --------------------编程问答-------------------- iBitmap = CreateDIBSection()
在后面使用时,为何不验证 iBitmap 是否成功创建?
SelectObject iDC, iBitmap
这儿为何不把 iDC 原来的 hBitmap 保存下来,在 DeleteDC iDC 之前把它还原?
--------------------编程问答--------------------
同意楼上的!
问题不一定是在你所贴的代码中,你最好监视下运行情况,看看是否有内存泄露而导致创建对象失败 --------------------编程问答-------------------- GetDC导致的GDI资源泄露,把相关代码改为如下。
dim ScreenDc as long
ScreenDc = GetDC(0)
BitBlt iDC, 0, 0, iwidth, iheight,ScreenDc , x, y, vbSrcCopy
GetDIBits iDC, iBitmap, 0, iheight, bBytes(0, x, y), bi24BitInfo, DIB_RGB_COLORS
ReleaseDC 0,ScreenDc --------------------编程问答-------------------- BitBlt iDC, 0, 0, iwidth, iheight, GetDC(0), x, y, vbSrcCopy
入楼上所说 看来问题在这句中的getdc(0)上
idc 是 CreateCompatibleDC缩创建的dc环境 已经得到释放
但getdc(0) 所创建的 dc环境没得到释放
getdc(0) 返回的是一个 long类型数据 因为没得到释放的关系
每次调用就会向这个long空间 塞入一次dc环境数据 当这个long环境塞满了 就会返回0?
我是这样理解的 对不对?
--------------------编程问答-------------------- 又是回答一半不管的。。。。 --------------------编程问答-------------------- 别人已经给你找到问题根源,并告诉了你解决方法,还叫“回答一半”?
别人给你说清楚了方法和原则,至于如何去‘理解’是你自己的事。
你需要做到的就是‘遵循规则’。
补充:VB , 基础类