读取BMP文件中关于位图属性的信息,将一个数值矩阵封装为一个BMP格式的文件

来源:互联网 发布:数据分析统计工具 编辑:程序博客网 时间:2024/06/01 18:32

读取BMP文件中关于位图属性的信息,将一个数值矩阵封装为一个BMP格式的文件。

 

报告:

i.首先我们理解一下BMP文件的格式或者说这样一个文件中有什么东西。BMP文件的格式是二进制的,也就是说我们可以直接把它们读回内存中。当我们把它读回内存中后就会发现,

它的组成是一个结构体BITMAPFILEHEADER,一个结构体BITMAPINFOHEADER,一个结构体RGBQUAD数组,和线性的图像数据。

以下是从VC6.0中截出来的这些结构体的定义。





 



了解了位图文件的组成,读取位图信息就非常的容易了。

 

其实DIB函数库也提供了几个读取位图信息的函数:



为了读取更多的位图信息,我们可以将上述结构体分别读到内存中来,


读取的方式如上,

值得注意的是:1.文件的打开方式是二进制2.由于上述原因,BMP文件可以直接读回内存,成为结构体对象。3.读取图像数据时,数据类型应为unsigned char否则会出错。4.如果想输出bfType即位图的类型‘BM’,它的类型WORD不是一个被支持的字符串类型,所以只能格式化输出,

方法如下:



 

 

ii.

完成了读取位图属性信息的工作后,将数值矩阵封装为一个BMP文件的思路也就很清晰了。

只要我们把位图文件的结构体按照二进制输出到文件中即可。

过程:

1.首先我们要获得一个能代表位图的数值矩阵,并使它具有一定的格式,以便处理。

直接从位图文件中读出一个这样的矩阵即可,方法如下:



以上获得了一个逗号分割文件,一会我们就将这个数值矩阵封装为BMP文件。

2.将逗号分割文件表示的数值矩阵读回内存中,并放置在一个二维数组中。读取方法如下:




这就是一个典型的逗号分割文件读取方法。

 

此处注意:

因为在内存中位图数据是对图像从下到上从左到右扫描获得的,所以我们在位图文件中找到的第一个位图数据是图像的最左下角。为了表示方便我们把它读到了矩阵的最左下角,而不是矩阵的第一个位置。

 

3.封装文件,定义相关结构体,为结构体赋相应的属性值,将结构体按顺序写到文件中,最后将二维数组按扫描顺序写到文件中即可。

注意1.文件的后缀名要为.BMP 2.文件要以二进制打开 3.结构体的属性如下



 

 

 

 

 

4.读出来的图像如下所示,图像失真的原因不明。



 


 

0 0