不知道第几次看这个了,今天再次看的时候 发现又回到了晕晕乎乎的感觉
用PS新建了10*10像素的24位bmp图片,用UE打开仔细瞧瞧
-------------------------------------------------------------以下文件头
42 4D BM一直不变
78 01 00 00 图片大小
00 00 保留为0
00 00 保留为0
36 00 00 00 偏移 非索引图是54 、索引图不固定
位图文件头 共14个字节(从0计数)
WORD bfType(第0、1字节):
42 4d代表BM(42-B,4d-M)
存储顺序是424d,用双字节单位读取的时候,先读取42放在低字节,再读取4d放在高字节,程序中应该判断双字节单元中存储的是否是0x4d42
if(header.bfType == 0x4d42) {}
DWORD bfSize(第2、3、4、5字节):
78 01 00 00 即0x178(十进制376)字节,右键属性中显示的整个图片文件的大小
WORD bfReserved1(第6、7字节):
00 00 保留字节 为0
WORD bfReserved2(第8、9字节):
00 00 保留字节 为0
DWORD bfOffBits(第10、11、12、13字节):
36 00 00 00 即0x36(十进制54),位图数据的起始位置是第54字节
(24位图,位图文件头(BITMAPFILEHEADER14字节)和位图信息头(BITMAPINFOHEADER40字节)之后就是位图数据,没有调色板)
-----------------------------------------------------------以下信息头
28 00 00 00 一直不变
0A 00 00 00 宽
0A 00 00 00 长
01 00 一直不变
18 00 多少位图
00 00 00 00 无压缩 一直不变
42 01 00 00 像素数据大小
20 2E 00 00 水平分辨率
20 2E 00 00 垂直分辨率
00 00 00 00 后两个双字用在索引图
00 00 00 00
位图信息头,共40个字节
DWORD biSize(第14、15、16、17字节)
28 00 00 00 即0x28(十进制40),位图信息头占40字节
LONG biWidth(第18、19、20、21字节)
0a 00 00 00 即0x0a(十进制10),位图的宽度是10像素
LONG biHeight(第22、23、24、25字节)
0a 00 00 00 即0x0a(十进制10),位图的高度是10像素
WORD biPlanes(第26、27字节)
01 00 即0x01(十进制1),目标设备级别,为1
WORD biBitCount(第28、29字节)
18 00 即0x18(十进制24) 图标是24位图
DWORD biCompression(第30,31,32,33字节)
00 00 00 00 即十进制0 ,表示图片未压缩
DWORD biSizeImage(第34、35、36、37字节)
42 01 00 00 即0x00000142(十进制322) 图片中像素数据的大小(整个图片的大小减去位图
文件头和位图信息头的大小,376-14-40=322)
LONG biXPelsPerMeter(第38、39、40、41字节)
20 2E 00 00 即0x00002E20(十进制11808) 位图水平分辨率,每米11808像素
LONG biYPelsPerMeter(第42、43、44、45字节)
20 2E 00 00 即0x00002E20(十进制11808) 位图垂直分辨率,每米11808像素
DWORD biClrUsed(第46、47、48、49字节)
00 00 00 00 即0,位图使用颜色表中的颜色数是0,
DWORD biClrImportant(第50、51、52、53字节)
00 00 00 00 即 0 位图显示过程中重要的颜色数是0
-----------------------------------------------------------------------------------------------------补一个16位10*10的bmp文件头、信息头
----------------------------------以下文件头
42 4D
00 01 00 00
00 00
00 00
36 00 00 00
位图文件头 共14个字节(从0计数)
WORD bfType(第0、1字节):
42 4d代表BM(42-B,4d-M)
存储顺序是424d,存储的是低字节在前,高字节在后,所以程序中判断是否为BM需要反着写
if(header.bfType == 0x4d42) {}
DWORD bfSize(第2、3、4、5字节):
00 01 00 00 即0x100(十进制256)字节,右键属性中显示的整个图片文件的大小
WORD bfReserved1(第6、7字节):
00 00 保留字节 为0
WORD bfReserved2(第8、9字节):
00 00 保留字节 为0
DWORD bfOffBits(第10、11、12、13字节):
36 00 00 00 即0x36(十进制54),位图数据的起始位置是第54字节
(16位图,文件信息头(14字节)和位图信息头(40字节)之后就是位图数据,没有调色板)
-----------------------------------------------------------以下信息头
28 00 00 00
0A 00 00 00
0A 00 00 00
01 00
10 00
00 00 00 00
CA 00 00 00
20 2E 00 00
20 2E 00 00
00 00 00 00
00 00 00 00
位图信息头,共40个字节
DWORD biSize(第14、15、16、17字节)
28 00 00 00 即0x28(十进制40),位图信息头占40字节
LONG biWidth(第18、19、20、21字节)
0A 00 00 00 即0x0a(十进制10),位图的宽度是10像素
LONG biHeight(第22、23、24、25字节)
0A 00 00 00 即0x0a(十进制10),位图的高度是10像素
WORD biPlanes(第26、27字节)
01 00 即0x01(十进制1),目标设备级别,为1
WORD biBitCount(第28、29字节)
10 00 即0x0010(十进制16) 图标是16位图
DWORD biCompression(第30,31,32,33字节)
00 00 00 00 即十进制0 ,表示图片未压缩
DWORD biSizeImage(第34、35、36、37字节)
CA 00 00 00 即0x000000CA(十进制202) 图片中像素数据的大小(整个图片的大小减去位图
文件头和位图信息头的大小,256-14-40=202)
LONG biXPelsPerMeter(第38、39、40、41字节)
20 2E 00 00 即0x00002E20(十进制11808) 位图水平分辨率,每米11808像素
LONG biYPelsPerMeter(第42、43、44、45字节)
20 2E 00 00 即0x00002E20(十进制11808) 位图垂直分辨率,每米11808像素
DWORD biClrUsed(第46、47、48、49字节)
00 00 00 00 即0,位图使用颜色表中的颜色数是0,
DWORD biClrImportant(第50、51、52、53字节)
00 00 00 00 即 0 位图显示过程中重要的颜色数是0
------------------------------------------------------------------------------------------------再补一个8位的10*10像素的bmp图文件头、信息头二进制
-------------------------------------文件头
42 4D
D8 00 00 00
00 00
00 00
5E 00 00 00
位图文件头 共14个字节(从0计数)
WORD bfType(第0、1字节):
42 4d代表BM(42-B,4d-M)
存储顺序是424d,存储的是低字节在前,高字节在后,所以程序中判断是否为BM需要反着写
if(header.bfType == 0x4d42) {}
DWORD bfSize(第2、3、4、5字节):
D8 00 00 00 即0xD8(十进制216)字节,右键属性中显示的整个图片文件的大小
WORD bfReserved1(第6、7字节):
00 00 保留字节 为0
WORD bfReserved2(第8、9字节):
00 00 保留字节 为0
DWORD bfOffBits(第10、11、12、13字节):
5E 00 00 00 即0x5E(十进制94),位图数据的起始位置是第94字节
(8位图,文件信息头(14字节)和位图信息头(40字节)之后就是调色板(40字节))
(后面知道使用颜色表的颜色数是10,每个4字节,10*4=40=调色板大小)
----------------------------------------------------------- 以下信息头
28 00 00 00
0A 00 00 00
0A 00 00 00
01 00
08 00
00 00 00 00
7A 00 00 00
20 2E 00 00
20 2E 00 00
0A 00 00 00
0A 00 00 00
位图信息头,共40个字节
DWORD biSize(第14、15、16、17字节)
28 00 00 00 即0x28(十进制40),位图信息头占40字节
LONG biWidth(第18、19、20、21字节)
0A 00 00 00 即0x0a(十进制10),位图的宽度是10像素
LONG biHeight(第22、23、24、25字节)
0A 00 00 00 即0x0a(十进制10),位图的高度是10像素
WORD biPlanes(第26、27字节)
01 00 即0x01(十进制1),目标设备级别,为1
WORD biBitCount(第28、29字节)
08 00 即0x0008(十进制8) 图标是8位图
DWORD biCompression(第30,31,32,33字节)
00 00 00 00 即十进制0 ,表示图片未压缩
DWORD biSizeImage(第34、35、36、37字节)
7A 00 00 00 即0x0000007A(十进制122) 图片中像素数据的大小(整个图片的大小减去位图
文件头和位图信息头和调色板(10*4)的大小,216-14-40-40=122)
LONG biXPelsPerMeter(第38、39、40、41字节)
20 2E 00 00 即0x00002E20(十进制11808) 位图水平分辨率,每米11808像素
LONG biYPelsPerMeter(第42、43、44、45字节)
20 2E 00 00 即0x00002E20(十进制11808) 位图垂直分辨率,每米11808像素
DWORD biClrUsed(第46、47、48、49字节)
0A 00 00 00 即0x0A(十进制10),位图使用颜色表中的颜色数是10,
DWORD biClrImportant(第50、51、52、53字节)
0A 00 00 00 即0x0A(十进制10), 位图显示过程中重要的颜色数是10
---------------------------------------之后是40字节调色板