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

news/2024/9/28 7:18:36

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/30330.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

雨天的尾巴

[Vani有约会] 雨天的尾巴 /【模板】线段树合并 题目背景 深绘里一直很讨厌雨天。 灼热的天气穿透了前半个夏天,后来一场大雨和随之而来的洪水,浇灭了一切。 虽然深绘里家乡的小村落对洪水有着顽固的抵抗力,但也倒了几座老房子,几棵老树被连根拔起,以及田地里的粮食被弄得一…

[单机]完美国际_V155_GM工具_VM虚拟机

[端游] 完美国际单机版V155一键端PC电脑网络游戏完美世界幻海凌云家园 本教程仅限学习使用,禁止商用,一切后果与本人无关,此声明具有法律效应!!!! 教程是本人亲自搭建成功的,绝对是完整可运行的,踩过的坑都给你们填上了。 如果你是小白也没问题,跟着教程走也是可以搭…

产业园区越来越卷

在经济不断发展和转型升级的大背景下,产业园区作为推动区域经济发展的重要引擎之一,扮演着越来越重要的角色,亦得到了政府、产业巨头、“轻资产”运营商、创投机构等各方力量的持续关注!纵观2023年,产业园区现状如何,在招商、运营、数智化建设等方面,又该如何拨云见日,…

Spring MVC执行流程

视图执行流程用户发送出请求到前端控制器DispatcherServlet。 DispatcherServlet收到请求调用HandlerMapping(处理器映射器)。 HandlerMapping找到具体的处理器,生成处理器对象及处理器拦截器(如果有),再一起返回给DispatcherServlet。 DispatcherServlet调用HandlerAdapter(…

新电脑—机械革命15pro

我觉得15寸的屏幕显示大小刚刚好,14寸可能会感觉小了,16又大了 15真的是黄金尺寸 另外这个电脑真的太重了,抬起来真的是感觉密度很大,超级沉重,是不是全部拿去放电池了 键盘的键程太长了,就是按着太费劲了,简直是来锻炼手指肌肉力量的,我一下子都有些不适应 我自己更换…

Django性能之道:缓存应用与优化实战

title: Django性能之道:缓存应用与优化实战 date: 2024/5/11 18:34:22 updated: 2024/5/11 18:34:22 categories:后端开发tags:缓存系统 Redis优点 Memcached优缺点 Django缓存 数据库优化 性能监控 安全实践引言 在当今的互联网时代,用户对网站和应用程序的性能要求越来越高…

导数、偏导数、方向导数与梯度

目录导数偏导数全微分方向导数梯度参考 导数 导数是一元函数的概念. 函数\(y=f(x)\)在点\(x_0\)的某个邻域内有定义,自变量\(x\)在\(x_0\)处每取得\(\Delta x\)增量,因变量\(y\)取得\(\Delta y=f(x_0+\Delta x)-f(x_0)\)增量. 如果\(\Delta x\to 0\)时,极限\(\lim\limits_{\…

keil 添加HC32F005 Flash烧录目标的问题

1. 双击安装“HDSC.HC32F005.1.0.1.pack”,重启keil。 2.如果还不行,就将C:\Keil_v5\Packs\HDSC\HC32F005\1.0.1\Flash\HC32F005.FLM 复制到C:\Keil_v5\ARM\Flash目录下,保证可以。