一 简介
Truevision TGA,一般被称作TARGA,是一种由Truevision科技(现在已经被Avid科技收购)公司开发的光栅图像格式。这是一种TARGA和VISTA图形卡的原生数据格式,这两种芯片是IBM第一种支持真彩显示的图形卡。这种系列的图像卡是为了用PC进行专业的图像处理和视频编辑而开发的;因为这个原因,正常TGA格式的图像和NTSC和PAL视频格式中的图像是一致的。[2]通常,在PC中,TGA文件以.tga后缀结尾。TGA文件因为它的简单、容易实现而变得普遍起来。
二 结构分析
以FlexHEX分析具体图片为例:
![](https://i-blog.csdnimg.cn/blog_migrate/5e66abfc7e1192d6eb236dc47801a16b.png)
TGA文件包含5个区域:
(1)TGA文件头(TGA File Header)
(2)图像/颜色表数据(Image/Color Map Data)
(3)开发者区域(Developer Area)
(4)拓展区域(Extension Area)
(5)TGA文件注脚(TGA File Footer)
如图所示:
最后3个区域是在1980年9月以前增加的,所以1989年9月以前的TGA文件格式称为旧生版本TGA文件格式,1989年9月以后的则称为新版本的TGA文件格式。
1 头文件 Header
Field no. | Length | Field name | Descripton |
1 | 1 byte | ID length 图像信息字段长度 | Length of the image ID field |
2 | 1 byte | Color map type 颜色表类型 | Whether a color map is included |
3 | 1 byte | Image type 图像类型 | Compression and color types |
4 | 5 bytes | Color map specification 颜色表规约 | Describes the color map |
5 | 10 bytes | Image specification 图像规约 | Image dimensions and format |
1.1 ID Length 图像信息字段长度 —— 1 byte
这个字段规定了包含在字段6(Image ID字段)中的字节数,最大的字符数是255,它的值为0,则表示在这个文件中没有图像信息字段。
![](https://i-blog.csdnimg.cn/blog_migrate/402293fd1c0777650dd33c5cb78c6e65.png)
1.2 Color Map Type 颜色表类型 —— 1 byte
当前已定义的有两个值0或者1,0 表示没有颜色表(color map),1 表示颜色表存在。
![](https://i-blog.csdnimg.cn/blog_migrate/5aff022d56c60a2c3e3ed88eea126afc.png)
1.3 Image Type 图像类型 —— 1 byte
TGA文件格式可以用于存储各种位深度的伪彩色,真彩色,调配色,目前定义的7种文件格式如下所示:
Map Type | Description |
0 | No Image Data included |
1 | Uncompressed, color-mapped image |
2 | Uncompressed, true-color image |
3 | Uncompressed, black-and-white image |
9 | Run-length encoded, color-mapped image |
10 | Run-length encoded, true-color image |
11 | Run-length encoded, black-and-white image |
![](https://i-blog.csdnimg.cn/blog_migrate/f16bf8dbf9d72a48fea4275f6e7a15a1.png)
1.4 Color Map Specification 颜色表规约 —— 5 bytes
这个字段和它的子字段描述图像中使用的颜色表,如果颜色表类型字段为0,则表示不存在颜色表,则5个字节应该被设置为0,这些字节需要写入文件中。
First Entry Index 颜色表首地址 | 2 bytes |
Color map Length 颜色表长度 | 2 bytes |
Color map Entry Size 颜色表表项大小 | 1 byte |
![](https://i-blog.csdnimg.cn/blog_migrate/ef608f98617dc72566a5e7d5c0894218.png)
1.5 Image Specification 图像规约 —— 10 bytes
这个字段和它的子字段描述了图像的屏幕位置,尺寸和像素深度。
X-origin of Image 图像X位置的起始地址 —— 图像左下角水平坐标 | 2 bytes |
Y-origin of Image 图像Y位置的起始地址 —— 图像左下角垂直坐标 | 2 bytes |
Image Width 图像宽度 | 2 bytes |
Image Height 图像高度 | 2 bytes |
Pixel Depth 像素深度 —— 这个字段表示每个像素占用的位数,通常为8,16,24,32 | 1 byte |
Image Descriptor 图像描述符 | 1 byte |
00 00 | 00 00 | DD 00 | E1 00 | 18 | 00 | ||||
宽度221像素 | 高度225像素 | 每个像素占24位 |
2 图像/颜色表数据 Image/Color Map Data
2.1 Image ID 图像信息字段 —— 可变长
存储了图像的身份信息(Identifying Information)这个字段最长为255个字节,Field 1字段规定了它的长度。
本文图像字段1的值为0,即没有图像信息
2.2 Color Map Data 颜色表数据 —— 可变长
这个变长字段包含了颜色表信息(LUT数据),1.4规定了该字段的长度。每个颜色表表项用整数个字节存储,规定每个颜色表的RGB采用连续的位存储,每个颜色的位长为MIN(Field 4.3/3,8)。
该文件1.4为0,则不存在颜色表数据
2.3 Image Data 图像数据 —— 可变长
这个字段包含Width*Height个像素,每个像素的格式如下所示:
(1)用伪彩色表示,则是一个颜色图的一个索引号
(2)真彩图,则是属性,红绿,蓝顺序的数据
(3)用调配色表示,就是独立的颜色表索引
本文文件:宽(221像素)x 高(225像素)x 3(24位)= 149175 bytes
![](https://i-blog.csdnimg.cn/blog_migrate/0811ee40fab54d72e1b80e2d9fb5c209.png)
3 开发者区域 Developer Area | 拓展区域 Extension Area
开发者字段的尺寸和格式完全是由开发者规定的,读取包含这些信息的文件时,完全可以忽略它们,除非理解这些内容。文件可能包含多个开发者字段,所以需要创建开发者目录(Developer Directory),它是开发者区域中这些字段的映射表。开发者目录可以使用偏移量来表示,存储在TGA文件注角(File Footer)4-7字节内,该偏移量是从文件的起始位置算起至开发者目录的起始位置,如果偏移量为0,则不存在开发者字段。
目录中的第一个short值,规定了在目录中标签的数量,余下的是一组TAG,OFFSET,和SIZE的组合,每个TAG是一个分布在0至65535之间的值,0-32767的值用于开发者使用,32668-65535之间的值被Truevision保留,Truevision维护一个标签列表,分配给一些公司。该字段不详细介绍,具体参见文档
拓展区域用于满足一些开发者对额外信息的需求,该区域的位置也是通过保存在TGA文件注脚中的偏移量来确定的,如果该偏移量为0,则不存在拓展区域。该区域包括拓展区域尺寸,作者名字,作者评论等信息,这里也不详细解释,具体参见相应文档。
4 TGA文件注脚 TGA File Footer
最后26个字节表示文件注脚,但是对于原先版本的TGA文件格式不存在这个区域,可以扫描8-23字节,如果符合下列字符串:
TRUEVISION-XFILE
说明很有可能存在注脚字段,否则则属于原先版本的TGA文件。该区域的格式如下所示:
Bytes 0-3:拓展区域偏移量
Bytes 4-7:开发者区域偏移量
Bytes 8-23:签名
Byte 24:ASCII码”.”
Byte 25:二进制数0x00。
![](https://i-blog.csdnimg.cn/blog_migrate/e2b3488a499b0a5ae189307e333d0898.png)
三 总结