一、简介
TGA是由美国Truevision公司为其显示卡开发的一种图像文件格式,已被国际上的图形、图像工业所接受。现已成为数字化图像,以及运用光线跟踪算法所产生的高质量图像的常用格式。TGA文件的扩展名为.tga,该格式支持压缩,使用不失真的压缩算法,可以带通道图,另外还支持行程编码压缩。
——来自360百科
问题
- .tga结构是怎样的?
- 如何压缩,算法是什么?
- 光线追踪算法
二、结构
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压缩的真彩图像,所以也没办法分析其他类型~
三、总结
对于压缩算法的理解,还存在很多问题,希望能通过以后的学习不断完善。