我看了一本关于数字图像处理的书,他提供的算法如下:
lLineBytes=WIDTHBYTES(m_nWidth*8),其中WIDTHBYTES的定义是:
#define WIDTHBYTES(bits)    (((bits) + 31) / 32 * 4)我不明白为何用此公式;
m_nWidth是图像的宽度;请大侠帮忙解释一下公式.谢谢啦!

解决方案 »

  1.   

    http://www.csdn.net/Dev/Format/
    满意了吧,什么都有。
      

  2.   

    《VISUAL C++数字图像处理>
    出到第二版了.我用的还是一版.大一点的书店应该都有吧.还有N多图像处理的书.没MONEY
    没有买.怕把老板给买急了.
      

  3.   

    在BMP文件中,要求每一行的字节数必须是4的倍数,WIDTHBYTES(bits)这个定义的意思就是为了保证每行都是4的倍数,注意必须要这样,要不然你显示的图片内容就会错位。
      

  4.   

    也可以这样算嘛,(Width * 3(24bit)/1(8bit) + 3 ) / 4 * 4, 这样不是很清楚了,我看到许多都是用WIDTHBYTES(bits)宏的,始做甬者可能是某本书上的,不过只要理解了BMP的格式,自己就可以写出其他的换算函数,我也看到过用循环来算的
      

  5.   

    在保存或显示的时候,bmp要求每行字节数是4的整数倍。
    比如灰度图吧,每行宽度是191个象素即191bytes
    如果要保存所有图像信息,你在写文件时每行字节数必须为
    192=(191*1+3)/4*4;(也可通过位运算:(191*1+3)&~3)
    如果是24位的彩色图,即每个象素有3个Bytes,只要把上式中*1换成*3即可。
      

  6.   

    每一行的字节数必须是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);
      

  7.   

    在BMP文件中,要求每一行的字节数必须是4的倍数