(参考大佬的博客,自己做个记录)
经典图片为例:
建议用010EDITOR打开,再套上官方BMP模板。(在另一篇资源里,下面默认打开了模板)注意windows下表示属性的一组16进制数要倒着读。例如下方36 00 0C 00为文件大小,转为16进制应为0C 00 36即 786486(dec)。
必要文件头:
BITMAPFILEHEADER: 前两字节为BMP文件头42 4D,之后4字节36 00 0C 00为整个文件大小。剩下的一般用不到(也不太会解释。。)模板中会显示BITMAPFILEHEADER大小为Eh,即14dec。
BITMAPINFOHEADER:模板中显示大小为28h,即40dec。第一个属性biSize的值也是该部分大小40dec。biWidth、biHeight为图像宽、高(512*512像素)。biPlanes固定为1。biBitCount值是每个像素的位数:1-黑白图,4-16色,8-256色,24-真彩色。biSizeImage值为图片全部像素占用的字节数786432。
计算图片正确大小:除去必要的文件头,剩余16进制字符均表示像素块,文件尾可能会windows自动补0(那就除去最后两字节的00 00)。图像位深度为24,转为2进制为0001 1000,所以单个颜色值要用2个16进制数值表示(因为计算机一字节为基本单位?)。表示一个像素块用R\G\B三个值,则一个像素点在文件中占6个16进制字符。第二个文件头信息中biSizeImage(786432)即图片大小。786432=512(宽)*512(高)*3(每个像素点占3字节=6个16进制位)。
像素点排列方式:(不知道为啥手动去试了试)
除去文件头,第一个像素点的RGB值为R:9E G:51 B:37。图片中取色后发现是左下角的像素点。试过多个点发现排列方式为(例如3*3图片,数字是排列顺序)