数据压缩4 | TGA文件格式分析

本文详细解读了Truevision TGA文件格式,包括其结构,如文件头、图像数据、开发者和扩展区域,以及RLE压缩算法的工作原理。重点介绍了TGA在图形图像行业的使用和压缩技术的应用实例。

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

一、简介

TGA是由美国Truevision公司为其显示卡开发的一种图像文件格式,已被国际上的图形、图像工业所接受。现已成为数字化图像,以及运用光线跟踪算法所产生的高质量图像的常用格式。TGA文件的扩展名为.tga,该格式支持压缩,使用不失真的压缩算法,可以带通道图,另外还支持行程编码压缩。
——来自360百科

问题

  1. .tga结构是怎样的?
  2. 如何压缩,算法是什么?
  3. 光线追踪算法

二、结构

在这里插入图片描述
TGA文件包含5个区域:
(1)TGA文件头(TGA File Header);(2)图像/颜色表数据(Image/Color Map Data);
(3)开发者区域(Developer Area);
(4)拓展区域(Extension Area);
(5)TGA文件注脚(TGA File Footer)。

这里,利用格式工厂将已有的jpg文件转换为tga文件,对应分析其结构。
在这里插入图片描述
在这里插入图片描述

可以粗略观察,FF AA B1 08 FF AA B1 08 88 AA B1 08应为图像中背景的颜色(255 255 136)RGB颜色数据,存放顺序为:BBB GGG RRR ,利用Procreate观察颜色,基本接近背景色,因此可以简单推断,第二行中的FF之前的十六进制数为我们需要分析的结构内容,简化后续步骤。

1. TGA文件头

在这里插入图片描述

2. 图像/颜色表数据

在这里插入图片描述
在这里插入图片描述
尝试把后面有线条颜色变化的区域复制粘贴到重复区域,利用格式工厂转换为jpg,对比观察图像有无变化
在这里插入图片描述

在这里插入图片描述
可以观察到画面上部分出现条纹,下部分出现多余的像素行

3. 开发者区域,扩展区域,文件尾

FF AA B1 08 FF AA B1 08 88 AA B1 08 00 00 00 00 00 00 00 00 54 52 55 45 56 49 53 49 4F 4E 2D 58 46 49 4C 45 2E 00,这些是除开颜色数据之外的十六进制数,因为剩下对应区域的字节长度不定,所以简单写一下它们的介绍:

(1) 开发者自定义区域(Developer Area):包含开发者定义字段列表和开发者字典(用于存储开发者定义字段的值),该区域为开发者扩展该文件格式提供接口,以便存储额外的信息。
(2) 扩展区域(Extension Area):由扩展区域大小、作者姓名、作者注释、日期/时间、工作名称/ID、工作累计耗时、编辑软件的名称、编辑软件的版本、关键颜色、像素宽高比、灰度值、颜色校正表偏移量、缩略图偏移量、扫描线表偏移量、alpha通道类型、扫描线表、缩略图图像数据和颜色校正表组成,为Truevision公司定义的标准扩展功能,以提供更多的图像附加信息。
(3) 文件尾(TGA File Footer):由扩展区域偏移量、开发者目录偏移量和TGA文件扩展格式签名三部分组成,用于验证TGA文件扩展格式,并可以确定扩展区域和开发者字典的位置。

三、压缩算法

tga文件采用形成压缩算法RLE(Run Length Encoding)它是最早出现、也是最简单的无损数据压缩算法。RLE算法的基本思路是把数据按照线性序列分成两种情况:一种是连续的重复数据块,另一种是连续的不重复数据块。对于第一种情况,对连续的重复数据块进行压缩,压缩方法就是用一个表示块数的属性加上一个数据块代表原来连续的若干块数据。对于第二种情况,RLE算法有两种处理方法,一种处理方法是用和第一种情况一样的方法处理连续的不重复数据块,仅仅是表示块数的属性总是1;另一种处理方法是不对数据进行任何处理,直接将原始数据作为压缩后的数据。
例如(每个字母代表一个数据块):
原始数据块:ABBBB
压缩后数据为:1A4B
原始数据块:ABCDE
压缩后数据块:
按第一种方法处理为1A1B1C1D1E
按第二种方法处理,则数据不变 ABCDE
数据块的长度可以是任意长度,数据块长度越长则连续重复的概率就越低,压缩的优势就体现不出来,因此,大多数RLE算法的实现都使用一个字节作为数据块长度。

参考博客链接

因为三个bmp转tga和一个jpg转tga都为RLE压缩的真彩图像,所以也没办法分析其他类型~

三、总结

对于压缩算法的理解,还存在很多问题,希望能通过以后的学习不断完善。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月婵婵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值