BMP位图格式的内存存储方式
来源:互联网 发布:专业八字算命软件 编辑:程序博客网 时间:2024/06/03 16:46
在C# WPF工程中,查看数据格式和内存空间,能够知道Gray16是用 2 bytes来表示一个像素的亮度值,可是保存成 64位BMP后图像数据是怎么组织的呢???
首先,有必要弄清楚 BMP位图格式的存储原理。
将BMP文件用16进制格式(Ultra Edit)打开,逐byte查看文件里面存储的元素值。BMP文件包含位图文件头和位图信息头。
位图文件头一般占 14 bytes,结构定义如下:
typedef struct tagBITMAPFILEHEADER { UNIT bfType; DWORD bfSize; UINT bfReserved1; UINT bfReserved2; DWORD bfOffBits; }BITMAPFILEHEADER;其中:
bfType 说明文件类型,在windows系统中为BM。
bfSize 说明文件大小。
bfReserved1 bfReserved2 保留,设置为0。
bfOffBits 说明实际图形数据的偏移量。
位图信息头一般占 40 bytes,结构定义如下:
typedef struct tagBITMAPINFOHEADER { DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMerer; LONG biYPelsPerMerer; DWORD biClrUsed; DWORD biClrImportant; }BITMAPINFOHEADER;
其中:
biSize 说明BITMAPINFOHEADER结构所需字节数,在windows系统中为28h
biWidth 说明图像宽度
biHeight 说明图像高度
biPlanes 为目标设备说明位面数,其值设为1
biBitCount 每个像素的位数,单色位图为1,256色为8,24bit为24。
biCompression 压缩说明,BI_RGB:无压缩,BI_RLE8:8位RLE压缩,BI_RLE4:4位RLE压缩
biSizeImage 说明图像大小,如无压缩,可设为0
biXPelsPerMeter 水平分辨率
biYPelsPerMeter 垂直分辨率
biClrUsed 位图使用的颜色数
biImportant 重要颜色数目
下面,以获取的一张图片实例来解释 BMP头文件各个 byte所表示的含义:
用红色框出部分的数据为BMP头文件:
1.位图文件头
0,1:42 4D 为位图的标志。如果转换成 ASCII 码的话就是 BM。
2-5:(00 0E 10 36)H = 921654D(bytes),表示文件大小为921654bytes,也可以通过查看文件大小信息知道。
6-9:(00 00 00 00)H为保留字。
10-13:(00 00 00 36)H = 54D,文件起始位置标志,表示文件从第54位开始。
2.位图信息头
14-17:(00 00 00 28)H = 40D,表示位图信息头的长度,即为40 bytes。
18-21:(00 00 02 80)H = 640D,表示位图宽度,即为640 pixels。
22-25:(00 00 01 E0)H = 480D,表示位图高度,即为480 pixels。
26-27:(00 01)H,表示设备级别
28-29:(00 18)H = 24D,表示位图色彩级别,即为 24位真彩色。
30-33:(00 00 00 00)H,表示压缩类型,0表示不压缩
34-37:(00 0E 10 00)H = 921600D,位图阵列表字节数,即为921600 bytes。
38-41:(00 00 0B 6D)H,表示水平分辨率
42-45:(00 00 0B 6D)H,表示垂直分辨率
46-49:(00 00 00 00)H,表示位图实际使用的颜色表中的颜色变址。
50-53:(00 00 00 00)H,表示位图显示过程中被认为重要颜色变址数。
3.像素存储组织方式
BMP存储像素值的方式为从下至上,从左至右,紧随着文件头存储的字节为图像最下一行的数值,从左下角开始依次存储。
0C 27 20 36 ... 为图像左下角像素的数值,依次向右存储,最后一行扫描完后,紧接着存储上一行,最后一个byte存储的是图像右上角像素的数值。
可用MATLAB读取BMP图片后对比内存存放方式,就一目了然了。
以上,BMP存储方式讲清楚了。
至于64位的bmp图组织方式,下次补充!
- BMP位图格式的内存存储方式
- BMP格式知识之一:BMP位图文件的存储格式
- BMP位图文件的存储格式
- BMP位图文件的存储格式
- BMP位图文件的存储格式
- BMP位图文件的存储格式
- bmp位图的格式
- 如何看懂bmp图像的内存存储格式
- 如何看懂bmp图像的内存存储格式
- BMP位图格式详解
- BMP位图格式详解
- BMP位图格式学习
- 位图BMP的计算机存储结构
- 位图文件的存储格式
- BMP 设备无关位图格式
- BMP位图格式详解<一>
- BMP位图格式详解<二>
- BMP位图格式详解--转载
- 341. Flatten Nested List Iterator
- 简单理解Socket-cnBlog dolphinX
- leetcode_72. Edit Distance
- tensorflow50 《面向机器智能的TensorFlow实战》笔记-04-02 Sigmoid
- 单例模式的几种实现方式
- BMP位图格式的内存存储方式
- iOS开发 2017申请苹果开发者账号
- 为PHP安装Memcached扩展连接Memcached
- sleep()和wait()的区别
- workspace里面设置的日历,在studio里面为什么加载不出来?
- 响应式开发架构
- 苹果开发之Cocoa编程(第三版) 第5章 Target/Action
- Android中Xml解析实战
- 不常见的事件