BMP文件头设置要点



一、使用到的结构体

  1. BMP文件头结构。注意该结构的字节对齐,尤其是自定义该结构体时要引起高度重视,否则会引发BMP文件头无效

typedef  struct  tagBITMAPFILEHEADER
{
 unsigned short  bfType;       //位图文件的类型,必须为BM
 unsigned long    bfSize;       //文件大小,以字节为单位
 unsigned short   bfReserverd1; //位图文件保留字,必须为0
 unsigned short   bfReserverd2; //位图文件保留字,必须为0
 unsigned long     bfbfOffBits;  //位图文件头到数据的偏移量,以字节为单位
}BITMAPFILEHEADER;

     2.BMP信息头结构

typedef  struct  tagBITMAPINFOHEADER
{
 unsigned long biSize;                        //该结构大小,字节为单位
 long  biWidth;                     //图形宽度以象素为单位
 long  biHeight;                     //图形高度以象素为单位
 unsigned short   biPlanes;               //目标设备的级别,必须为1
 unsigned short   biBitcount;             //颜色深度,每个象素所需要的位数
 unsigned long  biCompression;        //位图的压缩类型
 unsigned long  biSizeImage;              //位图的大小,以字节为单位
 long  biXPelsPermeter;       //位图水平分辨率,每米像素数
 long  biYPelsPermeter;       //位图垂直分辨率,每米像素数
 unsigned long  biClrUsed;            //位图实际使用的颜色表中的颜色数
 unsigned long  biClrImportant;       //位图显示过程中重要的颜色数
}BITMAPINFOHEADER;

    3.BMP颜色表结构(调色板)

typedef struct tagRGBQUAD
{
 unsigned char rgbBlue;
 unsigned char rgbGreen;
 unsigned char rgbRed;
 unsigned char rgbReserved;
}RGBQUAD;


二、数据填充

       所有保留字段都要置为0,否则会出错。

       图像宽度必须为四的整数倍((((bi.biWidth * bi.biBitCount) + 31) & ~31) / 8);

      1. BITMAPFILEHEADER

          bfType为图像文件格式,就此题而论,总是设置为0x4D42即“BM”;

          bfSize为BMP文件的大小,应设置为:BMP文件头大小+BMP信息头大小+[调色板信息大小+]图像大小,即:sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) +[ 256 * sizeof(RGBQUAD) +] imgHeight * imgWidth*bytePerPixel。图像尺寸大小不包括颜色通道数量信息;

          bfbfOffBits为图像数据的偏移字节。应设置为:BMP文件大小+BMP信息头大小[+调色板信息大小],计算方法参考上一字段;

     2.  BITMAPINFOHEADER

         biSize该结构大小,一般设置为40,推荐使用sizeof(BITMAPINFOHEADER)方式设置;

         biWidth 图像宽度,毋庸多言;

         biSizeImage

         biHeight 图像高度;

         biPlanes 位图的位面数(目标设备级别),此处设置为1;但也有设置为零的,可见不一定为1;

         biBitcount 位图每个像素所需位数,根据实际情况设置;1:为双色;4:十六色;8:256色;24或32:真彩色;

         biCompression位图压缩类型,必须是0; 1:BI_RLE8压缩类型;2:BI_RLE4压缩类型;3:Bitfields,位域存放;

                                                                                 RLE:全称(run-length encoding),翻译为游程编码;

         biSizeImage位图数据大小,即imgHeight*imgWidth*bytePerPixel;

        biXPelsPermeter用像素/米表示的水平分辨率

        biYPelsPermeter用像素/米表示的垂直分辨率

        biClrUsed位图所使用的颜色数

        biClrImportant对位图显示有重要影响的颜色索引数。如果为零,意味着都重要;

       3. RGBQUAD

       rgbBlue蓝色分量的亮度0~255;

       rgbGreen绿色分量的亮度0~255;

       rgbRed红色分量的亮度0~255;

       rgbReserved保留分量,个人分析是Alpha分量的值,该值必须为0;

      4.位图数据部分

       上下左右倒置结构,左上角的像素点位于文件结尾,右下角的像素数据位于位图数据段的起点。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值