最近在捣鼓Kinect 存储的 raw data,使用 kinect输出并保存红外数据流 ColorImageFormat.InfraredResolution640x480Fps30。其红外数据流的像素格式指定为 PixelFormats.Gray16,但使用C#图像保存接口后,保存的BMP文件为64位。我们清楚 Gray8,Gray24,Gray32的实际含义,但是64位的BMP没有见过。

在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位图格式的内存存储方式相关推荐

  1. bmp位图格式详细介绍-1/4/8/16/24/32bit、存储格式等

    目录 一.概述 二..bmp格式文件详解  2.1 位图文件头  2.2 位图信息头  2.3 调色板  2.4 位图数据 三.位图的其他知识  3.1 压缩的位图 一.概述 bmp是英文Bitmap ...

  2. alin的学习之路:C语言篇(一)(内存四区模型,宏函数,调用惯例,内存存储方式)

    @TOC(内存四区模型,宏函数,调用惯例,内存存储方式) 1. 内存四区及其使用注意 内存四区:代码区,全局静态区,栈区,堆区 代码区 代码区存放的是CPU执行的二进制指令 特点: 只读 共享 栈区 ...

  3. BMP位图格式详解二--转载

    转自:http://www.cnblogs.com/xiehy/archive/2011/06/07/2074405.html BMP文件格式,又称为Bitmap(位图)或是DIB(Device-In ...

  4. BMP位图格式详解--转载

    位图格式 BMP是bitmap的缩写形式,bitmap顾名思义,就是位图也即Windows位图.它一般由4部分组成:文件头信息块.图像描述信息块.颜色表(在真彩色模式无颜色表)和图像数据区组成.在系统 ...

  5. BMP位图格式详解二

    BMP文件格式,又称为Bitmap(位图)或是DIB(Device-Independent Device,设备无关位图),是Windows系统中广泛使用的图像文件格式.由于它可以不作任何变换地保存图像 ...

  6. BMP位图格式详解一

    位图格式 BMP是bitmap的缩写形式,bitmap顾名思义,就是位图也即Windows位图.它一般由4部分组成:文件头信息块.图像描述信息块.颜色表(在真彩色模式无颜色表)和图像数据区组成.在系统 ...

  7. Java二进制文件读写与bmp位图格式学习

    最近在做实训,说是要用java读取位图进行图像处理,遂进行学习. bmp位图参考资料: 文档1 文档2 位图制作 首先使用AdobePhotoshop来制作一个3*2的位图test.bmp java提 ...

  8. Float浮点内存存储方式 转

    1.0f 在内存中的存储为 0 011 1111 1 000 0000 0000 0000 0000 0000. 把他按整型数解释为2^29+2^28+2^27+2^26+2^25+2^24+2^23 ...

  9. 浅析BMP位图文件结构(含Demo)[转]

    <!--done-->   关于BMP位图格式在网上可以找到比较详细的相关文档,有兴趣的可以搜索标题为"BMP文件结构的探索"的文章,可以在搜索结果中找到一个WORD文 ...

最新文章

  1. QListWidget 小练习
  2. Pyserial 实现串口 base on python3
  3. redis的hash操作在集中式session中的应用
  4. 《系统集成项目管理工程师》必背100个知识点-84积极影响的风险的应对策略
  5. C++类的使用(三)—— 封装
  6. leetcode 198. 打家劫舍 思考分析
  7. hihocoder offer收割编程练习赛8 B 拆字游戏
  8. 李宏毅2017机器学习homework1-利用gradient descent拟合宝可梦CP值代码并利用adagrad进行优化
  9. IDL | 语句练习
  10. 微信小程序保存图片到相册
  11. 【GPU精粹与Shader编程】(三) 《GPU Gems 1》全书核心内容提炼总结 · 下篇
  12. 人工智能识别手写数学公式
  13. [HNOI2004]宠物收养所(简单理解,用set写的)
  14. 美团一点都不美,我再也不想给美团打工了
  15. tf.Keras.Model类总结
  16. appstore开发者中文名称修改
  17. android DISALLOW_EVIL_CONSTRUCTORS
  18. 51Nod1123 X^A Mod B 数论 中国剩余定理 原根 BSGS
  19. 小米华为智能手机未来路不平坦
  20. 皮肤结构走向运用仿制图章

热门文章

  1. 9. 使用SMTP发送邮件
  2. 宽带,梦想走向现实? (转)
  3. sql语句中大于号、小于号、大于等于、小于等于号的写法
  4. 基于React和Node.JS的表单录入系统的设计与实现
  5. 单链表实例(1)实现水浒传排行增删改查和练习
  6. 死锁的产生和解决方法
  7. 红队渗透靶场之prime1.0(超详细!)
  8. ubuntu系统安全和防护-区分固态硬盘和机械硬盘
  9. pip安装wordcloud安装方法
  10. Using the “escape“ directive (legacy escaping) is not allowed when auto-escaping is on with a markup