【原创】C语言读取BMP格式图片

本文详细介绍了BMP文件格式,包括位图文件头、位图信息头、彩色表和位图数据的结构,并提供了C语言读取BMP图片的源代码片段。
摘要由CSDN通过智能技术生成


【原创】C语言读取BMP格式图片


BMP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式,能够被多种Windows应用程序所支持。随着Windows操作系统的流行与丰富的Windows应用程序的开发,BMP位图格式理所当然地被广泛应用。这种格式的特点是包含的图像信息较丰富,几乎不进行压缩,但由此导致了它与生俱生来的缺点--占用磁盘空间过大。所以,目前BMP在单机上比较流行。


BMP文件格式分析  
简介
BMP(Bitmap-File)图形文件是Windows采用的图形文件格式,在Windows环境下运行的所有图象处理软件都支持BMP图象文件格式。Windows系统内部各图像绘制操作都是以BMP为基础的。Windows 3.0以前的BMP图文件格式与显示设备有关,因此把这种BMP图象文件格式称为设备相关位图DDB(device-dependent bitmap)文件格式。Windows 3.0以后的BMP图象文件与显示设备无关,因此把这种BMP图象文件格式称为设备无关位图DIB(device-independent bitmap)格式(注:Windows 3.0以后,在系统中仍然存在DDB位图,象BitBlt()这种函数就是基于DDB位图的,只不过如果你想将图像以BMP格式保存到磁盘文件中时,微软极力推荐你以DIB格式保存),目的是为了让Windows能够在任何类型的显示设备上显示所存储的图象。BMP位图文件默认的文件扩展名是BMP或者bmp(有时它也会以.DIB或.RLE作扩展名)。


位图文件结构表
位图文件 位图文件头 14 字节
位图信息头 40 字节
彩色表(调色板) 4N 字节
位图数据 x  字节
 
构件详解:


位图文件头  
位图文件头包含文件类型、文件大小、存放位置等信息。结构定义如下:


  typedef struct tagBITMAPFILEHEADER
  {
        UNIT    bfType;
        DWORD   bfSize;
        UINT    bfReserved1;
        UINT    bfReserved2;
        DWORD   bfOffBits;
  }BITMAPFILEHEADER;
  
其中:
bfType    说明文件类型,在windows系统中为BM。
bfSize    说明文件大小。
bfReserved1 bfReserved2 保留,设置为0。
bfOffBits 说明实际图形数据的偏移量。
 


位图信息头
位图信息头包含位图的大小、压缩类型、和颜色格式,结构定义如下:


 


  typedef struct tagBITMAPINFOHEADER
  {
        DWORD   biSize;
        LONG    biWidth;
        LONG    biHeight;
        WORD    biPlanes;
        WORD    biBitCount;
        DWORD   biCompression;
        DWORD   biSizeImage;
        LONG    biXPelsPerMerer;
        LONG    biYPelsPerMerer;
        DWORD   biClrUsed;
        DWORD   biClrImportant;
  }BITMAPINFOHEADER;
        
其中: 
biSize    说明BITMAPINFOHEADER结构所需字节数,在windows系统中为28h
biWidth   说明图像宽度
biHeight  说明图像高度
biPlanes  为目标设备说明位面数,其值设为1
biBitCount每个像素的位数,单色位图为1,256色为8,24bit为24。
biCompression压缩说明,BI_RGB:无压缩,BI_RLE8:8位RLE压缩,BI_RLE4:4位RLE压缩
biSizeImage说明图像大小,如无压缩,可设为0
biXPelsPerMeter水平分辨率
biYPelsPerMeter垂直分辨率
biClrUsed 位图使用的颜色数
biImportant重要颜色数目
 


彩色表
彩色表包含的元素与位图所具有的颜色数目相同,像素颜色用结构RGBQUAD来表示:


typedef struct tagRGBQUAD
{
        BYTE    rgbBlue;
        BYTE    rgbGreen;
        BYTE    rgbRed;
        BYTE    rgbReserved;
}RGBQUAD;
其中:
r

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值