BMP图像文件格式 c 读取bmp

由四部分组成:

A.第一部分为位图文件头BITMAPFILEHEADER,它是一个结构体,定义如下:

typedef struct tagBITMAPFILEHEADER{

WORD bfType;/文件类型,必须是0x424D,即字符串“BM”

DWORD bfSize;/指定文件大小,包括这14个字节

WORDbfReserved1; /保留字,不用考虑

WORDbfReserved2; /保留字,不用考虑

DWORD bfOffBits;/从文件头到实际位图数据的偏移字节数

}BITMAPFILEHEADER;

这个结构的长度是固定的,为14个字节(WORD为无符号16位二进制整数,DWORD为无符号32位二进制整数)。

B.第二部分为位图信息头BITMAPINFOHEADER,也是一个结构,定义如下:

typedef struct tagBITMAPINFOHEADER{

DWORD biSize;/该结构的长度,为40

LONGbiWidth; / 图像的宽度,单位是像素

LONGbiHeight; / 图像的高度,单位是像素

WORDbiPlanes; / 位平面数,必须是1,不用考虑

WORDbiBitCount;/ 指定颜色位数,1为二值,4为16色,8为256色,16、24、32为真彩色 DWORDbiCompression; / 指定是否压缩,有效的值为BI_RGB,BI_RLE8,BI_RLE4,BI_BITFIELDS

DWORD biSizeImage;/ 实际的位图数据占用的字节数

LONGbiXPelsPerMeter; / 目标设备水平分辨率,单位是每米的像素数

BMP图像文件格式 c  读取bmp

LONGbiYPelsPerMeter; / 目标设备垂直分辨率,单位是每米的像素数

DWORDbiClrUsed;/实际使用的颜色数,若该值为0,则使用颜色数为2的bitBitCount次方种

DWORDbiClrImportant; /图像中重要的颜色数,若该值为0,则所有的颜色都是重要的

} BITMAPINFOHEADER;

这个结构的长度是固定的,为40个字节(LONG为32为二进制整数)。

偏移域的名称长度/字节内容
000Eh(14)biSize4文件信息头的长度40(28h):Windows
00012h(18)biWidth4位图的宽度,以像素为单位
00016h(22)biHeight4位图的高度,以像素为点为
001Ah(26)Biplanes2位图的为平面数(该值总是为1)
001Ch(28)biBitCount2每个像素的位平面数,有下面几种情况:1:单色位图4:16色位图8:256色位图16:16bit高彩色位图24:24bit真彩色位图32:32bit增强型真彩色位图
001Eh(30)biCompression4压缩说明:0:不压缩(用BI_RGB表示)1:RLE8,使用8位RLE压缩方式(用BI_RLE8表示)2:RLE4,使用4位RLE压缩方式(用BI_RLE4表示)3:Bitfields:位域存放方式(用BI_BITFIELDS表示)
0022h(34)biSizeImage4位图数据的大小,以字节为单位。该数必须是4的倍数。当图像存储的是非压缩数据的时候,它的取值可以为0,实际上,此时位图数据的大小可以通过biBitCount,biWidth,biHeight等计算出来
0026h(38)biXPelsPerMeter4用像素/米表示的水平分辨率
002Ah(42)biYPelsPerMeter4用像素/米表示的垂直分辨率
002Eh(46)biClrUsed4位图使用的颜色数,如果为0则表示使用了全部可能的颜色
0032h(50)biClrImportant4指定重要的颜色数。当该域的值等于颜色数时(或者等于0时),表示所有颜色都一样重要

C.第三部分为调色板(Palette),当然,这里是对那些需要调色板的位图文件而言的。真彩色图像不需要调色板,BITMAPINFOHEADER后直接是位图数据。调色板实际上是一个数组,共有biClrUsed个元素(如果该值为零,则有2的biBitCount次方个元素)。数组中每个元素的类型是一个RGBQUAD结构,占4个字节,其定义如下:

typedefstruct tagRGBQUAD

{

BYTE rgbBlue;//该颜色的蓝色分量

BYTE rgbGreen;//该颜色的绿色分量

BYTErgbRed;//该颜色的红色分量

BYTE rgbReserved;//保留值

} RGBQUAD;

D.第四部分是实际的图像数据,对于用到调色板的位图,图像数据就是该像素颜色在调色板中的索引值,对于真彩色图像,图像数据就是实际的R、G、B值:

•对于2色位图:用1位就可以表示该像素的颜色(一般0表示黑,1表示白),所以一个

字节就可以表示8个像素;

•对于16色位图,用4位可以表示一个像素的颜色,所以一个字节可以表示2个像素;

• 对于256色位图,一个字节刚好可以表示1个像素;

色深24位的位图

★每一行的字节数必须是4的整数倍,如果不是,则需要补齐;(bitSizeImage中提到过)

★BMP文件的数据存放是从下到上,从左到右的。也就是说,从文件中最先读到的是图像最下面的左边第一个像素,然后是左边第二个像素,接下来是倒数第二行左边第一个像素,左边第二个像素,依次类推

每个像素用3个字节表示,顺序依次为红,绿和蓝的值。每行用0填充到4字节的边界。

  

爱华网本文地址 » http://www.413yy.cn/a/25101012/112651.html

更多阅读

如何转换视频文件格式 qsv视频格式怎么转换

如何转换视频文件格式——简介在制作课件的时候,有时需要插入一个视频文件。文件的格式有时候不受支持,那就必须要转换。如何转换呢?我把在长期的教学实践中常用到的方法写出来与大家分享一下。如何转换视频文件格式——工具/原料

win7怎么更改文件格式 win7怎样修改文件类型

win7怎么更改文件格式——简介win7系统和XP系统区别很大,就比如说直接更改后缀来更改文件的格式,默认安装的win7是不显示后缀的,那么怎么显示后缀后直接更改文件的格式呢?我想下面的方法对你一定有用!win7怎么更改文件格式

怎么更改文件格式 win10怎么修改文件格式

怎么更改文件格式——简介在Windows操作系统中文件的格式由其文件名来确定,更准确的说,是由文件名中的后辍来决定。例如常见的Word文档格式,其后辍名为“*.doc”或者“*.docx”。修改文件格式常用的方法有直接修改文件名后辍法和利用软

rar文件是什么/如何打开rar格式的文件 rar是什么文件格式

通过网上的调查发现,还有许多电脑新手朋友不知道rar文件是什么,更不知道如何打开rar格式的文件,下面将为你详细介绍rar文件是什么及怎么打开rar文件,其实很简单的,请看以下内容。rar文件是什么/如何打开rar格式的文件——rar文件是什么: 

cfg是什么文件格式,怎么打开 cfg格式怎么打开

cfg是什么文件格式,怎么打开——简介有时我们在查看自己电脑各个文件夹的时候,会发现有种后缀名为cfg的文件,不知是干什么的,也不知怎么打开。今天我也看到电脑里有这个,然后去寻找各种知识了解,并去找打开方法,这里给大家分享一下。cfg是

声明:《BMP图像文件格式 c 读取bmp》为网友惰性野先生分享!如侵犯到您的合法权益请联系我们删除