TIMG二进制文件转JPEG图片的方法

本文介绍了将TIMG二进制文件转换为JPEG图片的过程,涉及二进制文件读取、文件头信息提取及Libjpeg库的应用。通过详细步骤展示如何完成这一操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这十天都在做将二进制文件压缩成jpeg图片并保存到本地的事,从二进制文件的读取、文件头信息的提取,到libjpeg库的使用。事情虽小,但涉及到的知识却很多,有必要记录一番。

TIMG二进制文件

TIMG文件以二进制数据形式存储,二进制形式读取,文件空间有文件头+图像数据块组成。文件头包含了文件的基本信息,如:文件名,图片宽度,高度,是否包含tip图数据等等。TIMG文件中使用结构体的方式定义了文件的基本信息,结构体变量名st_head
利用结构体中的数据提取图像数据块。

文件的读取和文件头的提取

C++使用fstream流的方法读取文件,其中ifstram将文件从硬盘读到内存,ofstream将文件从内存读到硬盘。二进制文件的读使用到read(char * buffer,streamsize size)//从文件中读取size个字符到buffer中。这里size设置成sizeof(st_head),buffer为st_head定义的一个结构体变量S,文件头的信息就存储到S中。

Libjpeg库的使用

jpeg是一种图片格式,具体内容十分复杂,不过可以使用libjpeg进行jpeg图像的压缩。libjpeg库是开源代码,在VS上使用需要用到vs的command,命令语句nmake生成相应的lib,具体可看源码中的install.txt。jpeg图像的压缩要求数据块是以RGBRGB的形式排列的矩阵数组。图片的width和height是压缩图像的重要参数。
	while(cinfo.next_scanline < cinfo.image_height)
	{
		row_pointer[0] = &src_data[cinfo.next_scanline * row_stride];                                                                
		jpeg_write_scanlines(&cinfo,row_pointer,1);
	}
row_stride = image_width * 3,next_scanline是一个自增的变量,每写一行就加1。src_data是读取出来的数据块,
cinfo.next_scanline * row_stride
表示jpeg图片每行数据要写入的元素个数和起始地址。









评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值