一. TGA计算机图像文件格式
1. 概述
TGA是由美国Truevision公司为其显示卡开发的一种图像文件格式,已被国际上的图形、图像工业所接受。现已成为数字化图像,以及运用光线跟踪算法所产生的高质量图像的常用格式。TGA文件的扩展名为.tga,该格式支持压缩,使用不失真的压缩算法,可以带通道图,另外还支持行程编码压缩。
2. 历史
- TGA文件格式最初由AT&T EPICenter定义和指定,并在1984年从Island Graphics Inc.获得反馈。AT&T EPICenter是AT&T的内部衍生产品,其创建是为了销售AT&T为彩色帧缓冲器开发的新技术。后来成为Truevision的是1987年从AT&T杠杆收购员工的结果。
- EPICenter的前两张卡VDA(视频显示适配器)和ICB(图像捕获板)使用了TGA文件格式的第一版。文件扩展名“ .vda”和“ .icb”暗含有关所包含的特定于板的数据的信息。
- 后来由Alan Wlasuk(EPICenter的负责人),Brad Pillow(EPICenter)和Steven Dompier(Island的总裁)确定,需要一种更统一的文件格式。该文件格式是由Brad Pillow(EPICenter)和Bryan Hunt(EPICenter)创建和实现的,并且是针对这种对特定于电路板的较少文件格式的需求而开发的。对已经使用的内容进行了非常简单的扩展,其中包含有关宽度,高度,像素深度,关联的颜色图和图像原点的信息。标签字段(最多255个字符)也包含在初始规范中,但很少使用。
- 当时,还出现了另一种技术上更高级的文件格式,称为TIFF,但是它在真彩色图像上的使用非常有限,因为在支持TIFF规范的应用程序之间实现和共享文件非常困难且涉及很多。TGA文件格式的简单性和平台之间的可移植性是其被广泛采用并在当今全球各种应用中持续取得成功的主要原因。
- 最初,TGA文件格式用于ICB-PAINT和TARGA-PAINT程序(后来称为TIPS)中,并且用于在线房地产浏览和静止帧视频电话会议中的多个项目。
- 当前版本(2.0)包括多项增强功能,例如“邮票”(又称缩略图),alpha通道,伽玛值和文本元数据,由Truevision Inc.的Shawn Steiner撰写,指导方向是Kevin Friedly和戴维·斯波斯特拉(David Spoelstra)在1989年。
- 在发布时,它代表了数字图像处理领域的最新技术。即使到今天,尽管TGA的最大色深仍不太适合高端印前,密集型图像处理系统,但TGA仍在整个动画和视频行业中得到广泛使用,因为TGA的主要预期输出是标准电视屏幕,而不是彩色印刷页面。
- 与其他几种著名的24位存储格式相比,未压缩的24位TGA图像相对简单:24位TGA仅包含一个18字节的标头,后跟图像数据作为打包的RGB数据。相反,BMP要求将行填充到4字节边界,而TIFF和PNG是元数据容器,它们不会将图像数据或属性放置在文件内的固定位置。
- 三十二位TGA图像包含一个alpha通道或键信号,并且经常在诸如Avid Deko之类的字符生成器程序中使用。
二. TGA文件格式技术细节
我们以如下图片tga_24bit.tga为例,用FlexHEX作为解析工具进行二进制分析。
1. 文件头
图像字段信息长度(ID length)-1字节:长度为1个字节,这个字段规定了包含在字段6(Image ID字段)中的字节数,最大的字符数是255,它的值为0,则表示在这个文件中没有图像信息字段。在图像的二进制文件中,我们可以看到第一个字节为0也就是表示该图像文件没有图像信息字段。

颜色表类型(Color Map Type)-1字节:长度为1个字节,当前已定义的有两个值0或者1,0 表示没有颜色表(color map),1 表示颜色表存在。在我们的tag图片中,可以看到当前字段是0,表示该文件没有颜色表(color map)。

图像类型(Image Type)-1字节:长度为1个字节,该字段定义的文件格式如下:

可以看到,我们的示例图片的第三位是02,也就是未压缩的真彩色图像。
颜色表规约(Color Map Specification)-5字节:这个字段描述图像中使用的颜色表。当热,如果前面的颜色字段为0,则不存在颜色表,也就是该字段的5个字节都将被置0。

4.1 颜色表首地址(First Entry Index)-2字节:指的是装载颜色表的首地址,也就是颜色表表项的索引。
4.2 颜色表长度(Color Map Length)-2字节:表示颜色表项也就是调色板的数量。
4.3 颜色表表项大小(Color Map Entry Size)-1字节:表示每个表项占用的位数,典型的值有15,16,24,或者32位。图像规约(Image Specification)-10字节:这个字段描述了图像的屏幕位置,尺寸和像素深度。

5.1 图像X位置的起始位置(X-origin of Image)-2字节:指的是图像左下角的水平坐标。因为我们的示例图像是完全充满整个屏幕,所以x位置的起始位置是0。
5.2 图像Y位置的起始位置(Y-origin of Image)-2字节:指的是图像左下角的垂直坐标。因为我们的示例图像是完全充满整个屏幕,所以y位置的起始位置是0。
5.3 图像宽度(Image Width)-2字节:指的是图像的宽度。我们的示例图像中,这两位的二进制显示是1F 00,但是我们二进制存储时是按照低位在前高位在后的原则存储的,所以我们可以看到转换成十进制的是31,也就表明我们的示例图像的宽度为31像素。这与我们已知的图像属性相同。
5.4 图像高度(Image Height)-2字节:指的是图像的高度。我们的示例图像中,这两位的二进制显示是1F 00,但是我们二进制存储时是按照低位在前高位在后的原则存储的,所以我们可以看到转换成十进制的是31,也就表明我们的示例图像的高度为31像素。这与我们已知的图像属性相同。
5.5 像素深度(Pixel Depth)-1字节:指的是图像每个像素占用的位数。通常的值是8,16,24,32位。我们的实力图像中我们可以看到每个像素占用为8位。
5.6 图像描述符(Image Descriptor)-1字节:具体每一个位置的功能如下表格
在我们的示例图片该位置的参数是01,换算成二进制8bit即0000 0001。
5.6.1 0-3位:规定了每个像素属性位的数量
5.6.2 4-5位:表示像素数据从文件发送到屏幕的顺序,第4位表示从左到右,第5位表示从上到下。
5.6.3 6-7位:均为0
2. 图像/颜色表数据
因为我们的示例图像是24位真彩色图片,所以图像数据是按照“B,G,R,属性(透明度等)”的排列顺序来的。
三. 总结
TGA文件与课上学习过的BMP文件有异曲同工之妙,很多地方都有相似的地方,想颜色表和数据的存储,以及文件头的一些属性。
通过对TGA文件的粗略解析,加深了我对图像文件格式的了解,也为后续编程处理文件打下 基础。