- 读取Bmp文件
首先需要读取Bmp文件的头信息和像素数据。可使用以下代码:
#include
#include
#pragma pack(push, 1)
typedef struct BMPHeader {
unsigned short signature; // 文件类型,必须为0x4D42(“BM”)
unsigned int size; // 文件大小(字节)
unsigned short reserved1; // 保留,必须为0
unsigned short reserved2; // 保留,必须为0
unsigned int offset; // 像素数据偏移量(字节)
unsigned int dib_header_size;// DIB文件头大小(字节)
int width; // 图像宽度(像素)
int height; // 图像高度(像素)
unsigned short planes; // 颜色平面数,必须为1
unsigned short bits; // 位深
unsigned int compression; // 压缩方式,0表示不压缩
unsigned int size_image; // 图像数据大小(字节)
int x_resolution; // X方向分辨率,像素/米
int y_resolution; // Y方向分辨率,像素/米
unsigned int colors_used; // 使用的颜色数
unsigned int colors_important;// 重要的颜色数
} BMPHeader;
#pragma pack(pop)
int main()
{
FILE *fp = fopen("image.bmp", "rb");
BMPHeader header;
fread(&header, sizeof(header), 1, fp);
printf("width: %d, height: %d\n", header.width, header.height);
fclose(fp);
return 0;
}
2. 筛选像素
根据需要筛选像素,例如将图像中RGB均小于100的像素修改为红色(255, 0,0),可以修改上述代码:
#include
#include
#pragma pack(push, 1