读取bmp文件

ericming200409 2009-11-23 07:18:21

hDIB = (HDIB) ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, dwBitsSize);
if (hDIB == 0)
{
return NULL;
}

pDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);
if (file.ReadHuge(pDIB, dwBitsSize - sizeof(BITMAPFILEHEADER)) !=
dwBitsSize - sizeof(BITMAPFILEHEADER) ) // 这里pDIB指向的内存是整个文件大小的内存,为什么
//不读BITMAPHEADER部分,估计是我理解错了,请高手指点下
{
::GlobalUnlock((HGLOBAL) hDIB);
::GlobalFree((HGLOBAL) hDIB);
return NULL;
}


...全文
110 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ericming200409 2009-11-26
  • 打赏
  • 举报
回复
我就是看着CDib类发现问题的,我按我的思路写的代码,运行没有问题。。。谢谢各位了
cloudyi 2009-11-24
  • 打赏
  • 举报
回复
去看下CDib类吧, 其实读取的时候应该分段读取比较好, 先读文件头, 再读文件信息头和调色板, 后面才是数据,这样的话对位图的信息获取应该比较直观, 代码可读性更强
poy49295 2009-11-23
  • 打赏
  • 举报
回复
确实没必要预留BitmapFileHeader的内存空间。其实楼主可以试一下修改成不预留空间的分配,再跑一下程序,如果正常运行就没问题,若还有问题再发上来一起讨论
ericming200409 2009-11-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 idle_ 的回复:]
bmp文件的内容前面是个BitmapFileHeader, 后面接的才是DIB信息即BitmapInfo + Scanline data
[/Quote]
这个我知道,我是说既然给pDIB分配的内存是可以容纳包含BITMAPFILEHEADER的,为什么读取的时候不一起读进来呢,或者不要分配那么多的内存空间,以免不必要的浪费嘛,很多本书都是这么写的,我想是不是有深层次的原因
阿呆_ 2009-11-23
  • 打赏
  • 举报
回复
bmp文件的内容前面是个BitmapFileHeader, 后面接的才是DIB信息即BitmapInfo + Scanline data

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧