帮我写一个用C语言打开bmp图像的代码
时间: 2023-05-23 13:02:12 浏览: 82
以下是一个打开BMP图像的C代码示例:
#include <stdio.h>
#include <stdlib.h>
#pragma pack(push, 1) //确保内存对齐为1字节
//定义BMP文件头结构体
typedef struct tagBITMAPFILEHEADER
{
unsigned short bfType;
unsigned int bfSize;
unsigned short bfReserved1;
unsigned short bfReserved2;
unsigned int bfOffBits;
} BITMAPFILEHEADER;
//定义BMP信息头结构体
typedef struct tagBITMAPINFOHEADER
{
unsigned int biSize;
int biWidth;
int biHeight;
unsigned short biPlanes;
unsigned short biBitCount;
unsigned int biCompression;
unsigned int biSizeImage;
int biXPelsPerMeter;
int biYPelsPerMeter;
unsigned int biClrUsed;
unsigned int biClrImportant;
} BITMAPINFOHEADER;
#pragma pack(pop)
int main()
{
FILE* fpBmp = fopen("test.bmp", "rb");
if (fpBmp == NULL)
{
printf("failed to open bmp file!\n");
return -1;
}
BITMAPFILEHEADER bmpHeader;
fread(&bmpHeader, sizeof(BITMAPFILEHEADER), 1, fpBmp);
BITMAPINFOHEADER bmpInfo;
fread(&bmpInfo, sizeof(BITMAPINFOHEADER), 1, fpBmp);
//判断颜色位数是否为24位
if (bmpInfo.biBitCount != 24)
{
printf("only 24bit bmp image is supported by this code!\n");
fclose(fpBmp);
return -1;
}
//获取像素数据
int rowBytes = ((bmpInfo.biWidth * bmpInfo.biBitCount + 31) >> 5) << 2;
unsigned char* bmpData = (unsigned char*)malloc(rowBytes * bmpInfo.biHeight);
fread(bmpData, rowBytes * bmpInfo.biHeight, 1, fpBmp);
//关闭文件指针
fclose(fpBmp);
//使用像素数据做一些操作...
free(bmpData);
return 0;
}