关于C语言读取BMP文件

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

C语言读取BMP文件

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

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

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

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

/* 位图信息头 */

偏移量 域名称 大小 内容
000EH Bitmap Header Size 4 位图的信息头的长度,一般是28H
0012H Width 4 位图的宽度,单位是像素
0016H Height 4 位图的高度,单位是像素
001AH Planes 4 位图的位面数,肯定是1
001CH Bit per pixel 2 每个像素的位数,1\4\8\16\24\32,分别表示2的N次方的色位,单色图像默认为1,即只有黑白
001EH Comression 4 压缩说明,0:不压缩;1:使用8位RLE压缩方式;2:使用4位RLE压缩方式;3:Bitfields-位域存放方式
0022H Bitmap Data SIze 4 用字节数字表示的位图数据的大小,必须是4的倍数
0026H HResolution 4 用像素表示水平分辨率
002AH VResolution 4 用像素表示垂直分辨率
002EH Colors 4 位图使用的颜色数
0032H Important Colors 4 指定的重要的颜色数,当数值等于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 字节

/* 彩色表:调色板 */

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

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

之后就是图像信息数据:

偏移量 域名称 大小 内容
____H Bitmap Data 包含扫描的信息,扫描顺序是从右向左,从上到下

你可能感兴趣的:(C语言基础)