我看了一个图像处理程序,在获取图像每行的字节数他是(((wide*8)+31)/32*4),其中WIDE是图像的宽度。一想是以四为单位进行进位,不是被四整除的增加变成被四整除的!想了一天也不知道为什么要这么做。有哪位达人经通这方面的请指教一下!小弟在此拜谢了!!!!!!!

解决方案 »

  1.   

    爲了效率+1
    以前有相同的帖子的
    http://topic.csdn.net/t/20040916/09/3377310.html
      

  2.   

    另外就是,windows下存储图像的每一行像素值时,如果存储该行像素值所占的字节数为4的倍数,则正常存储,否则,需要在后端补0,凑足4的倍数。 
      

  3.   

    要理解这一点需要从计算机原理方面来考虑。对于字长为32位的CPU,每次存取内存数据是4字节,其地址总线不包含最低两位地址。当从内存中读取数据时,如果内存地址是4的倍数,则一次即可读出;如果地址不是4的倍数,则需要读两次。例如从地址0x87654321处读一个DWORD值,则需要分别读出0x87654320和0x87654324这两个地址的数据,然后再合成0x87654321地址的数据。所以存取地址是4的倍数时速度比较快。
      

  4.   

    恐怕是用FFT所需要的:FFT处理的数字列长一般要求是2的幂次
      

  5.   

    《Visual C++ 数字图像处理(第二版)》P20:
    // 在计算图像大小时,采用公式:biSizeImage = biWidth' x biHeight.
    // 是biWidth,而不是biWidth,这里的biWidth'必须是4的整数倍,表示
    // 大于或等于biWidth的,离4最近的整数。#define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4)因为单位是bits,所以bits = width * 8个人看法:这个代码的作者没有领会其中原理,而是直接套用公式而已,如果单位是bytes,可以写成:
    (width + 3) / 4 * 4