首页 > 其他分享 >系统IO读BMP图片

系统IO读BMP图片

时间:2024-05-24 09:08:57浏览次数:33  
标签:int bmp unsigned BMP fd IO size 图片

使用Linux中的系统I/O读取BMP图片信息

#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/zcx0326/p/18209864

相关文章

  • 零基础学Java第二十一天之IIO流之对象流
    IO流之对象流1、对象流1、理解将对象写入到文件,将文件里的对象读取到程序中classObjectInputStream–对象输入流classObjectOutputStream–对象输出流序列化/钝化:程序里的对象写入到文件中反序列化/活化:文件中的对象读取到程序中2、注意对象所属的类......
  • 【Python】数据分析 Section 6.4: Heatmaps | from Coursera “Applied Data Science
    Heatmapsareawaytovisualizethree-dimensionsofdataandtotakeadvantageofspatialproximityofthosedimensions.InmakingrevisionstothiscourseIwasreallytemptedtogetridofthesectiononheatmaps,asI'veseenenoughbadheatmapst......
  • STM32在不支持5V输入IO口输入5V电平带来的奇怪现象
    今天在使用stm32单片机的时候,发现了一个奇怪的现象,调试器经常识别不到单片机,给单片机重新上电后有时就正常,但重新下载又无法识别。刚开始以为是调试器坏了,于是更换了调试器,但没有换调试器的杜邦线,还是相同的问题,因此把调试器故障排除了。然后又尝试了降低SW频率、更换调试线,问......
  • 如何使用语音情感基座模型emotion2vec+
        emotion2vec是一个由上海交通大学、阿里巴巴、复旦大学和香港中文大学的研究者们共同开发的通用语音情感表征模型。该模型通过自监督学习方法,在大量无标记的公开情感数据上进行预训练,以学习到高度通用的语音情感特征。模型旨在训练语音情感识别领域的“耳语”,通过......
  • 源代码管理工具简明宣介——Team Foundation Server(TFS)
    TeamFoundationServer(TFS)是一款由Microsoft提供的强大的源代码管理工具,它为软件开发团队提供了一个全面的应用生命周期管理平台。一、核心功能源代码管理:TFS支持集中式和分布式版本控制系统,包括TFVC(TeamFoundationVersionControl)和Git。这使得团队能够灵活选择最适合其项......
  • 每日一题Reverse Card (Easy Version)
    文章目录题名:题意:题解:代码:题名:ReverseCard(EasyVersion)题意:给定nnn,mm......
  • Further Generalizations of the Jaccard Index
    目录概JaccardIndex推广到multisets推广到MultiplesetsCostaL.Furthergeneralizationsofthejaccardindex.2021.概本文介绍了JaccardIndex(JaccardSimilarity),和它的一些变种.JaccardIndex对于两个普通的集合\(A,B\),它们的JaccardIndex为\[J(......
  • THUSC & APIO 2024 游记
    Day\(-\infty\)APIO被补录了?Day\(-\infty+1\)听说要报名THUSC?Day\(-\infty+10^9\)考完期中紧张地跑到机房来看看THU结果,结果学习CCF的左右(Day\(-\infty+10^9+1\)电脑一开屏保,上面赫然一行字:打印报到证-通过差点把心脏吓出来Day\(-1\)不想上whk,我......
  • 院图片库兼容性修复
    图片库问题处理原工程文件使用node-sass,而新版node.js已经弃用,应卸载node-sass,重新安装dart-sass1.卸载node-sassnpmuninstallnode-sass2.安装dart-sassnpminstallsasssass-loader-D3.安装所有包npminstall4.修改element-plus配置https://zhuanlan.zhihu.com/p......
  • 01-Python 图片转字符画
    fromPILimportImage"""将图片转换为字符画图片转字符画是将一张图片转换成由字符组成的图像,通常用于在命令行界面或者文本编辑器中显示。这个过程主要包括以下几个步骤:-读取图片文件-将图片转换为灰度图像-调整图片的尺寸以适应字符画的宽度......