利用系统IO读取磁盘上指定BMP图片的宽和高以及大小

文件IO

image

代码

/*************************************************************************************
 *
 *  file name:  1.c
 *  author   : 	lu.ciana.598393@gmail.com
 *  date     :  2024/05/11
 *  function : 	利用系统IO读取磁盘上指定BMP图片的宽和高以及大小
 *  note	 : none
 *  CopyRight (c)   2024    lu.ciana.598393@gmail.com   All Right Reserved
 *
 ************************************************************************************/

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#pragma pack(1)
struct file_header{
	unsigned short 		file_type;//文件标识
	unsigned int 		file_size;//整个文件的大小
	unsigned short 		freserved1;//保留
	unsigned short 		freserved2;//保留
	unsigned int 		boffset_bits;//位图数据在文件中的偏移值
};
struct info_header {
	unsigned int 		bitmap_size;//位图信息的大小
	int 				bitmap_width;//位图宽度
	int 				bitmap_height;//位图高度
	unsigned short 		planes;//位图的位面数
	unsigned short 		image_depth;//位图的图像深度
	unsigned int 		compression;//位图压缩方式
	unsigned int 		image_size;//位图的数据大小
	int 				x_pels_permeter;//表示水平方向每米的像素点数量
	int 				y_pels_permeter;//表示垂直方向每米的像素点数量
	unsigned int 		color_used;//实际使用调色板的颜色数量
	unsigned int 		color_important;//重要的颜色数量
};

#pragma pack()

int main(int argc, char const *argv[])
{
	// int bmp_size   = 0; //用于存储BMP图片的大小
	// int bmp_height = 0; //记录BMP图片的高
	// int bmp_width  = 0; //记录BMP图片的宽

	//1.BMP图片的路径是通过命令行传递,所以需要检测参数有效性
	if (2 != argc)
	{
		printf("argument is invaild\n");
		return -1;
	}

	//2.利用系统调用open()打开待读取数据的BMP图片  
	int bmp_fd = open(argv[1],O_RDWR);
	if ( -1 == bmp_fd)
	{
		printf("open %s is error\n",argv[1]);
		return -1;
	}
	
	// //3.从被打开的BMP图片中读取图像信息
	// lseek(bmp_fd,2,SEEK_SET);
	// read(bmp_fd,&bmp_size,4); 	//读取BMP图片大小

	// lseek(bmp_fd,18,SEEK_SET);
	// read(bmp_fd,&bmp_width,4);	//读取BMP图片的宽

	// lseek(bmp_fd,22,SEEK_SET);
	// read(bmp_fd,&bmp_height,4);	//读取BMP图片的高

	struct file_header s1;
	struct info_header s2;

	read(bmp_fd,&s1,14);
	read(bmp_fd,&s2,40);
	
	//4.输出BMP信息
	printf("bmp name is %s ,width = %d,height = %d,size = %d\n",argv[1],s2.bitmap_width,s2.bitmap_height,s1.file_size);

	return 0;
}
posted @ 2024-05-11 19:15  luxiaolim  阅读(6)  评论(0编辑  收藏  举报