当前位置:编程学习 > VB >>

vb 调用 getdibits 函数获得数组元素全部为0的问题

我做了1个程序 需要大量用到图片对比 而对比的基础是DIB函数 
当调用达到一定次数时(有时候1个小时多 有时候几个小时 最短是1个半小时 ) getdibits函数所获得的数组元素 全部为0 无法再进行对比操作 
(是调试运行)

来个这方面的高手啊 千万别回答1半就不管了。。。。 CSDN里没结的帖子基本都这情况。。。求热心人
--------------------编程问答-------------------- 贴你的代码。否则都是空谈。 --------------------编程问答-------------------- --------------------编程问答-------------------- iBitmap = CreateDIBSection()
在后面使用时,为何不验证 iBitmap 是否成功创建?


SelectObject iDC, iBitmap
这儿为何不把 iDC 原来的 hBitmap 保存下来,在 DeleteDC iDC 之前把它还原?
--------------------编程问答--------------------
引用 3 楼  的回复:
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 ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,