一些技术文章, 转贴居多!

LoadImage和CreateDIBitmap有什么不同

LoadImage和CreateDIBitmap有什么不同

遇到了一个问题:
我做一个显示位图的程序。由于需要在显示前有一些处理,图像描画的时候,不能用StretchDIBits这样的函数直接将DIB送到屏幕DC上,所以,就需要事先生成DDB的handle。
我现在知道有两个函数能够生成DDB handle。一个是LoadImage,一个是CreateDIBitmap,前者能够直接从文件就得到DDB handle,后者需要自己解析Bitmap将需要的BITMAPINFO和位图数据矩阵。
我要现实的图,是单色的,有时图很大。比如按照扫描仪400dpi以上扫上来的单色位图。大小在2MB以上。长宽在4000*5000像素的数量级。
现在的问题是,用LoadImage函数直接读取文件的时候,通常就能顺利的将DDB handle生成。而换成自己的位图解析的程序,用CreateDIBitmap生成handle,在这种大图的情况下有时就返回NULL,用GetLastError检查返回的错误码是8,大致意思是内存不足。
操作系统是Windows2000,内存512MB。
LoadImage和CreateDIBitmap有什么不同,能够导致这样的情况?
出了内存不足的问题,通常在显示器屏幕的颜色数设定于32bit的情况下。低于32bit的时候,就大多数不会出现问题了。


我在 2000 下用  ;CreateDIBitmap 建立过大于 32M 的bitmap, 没有发生过内存不足的情况.
我想是不是你传入的参数格式不正确导致函数失败呢? MSDN 的知识库
INFO: Reasons for Failure of Bitmap Functions(Q92529)详细讨论了bitmap 函数失败的原因,其中分析了影响 createdibbitmap 错误的原因有六七条,你参考一下. 呵呵.

posted on 2005-01-10 09:40  newblog  阅读(1756)  评论(0)    收藏  举报

导航