www.pudn.com > Hough.rar > BMPFormat.h


#ifndef _BMPFORMAT_H 
#define _BMPFORMAT_H 
 
#include  
 
typedef unsigned char  BYTE; 
typedef unsigned short WORD; 
 
 
// BMP图像各部分说明如下 
 
/*********** 
    第一部分    位图文件头 
该结构的长度是固定的,为14个字节,各个域的依次如下: 
    2byte   :文件类型,必须是0x4d42,即字符串"BM"。 
    4byte   :整个文件大小, 但注意:第4字节在最高位,第一个字节在最低位。如:36 5C 01 00 其值应该是00015C36 = 89142  
    4byte   :保留字,为0 
    4byte   :从文件头到实际的位图图像数据的偏移字节数。 
*************/ 
 
typedef struct 
{ 
	//WORD mark; 
    long imageSize; 
    long blank; 
    long startPosition; 
//     void show(void) 
//     { 
//         printf("BMP Head:\n"); 
//         printf("Image Size:%d\n",imageSize); 
//         printf("Image Data Start Position : %d\n",startPosition); 
//     } 
}BmpHead; 
 
/************************************************************************************************************************************************************************************** 
    第二部分    位图信息头 
该结构的长度也是固定的,为40个字节,各个域的依次说明如下: 
   Length           4byte   :本结构的长度,值为40 
   width            4byte   :图的宽度是多少象素。  图像的实际宽度。   
                              注意:当width不为4的整数倍时,图像数据区,会在图像的每一行最后添加0,使之为4的倍数 
                                    但是,width的值是不计这些补0的字节在内的,也就是说,它是图像的真实宽度。                                  
   height           4byte   :图像的高度是多少象素。 
                              说明:这个值除了描述图像的高度,还有一个用途,当它为正时,表示是倒向位图,当它为负时,表示正向位图 
                              倒向位图的数据阵列是从左到右,从下到上存储的,即从图像的左下角到右上角;正向位图的数据阵列是从左至右,从上至下存储的, 
							  即从图像的左上角到右下角。常见的位图都是倒向位图,即此值为正。 
   colorPlane       2Byte   :必须是1。 
   bitColor         2Byte   :表示颜色时用到的位数,常用的值为1(黑白二色图)、4(16色图)、8(256色图)、24(真彩色图)。 
   zipFormat        4byte   :指定位图是否压缩,有效值为BI_RGB (即0 不压缩),BI_RLE8 (即1),BI_RLE4 (即2),BI_BITFIELDS ()。Windows位图可采用RLE4和RLE8的压缩格式,BI_RGB表示不压缩。 
   realSize         4byte   :指定实际的位图图像数据占用的字节数,可用以下的公式计算出来: 
                              图像实际数据区的大小 = nWidth * nHeight * 表示每个象素颜色占用的byte数(即颜色位数/8,24bit图为3,256色为1) 
                              要注意的是:上述公式中的nWidth'必须是4的整数倍(不是Width,而是大于或等于Width的最小4的整数倍)。 
                              如果zipFormat为BI_RGB(即0),则该项可能为0,此时根据以下公式计算:图像真实的像素数据区的大小 = Width * Height * 每个象素颜色占用的byte数。 
   xPels            4byte   :目标设备的水平分辨率。 
   yPels            4byte   :目标设备的垂直分辨率。 
   colorUser        4byte   :本图像实际用到的颜色数,如果该值为0,则用到的颜色数为2的(颜色位数)次幂,如颜色位数为8,2^8=256,即256色的位图 
   colorImportant   4byte   :指定本图像中重要的颜色数,如果该值为0,则认为所有的颜色都是重要的。 
*****************************************************************************************************************************************************************************************/ 
typedef struct  
{ 
    long    Length; 
    long    width; 
    long    height; 
    WORD    colorPlane; 
    WORD    bitColor; 
    long    zipFormat;  
    long    realSize; 
    long    xPels;      
    long    yPels; 
    long    colorUse; 
    long    colorImportant; 
//     void show(void) 
//     {       
//         printf("infoHead Length:%d\n",Length); 
//         printf("width&height:%d*%d\n",width,height);   
//         printf("colorPlane:%d\n",colorPlane); 
//         printf("bitColor:%d\n",bitColor); 
//         printf("Compression Format:%d\n",zipFormat); 
//         printf("Image Real Size:%d\n",realSize); 
//         printf("Pels(X,Y):(%d,%d)\n",xPels,yPels); 
//         printf("colorUse:%d\n",colorUse);       
//         printf("Important Color:%d\n",colorImportant); 
//     } 
}InfoHead; 
 
/*************************** 
    第三部分    调色盘结构 
    对于256色BMP位图,颜色位数为8,需要2^8 = 256个调色盘; 
    对于24bitBMP位图,各象素RGB值直接保存在图像数据区,不需要调色盘,不存在调色盘区 
    rgbBlue:   该颜色的蓝色分量。 
    rgbGreen:  该颜色的绿色分量。 
    rgbRed:    该颜色的红色分量。 
    rgbReserved:保留值。 
************************/ 
typedef struct 
{ 
     BYTE   rgbBlue; 
     BYTE   rgbGreen; 
     BYTE   rgbRed; 
     BYTE   rgbReserved; 
//      void show(void) 
//      { 
//         printf("Mix Plate B,G,R:%d %d %d\n",rgbBlue,rgbGreen,rgbRed);  
//      } 
}RGBMixPlate; 
 
/**************************** 
    第四部分    图像数据区 
    对于用到调色板的位图,图像数据就是该象素颜色在调色板中的索引值; 
    对于真彩色图,图像数据就是实际的R、G、B值。 
        2色图,用1位就可以表示该象素的颜色,所以1个字节可以表示8个象素。 
        16色图,用4位可以表示一个象素的颜色,所以1个字节可以表示2个象素。 
        256色图,1个字节刚好可以表示1个象素。 
        真彩色图,3个字节才能表示1个象素。 
    注意:BMP存储像素数据的顺序是先行后列,由下而上。从左下角到右上角。 
****************************/ 
 
#endif