关于C语言读取BMP文件

本文介绍了如何使用C语言读取BMP文件,重点在于理解BMP文件头的结构,包括BMP_FILE_HEADER和BMP_INFO两个结构体,以及如何获取图像的宽度、高度、位深度等关键信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前MATLAB部分遇到一个问题,我在Hough变换完成之后得到的图像需要进一步的处理,但是我是通过在之前的图像上用循环遍历添加上点,这样的到的图片使用句柄保存只能得到循环运算之前的原图,暂时没有找到解决方法,就先开始准别C语言的读取BMP文件的方法

C语言读取BMP文件

以下为按照BMP格式相搭配的读取头文件

/* 位图文件头 (位图头的字节数 = 位图文件字节数 - 位图图像数据字节数)*/

偏移量域名称大小内容
0000H文件标识2识别位图的类型
0002HFile Size4表示文件的大小,单位是B
0006HReserved4保留信息,用处目前不明只知道必须为0
000AHBitmao Data Offset4从文件开始到位图数据之间的偏移量

typedef struct BMP_FILE_HEADER
{
WORD bType; // 文件标识符
DWORD bSize; // 文件的大小
WORD bReserved1; // 保留值,必须设置为0
WORD bReserved2; // 保留值,必须设置为0
DWORD bOffset; // 文件头的最后到图像数据位开始的偏移量
} BMPFILEHEADER; // 14 字节

/* 位图信息头 */

偏移量域名称大小内容
000EHBitmap Header Size4位图的信息头的长度,一般是28H
0012HWidth4位图的宽度,单位是像素
0016HHeight4位图的高度,单位是像素
001AHPlanes4位图的位面数,肯定是1
001CHBit per pixel2每个像素的位数,1\4\8\16\24\32,分别表示2的N次方的色位,单色图像默认为1,即只有黑白
001EHComression4压缩说明,0:不压缩;1:使用8位RLE压缩方式;2:使用4位RLE压缩方式;3:Bitfields-位域存放方式
0022HBitmap Data SIze4用字节数字表示的位图数据的大小,必须是4的倍数
0026HHResolution4用像素表示水平分辨率
002AHVResolution4用像素表示垂直分辨率
002EHColors4位图使用的颜色数
0032HImportant Colors4指定的重要的颜色数,当数值等于Colors的数值的时候表示所有颜色一样重要

typedef struct BMP_INFO
{
DWORD bInfoSize; // 信息头的大小
DWORD bWidth; // 图像的宽度
DWORD bHeight; // 图像的高度
WORD bPlanes; // 图像的位面数
WORD bBitCount; // 每个像素的位数
DWORD bCompression; // 压缩类型
DWORD bmpImageSize; // 图像的大小,以字节为单位
DWORD bXPelsPerMeter; // 水平分辨率
DWORD bYPelsPerMeter; // 垂直分辨率
DWORD bClrUsed; // 使用的色彩数
DWORD bClrImportant; // 重要的颜色数
} BMPINF; // 40 字节

/* 彩色表:调色板 */

偏移量域名称大小内容
____HPaletteN*4调色板规范,四个字节分别用来描述蓝色、绿色、红色和填充符的数值,在彩色图像的处理中就是各个通道的作用

typedef struct RGB_QUAD
{
WORD rgbBlue; // 蓝色强度
WORD rgbGreen; // 绿色强度
WORD rgbRed; // 红色强度
WORD rgbReversed; // 保留值
}

之后就是图像信息数据:

偏移量域名称大小内容
____HBitmap Data包含扫描的信息,扫描顺序是从右向左,从上到下
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值