首页 > 其他分享 >利用系统IO读取磁盘上指定BMP图片的宽和高以及大小

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

时间:2024-05-11 19:19:22浏览次数:26  
标签:读取 int bmp unsigned BMP fd IO size

文件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;
}

标签:读取,int,bmp,unsigned,BMP,fd,IO,size
From: https://www.cnblogs.com/lu-ciana/p/18187067

相关文章

  • 获取任意bmp图片的参数函数设计
    /**@Author:Eoneon4051@163.com*@Date:2024-05-0814:24:52*@LastEditors:Eoneon4051@163.com*@LastEditTime:2024-05-1118:57:02*@FilePath:\数据结构text\text,.c*@Description:这是默认设置,请设置`customMade`,打开koroFileHeader查看配置进行设......
  • Bionet_WIFI使用指南
    Bionet_WIFI使用指南适用对象:文宣楼A406课题组成员A406房间包含两个独立的路由器,分别有1000Mb的带宽。其SSID(名字)如下:使用的时候,应选择排名比较靠前的WIFI使用,越靠前来说信号越好,速度越快。获取本机的真实MAC地址路由器开启了连接管控,可以找谭然、或者我来执行绑定和连接。......
  • 获取bmp图片信息
    /********************************************************************* filename: get_bmp_info.c* author :lzj* date :2024/05/11* function:获取bmp图片信息* note :None** CopyRight(c)2023-2024jjh6lzj@163.comAllRightReseverd***......
  • BMP的结构体定义模板
    /****BMP文件头数据结构****/typedefstruct{unsignedchartype[2];//文件类型unsignedintsize;//文件大小unsignedshortreserved1;//保留字段1unsignedshortreserved2;//保留字段2unsignedintoffset;//......
  • next_permutation 用法
    next_permutation()全排列函数·.next_permutation(start,end)返回下一个排列·.prev_permutation(start,end)返回上一个排列(均按字典序排序)当当前序列(数组)不存在下一个排列时,函数返回false,否则返回truenext_permutation(num,num+n)函数是对数组num中的前n个元素进行全排列,同时......
  • Vue项目中有封装过axios吗?主要是封装哪方面的?
    一、axios是什么axios 是一个轻量的 HTTP客户端基于 XMLHttpRequest 服务来执行 HTTP 请求,支持丰富的配置,支持 Promise,支持浏览器端和 Node.js 端。自Vue2.0起,尤大宣布取消对 vue-resource 的官方推荐,转而推荐 axios。现在 axios 已经成为大部分 Vue 开发者的......
  • C# 使用QuestPDF各种报错,System.IO.FileNotFoundException:“未能加载文件或程序集,Dll
    最近要做一个生成pdf报告的小功能,搜索一番之后,选择了QuestPDF这个库由于我是要在netframework4.8中实现功能,可能使用场景太老了,导致使用过程一波三折,非常的坎坷,折腾了一下午,增长了一些经验,记录下来1,如果你要在netframework4.8框架中使用,就不要自作聪明的用netstandard2.0框架......
  • 基于PG开发数据库中出现PSQLException: 错误,无法确定参数$1的数据类型
    问题描述在开发接口适配瀚高数据库时,出现此错误:同样的xml文件在达梦、金仓、Mysql中使用模糊查询时未发现错误;...likeconcat('%',#{name},'%')后经排查与数据库连接中:jdbc:highgo://.../test?stringtype=unspecified存在联系。加入``是为了避免ERROR:columnisofty......
  • 利用pycharm对分布式命令的设备进行debug(Vision mamba)
    背景介绍接着上次的visionmamba初步跑通,想进一步了解内部代码运行的过程,模型的工作机理,因此打算利用pycharm进行断点调试(即debug),花了半天时间终于学会了如何将控制台命令的形式传入pycharm中进行传参。在此,感谢大佬的博客,这里只是具体结合本机安装wsl2对大佬的博客进行......
  • 读取2bit权重进行打印
    printf("w.shape:%s\n",merge_res->filter1.shape().str().c_str());std::cout<<FILE<<LINE<<"name:"<<magik_name<<"filter1.size:"<<filter1_size<<std::endl;//if(false){if(tru......