经过一天的实践,终于弄明白的BMP图片的格式,并完成了正确读取图片信息,并生成新的BMP图片。
写程序前,首先要先了解一下几个知识点:
1. BMP图片的文件头、信息头,一共是54个字节,具体结构和意义在程序中有详细注释;
2. BMP按照每个像素的颜色占用的bit数分:1位(2色)、4位(16色)、8位(256色)、24位(真彩色)、32位(带透明度信息),一共五种,其中除24位和32位外,都需要使用调色板;
3. BMP中的图像数据按照每行32位对齐,不足32位用0补齐,故每行实际的长度是(像素宽度*像素占用bit数+31)/32个bit位;
附上详细程序,实现了读取一副bmp图片信息,重新生成一副bmp图像的功能,同时分别取出了每个像素的RGB三个分量值,分别存入三个文件。
#include<stdio.h>
#include<stdlib.h>
typedef unsigned short int WORD;
typedef unsigned int DWORD;
typedef unsigned char BYTE;
typedef struct tagBITMAPFILEHEADER
{
WORD bfType; // 位图文件类型,必须为‘BM’(0-1字节)
DWORD bfSize; // 位图文件大小,以字节为单位(2-5字节)
WORD bfReserved1; // 位图文件保留字,必须为0(6-7字节)
WORD bfReserved2; // 位图文件保留字,必须为0(8-9字节)
DWORD bfOffBits; // 位图数据的起始位置&