JPEG文件数据结构以及将位图保存为JPG的代码 转1

本文深入探讨JPEG文件的数据结构,并提供将位图转换为JPEG(JPG)格式的代码实现。内容涉及图像编码原理,重点讨论了JPEG的压缩算法和Qt库在处理图像文件中的应用。

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

JPEG文件数据结构以及将位图保存为JPG的代码

一、简述
  JPEG是一个压缩标准,又可分为标准JPEG、渐进式JPEG及JPEG2000三种:

  ①标准JPEG:以24位颜色存储单个光栅图像,是与平台无关的格式,支持最高级别的压缩,不过,这种压缩是有损耗的。此类型图片在网页下载时只能由上而下依序显示图片,直到图片资料全部下载完毕,才能看到全貌。
  ②渐进式JPEG:渐进式JPG为标准JPG的改良格式,支持交错,可以在网页下载时,先呈现出图片的粗略外观后,再慢慢地呈现出完整的内容,渐进式JPG的文件比标准JPG的文件要来得小。
  ③JPEG2000:新一代的影像压缩法,压缩品质更好,其压缩率比标准JPEG高约30%左右,同时支持有损和无损压缩。一个极其重要的特征在于它能实现渐进传输,即先传输图像的轮廓,然后逐步传输数据,让图像由朦胧到清晰显示。

  以一幅24位彩色图像为例,JPEG的压缩分为四个步骤:

  ①颜色转换:在将彩色图像进行压缩之前,必须先对颜色模式进行数据转换。转换完成之后还需要进行数据采样。
  ②DCT 变换:是将图像信号在频率域上进行变换,分离出高频和低频信息的处理过程,然后再对图像的高频部分(即图像细节)进行压缩。首先以象素为单位将图像划分为多个8×8的矩阵,然后对每一个矩阵作DCT 变换。把8×8的象素矩阵变成8×8的频率系数矩阵(所谓频率就是颜色改变的速度),频率系数都是浮点数。
  ③量化:由于下面第四步编码过程中使用的码本都是整数,因此要对频率系数进行量化,将之转换为整数。数据量化后,矩阵中的数据都是近似值,和原始图像数据之间有了差异,这一差异是造成图像压缩后失真的主要原因。这一过程中,质量因子的选取至为重要。值选得大,可以大幅度提高压缩比,但是图像质量就比较差,质量因子越小图像重建质量越好,但是压缩比越低。
  ④编码:编码是基于统计特性的方法。

  四个步骤都完成后的JPEG文件,其基本数据结构为两大类型:“段”和经过压缩编码的图像数据。


二、数据结构

  1.段的一般结构如下表所示:

表1:段的一般结构
-----------------------------------------------------------------
名称    字节数 数据  说明
-----------------------------------------------------------------
段标识   1     FF    每个新段的开始标识
段类型   1           类型编码(称作“标记码”)
段长度   2           包括段内容和段长度本身,不包括段标识和段类型
段内容               ≤65533字节
-----------------------------------------------------------------
  说明:
①JPG 文件中所有关于宽度高度长度间隔这一类数据,凡是>1字节的,均采用Motorola格式,即:高位在前,低位在后。
②有些段没有长度描述也没有内容,只有段标识和段类型。文件头和文件尾均属于这种段。
③段与段之间无论有多少FF都是合法的,这些FF称为“填充字节”,必须被忽略掉。


  2.段类型有30种,但只有10种是必须被所有程序识别的,其它的类型都可以忽略。所以下面只列出这10种类型。

表2:段类型
---------------------------------------
名称  标记码  说明
---------------------------------------
SOI    D8     文件头
EOI    D9     文件尾
SOF0   C0     帧开始(标准 JPEG)
SOF1   C1     同上
DHT    C4     定义 Huffman 表(霍夫曼表)
SOS    DA     扫描行开始
DQT    DB     定义量化表
DRI    DD     定义重新开始间隔
APP0   E0     定义交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值