如何求8位、24位BMP图像的每行的字节数

hongzhangli 2003-05-17 08:49:24
我看了一本关于数字图像处理的书,他提供的算法如下:
lLineBytes=WIDTHBYTES(m_nWidth*8),其中WIDTHBYTES的定义是:
#define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4)我不明白为何用此公式;
m_nWidth是图像的宽度;请大侠帮忙解释一下公式.谢谢啦!
...全文
595 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongzhangli 2003-05-18
  • 打赏
  • 举报
回复
谢谢各位大侠啦
chegtion 2003-05-17
  • 打赏
  • 举报
回复
在保存或显示的时候,bmp要求每行字节数是4的整数倍。
比如灰度图吧,每行宽度是191个象素即191bytes
如果要保存所有图像信息,你在写文件时每行字节数必须为
192=(191*1+3)/4*4;(也可通过位运算:(191*1+3)&~3)
如果是24位的彩色图,即每个象素有3个Bytes,只要把上式中*1换成*3即可。
thundered 2003-05-17
  • 打赏
  • 举报
回复
也可以这样算嘛,(Width * 3(24bit)/1(8bit) + 3 ) / 4 * 4, 这样不是很清楚了,我看到许多都是用WIDTHBYTES(bits)宏的,始做甬者可能是某本书上的,不过只要理解了BMP的格式,自己就可以写出其他的换算函数,我也看到过用循环来算的
houdy 2003-05-17
  • 打赏
  • 举报
回复
在BMP文件中,要求每一行的字节数必须是4的倍数,WIDTHBYTES(bits)这个定义的意思就是为了保证每行都是4的倍数,注意必须要这样,要不然你显示的图片内容就会错位。
rabithao 2003-05-17
  • 打赏
  • 举报
回复
在BMP文件中,要求每一行的字节数必须是4的倍数
cherishahu 2003-05-17
  • 打赏
  • 举报
回复
1。
中午就去买。
我马上就要叫作业了,可是我了图象处理的算法都看不懂啊!
wrcluomo 2003-05-17
  • 打赏
  • 举报
回复
《VISUAL C++数字图像处理>
出到第二版了.我用的还是一版.大一点的书店应该都有吧.还有N多图像处理的书.没MONEY
没有买.怕把老板给买急了.
Tue 2003-05-17
  • 打赏
  • 举报
回复
http://www.csdn.net/Dev/Format/
满意了吧,什么都有。
cherishahu 2003-05-17
  • 打赏
  • 举报
回复
我想请问一下哪儿有这样的书啊.
有电子的版的没?
qiufuwang 2003-05-17
  • 打赏
  • 举报
回复
up
duwenyong 2003-05-17
  • 打赏
  • 举报
回复
每一行的字节数必须是4的整倍数,只要调用

//WIDTHBYTES(bi.biWidth*bi.biBitCount)就能完成这一换算。举一个例

//子,对于2色图,如果图象宽是31,则每一行需要31位存储,合3个

//字节加7位,因为字节数必须是4的整倍数,所以应该是4,而此时的

//biWidth=31,biBitCount=1,WIDTHBYTES(31*1)=4,和我们设想的一样。

//再举一个256色的例子,如果图象宽是31,则每一行需要31个字节存

//储,因为字节数必须是4的整倍数,所以应该是32,而此时的

//biWidth=31,biBitCount=8,WIDTHBYTES(31*8)=32,我们设想的一样。你可

//以多举几个例子来验证一下

//LineBytes为每一行的字节数

LineBytes=(DWORD)WIDTHBYTES(bi.biWidth*bi.biBitCount);

19,468

社区成员

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

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