当前位置:编程学习 > C/C++ >>

如何显示位图

 

 

    位图文件是分成4部分的。第一部分是位图文件头,它包括位图文件名,位图的大小和位图数据离文件头的偏移量。接下去的是位图信息头,它包括了位图的许多信息,比如位图的宽度,高度和位图使用的颜色数。再后面是颜色表,它可能包含了2个或更多的RGBQUAD结构。最后面是位图图象的数据。

 

一.位图结构如下:

---- 一、BMP文件结构

 

---- 1. BMP文件组成

---- BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成。

 

---- 2. BMP文件头

---- BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。

---- 其结构定义如下:

 

typedef struct tagBITMAPFILEHEADER

{

WORDbfType;   // 位图文件的类型,必须为BM

DWORD   bfSize;   // 位图文件的大小,以字节为单位

WORDbfReserved1;  // 位图文件保留字,必须为0

WORDbfReserved2;  // 位图文件保留字,必须为0

DWORD   bfOffBits; // 位图数据的起始位置,以相对于位图

// 文件头的偏移量表示,以字节为单位

} BITMAPFILEHEADER;

 

---- 3. 位图信息头

 

BMP位图信息头数据用于说明位图的尺寸等信息。

typedef struct tagBITMAPINFOHEADER{

   DWORD  biSize;   // 本结构所占用字节数

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

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

   WORD   biPlanes; // 目标设备的级别,必须为1

   WORD   biBitCount// 每个像素所需的位数,必须是1(双色),

  // 4(16色),8(256色)或24(真彩色)之一

   DWORD  biCompression;   // 位图压缩类型,必须是 0(不压缩),

  // 1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一

   DWORD  biSizeImage; // 位图的大小,以字节为单位

   LONGbiXPelsPerMeter; // 位图水平分辨率,每米像素数

   LONGbiYPelsPerMeter;  // 位图垂直分辨率,每米像素数

   DWORD  biClrUsed;// 位图实际使用的颜色表中的颜色数

   DWORD  biClrImportant;// 位图显示过程中重要的颜色数

} BITMAPINFOHEADER;

 

---- 4. 颜色表

 

    颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD类型的结构,定义一种颜色。RGBQUAD结构的定义如下:

 

typedef struct tagRGBQUAD {

BYTErgbBlue;// 蓝色的亮度(值范围为0-255)

BYTErgbGreen;   // 绿色的亮度(值范围为0-255)

BYTErgbRed; // 红色的亮度(值范围为0-255)

BYTErgbReserved;// 保留,必须为0

} RGBQUAD;

颜色表中RGBQUAD结构数据的个数有biBitCount来确定:

当biBitCount=1,4,8时,分别有2,16,256个表项;

当biBitCount=24时,没有颜色表项。

   位图信息头和颜色表组成位图信息,BITMAPINFO结构定义如下:

typedef struct tagBITMAPINFO {

   BITMAPINFOHEADER bmiHeader;   // 位图信息头

   RGBQUAD  bmiColors[1];  // 颜色表

} BITMAPINFO;

 

---- 5. 位图数据

补充:软件开发 , C语言 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,