获取bmp图片信息

#include 
#include 
#include 
#include 
#include 

typedef unsigned int u32;
typedef unsigned short u16;
typedef unsigned char u8;

#pragma pack(1)   			/* 取消字节对齐 */

typedef struct {			/* bmp图片文件头信息封装 */
	/* 位图文件头 */
	u8  bit_file_type[2];	/* 位图文件类型:'BM'->0x4d42 */
	u32 file_size;	  		/* 整个文件大小 */
	u16 reserved1;	  		/* 保留 */
	u16 reserved2;	  		/* 保留 */
	u32 offset;		  		/* 文件头到位图数据之间的偏移量 */

	/* 位图信息头 */
	u32 head_size;			/* 位图信息头长度 */
	u32 width;		  		/* 位图宽度 */
	u32 height;		  		/* 位图高度 */
	u16 bit_planes;	  		/* 位图位面数 */
	u16 bits_per_pixel; 	/* 每个像素的位数 */
	u32 compression;		/* 压缩说明 */
	u32 image_size;			/* 位图数据大小 */
	u32 h_res;				/* 水平分辨率 */
	u32 v_res;				/* 垂直分辨率 */
	u32 color_palette;		/* 位图使用的颜色索引数 */
	u32 vip_color;			/* 重要的颜色索引数目 */

}bmp_head_t;

#pragma pack() 	/* 恢复字节对齐 */

int main(int argc, char **argv)
{
	int fd;

	/* 检查参数 */
	if (argc < 2)
	{
		fprintf(stderr, "Usage: ./a.out + bmp\n");
		return 0;
	}

	/* 文件打开 */
	fd = open(argv[1], O_RDONLY);
	if (fd < 0)
	{
		perror("open bmp");
		return -1;
	}

	/* 获取bmp文件头消息 */
	bmp_head_t header;
	read(fd, &header, sizeof(header));
	
	/* 打印bmp图片信息 */
	printf("with = %d\n", header.width);
	printf("height = %d\n", header.height);
	printf("bits_per_pixel = %hd\n", header.bits_per_pixel);
	printf("file size = %d\n", header.file_size);

	return 0;
}

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