请问读取BMP文件有没有什么好的算法?不用WinAPI!

idoloveyou 2004-09-10 12:47:24
为什么我显示图像的速度,尤其是24位图,比ACDSee 2.44差那么多呢!!!
...全文
118 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
eastsun 2004-09-11
  • 打赏
  • 举报
回复


不用api读取bmp比较简单,但要显示起来就相对麻烦了。
whoo 2004-09-11
  • 打赏
  • 举报
回复
想让你的代码立刻其作用的话,简单的测试方法就是把 屏幕颜色调成该bmp的色深 在运行。
whoo 2004-09-11
  • 打赏
  • 举报
回复
sorry,没说清楚.
CreateBitmap 创建的是DDB, bmp需要和dc兼容才行。

不同的bmp格式需要创建DIB.
CreateDIBitmap
lanstar200 2004-09-10
  • 打赏
  • 举报
回复
你是怎么显示的?
idoloveyou 2004-09-10
  • 打赏
  • 举报
回复
to whoo:
我怎么显示不出东西来呢??
HDC hdcMem;
hdcMem = CreateCompatibleDC(hdc);
HBITMAP hBitMap;
hBitMap = CreateBitmap(bmih.biWidth, bmih.biHeight, 1, bmih.biBitCount, btData);
SelectObject(hdcMem, hBitMap);
BitBlt(hdc, 0, 0, bmih.biWidth, bmih.biHeight, hdcMem, 0, 0, SRCCOPY);
DeleteObject(hBitMap);
DeleteDC(hdcMem);
这样什么都没有
菜牛 2004-09-10
  • 打赏
  • 举报
回复
一个一个点的SetPixel!!!???
这要不是不慢简直就没天理了。
whoo 2004-09-10
  • 打赏
  • 举报
回复
一个一个点的SetPixel!!!???
这要不是不慢简直就没天理了。


把像素一次性读入缓冲区,然后 CreateBitmap 直接用缓冲区初始化。再BitBlt。
图像大的话,可以按照扫描线读,用 SetDIBitsToDevice 分段处理。
idoloveyou 2004-09-10
  • 打赏
  • 举报
回复
我就是一个一个点的SetPixel啊
先CreateCompatibleDC,然后CreateCompatibleBitmap,在这个memDC中SetPixel,一个一个点的画,二重循环,然后BitBlt啊
这个过程可以怎么优化吗?
楼上的,CxImage是什么?哪里有?

BTW,我说的不用WinAPI是指不用LoadImage这样现成的东西,自己写读取和显示过程
broadoceans 2004-09-10
  • 打赏
  • 举报
回复
看一看CxImage的代码即可

19,468

社区成员

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

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