如果知道是00,直接判断一下跳过好了。

解决方案 »

  1.   

    就是啊,既然你都知道了,跳过不就好了
      

  2.   

    跳过我也是知道的,但是怎么判断循环到了“00”,怎么跳过“00”,还在继续循环?
      

  3.   

    1楼和2楼的朋友在跟你开玩笑呢:)BMP文件的格式大致如此:--------------------------------------------------------文件头
    'B''M'                2字节(固定为BM)
    size                  4字节(文件的长度,单位byte)
    保留                    4字节
    偏移                    4字节 (到位图数据的偏移,单位byte)
    --------------------------------------------------------图像信息
    图像信息头              40字节(sizeof(BITMAPINFOHEADER))
    调色板                  不固定
    --------------------------------------------------------位图数据
    ........
    ........
    --------------------------------------------------------
    位图数据部分很重要的一点是每行的数据要对齐(原文: each scan line must be padded with zeroes to end on a LONG data-type boundary)。
    注:对齐的原因是为了优化操作。你用的是24bit的图像,每行33个像素,每像素3个字节。一行共99个字节,显然是不能以4个字节为单位进行对齐,要补零到4的倍数,也就是100。
    这就是为什么你看到一个字节的多余数据。每行,也有人叫每个扫描线,的步长,英文叫Stride,可以通过BitmapData.Stride来获得。
    存取操作一般不用(图像宽度*字节每像素*第几行 + ...),而要用(Stride * 第几行 + ...)来进行。要拿到图像数据,比较简单的是用Bitmap.LockBits()来得到一个BitmapData
    你要用ReadBytes也可以。这时可利用“图像信息头”得到图像的大小,色深等信息;利用“偏移”直接跳得图像数据部分;
    根据宽度和色深计算出“步长”;然后就可以自己读Bmp文件数据了。
      

  4.   

    顶一下6楼的,你把图片裁剪成32的再试试?