如果你要处理的数据文件仅仅是去掉了54字节头信息的情况,以4倍对齐特性找边界才有效。
4位对齐原则是这样的,当BMP的宽度不为4的倍数时,以0补齐直到成为4的倍数,譬如图片色深为16位,宽为219像素,每一行像素的最后会补上一个字节使整行宽为220像素,这样就是4的倍数了,此时这些被补上去的0可以视为图片的“边界”。我的想法是如果图片本身内容不为全黑(即所有字节都为0),就可以扫描一遍数据区,扫描它里面每个0值之间的间隔,拿刚才的219为例(我实验过的图片之一),得到的所有间隔值里219占了绝大多数(因为图片中间会有点像素为黑即0,否则就全是219),你可以统计间隔里出现次数最多的非0间隔(我统计得到的是219),这就是图片原来的宽度,有了宽度为基础,高度(行数)也可以算出来,理想状态下也就是图片中没有一个黑点即0值,图片的高就等于所有的219个数加1,如果有也不要紧,可以将小于219的值累加直到宽度219,视为一行,这样一来,最后的宽和高都确定下来了,图片也就可以恢复头信息了。
这个方法有它的局限性:
图片的原宽度不能为4的倍数,否则不会以0补齐,也就没有“边界”了;
图片的色深应该是已知的,否则还要推算图片的色深,不过这应该可以做到;
图片不能全为黑色,否则“边界”和有效像素无法区分开来。
此思路只能视为一个补充方案,具体的实现也不一定就是我说的那个样子,具体对你那个问题能否有用也不好说,只是单独拿出来做的话是的确可以实现的。
另,由于代码是在上班时偷闲写的,很乱,就不献丑了。