一.TGA文件简介
1.概述
TGA(Tagged Graphics)
TGA是由 美国Truevision公司为其显示卡开发的一种 图像文件格式,已被国际上的图形、图像工业所接受。现在已成为 数字化图像,以及运用光线跟踪算法所产生的高质量图像的常用格式。TGA文件的 扩展名为.tga。TGA的结构比较简单,属于一种图形、图像数据的通用格式,目前大部分文件为24位或32位真彩色,在多媒体领域有着很大影响。由于Truevision公司推出TGA的目的是为了采集、输出电视图像,所以TGA文件总是按行存储、按行进行压缩的,这使得它同时也成为计算机生成图像向电视转换的一种首选格式。使用 photoshop 软件可以打开此类文件。
2.结构
TGA的结构比较简单,属于一种图形、图像数据的通用格式,在多媒体领域有很大影响,是 计算机生成图像向电视转换的一种首选格式。
3.特点
TGA图像格式最大的特点是可以做出不规则形状的图形、图像文件,一般图形、图像文件都为四方形,若需要有圆形、菱形甚至是缕空的图像文件时,TGA可就派上用场了!
4.优点
TGA格式支持压缩,使用不失真的压缩算法。
在工业设计领域,使用三维软件制作出来的图像可以利用TGA格式的优势,在图像内部生成一个Alpha(通道),这个功能方便了在平面软件中的工作。
Tga常见的格式有非压缩RGB和压缩RGB两种格式,文件的第三个Byte位作为标记:2为非压缩RGB格式,10为压缩RGB格式。这里的类只实现读取非压缩格式的tga文件。
5.TGA文件格式
名称 | 偏移 | 长度 | 说明 | ||
图像信息字段长度 | 0 | 1 | 本字段是 1 字节无符号整型,指出图像信息字段( 见本子表的后面 )长度,其取值范围是 0 到 255 ,当它为 0 时表示没有图像的信息字段。 | ||
颜色表类型 | 1 | 1 | 0 表示没有颜色表,1 表示颜色表存在。由于本格式是无颜色表的,因此此项通常被忽略。 | ||
图像类型码 | 2 | 1 | 该字段总为 2 , 这也是此类型为格式 2 的原因。 | ||
颜色表规格字段 | 颜色表首址 | 3 | 2 | 颜色表首的入口索引,整型(低位-高位) | 如果颜色表字段为0,则忽略该字段 |
颜色表的长度 | 5 | 2 | 颜色表的表项总数,整型(低位-高位) | ||
颜色表项位数 | 7 | 1 | 位数(bit),16 代表 16 位 TGA ,24 代表 24 位 TGA ,32 代表 32 位 TGA | ||
图像规格字段 | 图像 X 坐标起始位置 | 8 | 2 | 图像左下角 X坐标的整型(低位-高位)值 | |
图像 Y 坐标起始位置 | 10 | 2 | 图像左下角 Y坐标的整型(低位-高位)值 | ||
图像宽度 | 12 | 2 | 以像素为单位,图像宽度的整型(低位-高位) | ||
图像高度 | 14 | 2 | 以像素为单位,图像宽度的整型(低位-高位) | ||
图像每像素存储占用位数 | 16 | 2 | 它的值为16,24 或 32 等等。决定了该图像是 TGA 16,TGA24,TGA 32 等等。 | ||
图像描述符字节 | 17 | 1 | bits 3-0 - 每像素对应的属性位的位数; 对于TGA 16, 该值为 0 或 1,对于 TGA 24,该值为 0,对于 TGA 32,该值为 8。 bit 4 - 保留,必须为 0 bit 5 - 屏幕起始位置标志 0 = 原点在左下角 1 = 原点在左上角 对于 truevision 图像必须为 0 bits 7-6 - 交叉数据存储标志 00 = 无交叉 01 = 两路奇/偶交叉 10 = 四路交叉 11 = 保留 | ||
图像信息字段 | 18 | 可变 | 包含一个自由格式的,长度是图像由“图像信息字段”指定。它常常被忽略(即偏移 0 处值为 0 ),注意其最大可以含有 255 个字符。如果需要存储更多信息,可以放在图像数据之后。 | ||
颜色表数据 | 可变 | 可变 | 如果颜色表类型为 0,则该域不存在,否则越过该域直接读取图像颜色表规格中描述了每项的字节数,为 2,3,4 之一。 | ||
图像数据 | 可变 | 可变 | RGB颜色数据,存放顺序为:BBB GGG RRR (AAA) |
6.TGA文件格式解析
TGA文件包含5个区域:
(1)TGA文件头(TGA File Header);
图像信息字段长度(ID length)– 字段1(1个字节):
这个字段规定了包含在字段6(Image ID字段)中的字节数,取值范围0-255,
它的值为0,则表示在这个文件中没有图像信息字段。
颜色表类型(Color Map Type)– 字段2(1个字节):
当前已定义的有两个值0或者1,0 表示没有颜色表(color map),1 表示颜色表存在。
图像类型(Image Type)– 字段3(1个字节):
TGA文件格式可以用于存储各种位深度的伪彩色,真彩色,调配色,目前定义的7种文件格式
0-没有图像数据
1-未压缩,颜色表映射图像
2-未压缩,真彩图像
3-未压缩,黑白图像
9-行程编码,颜色表映射图像
10-行程编码,真彩图像
11-行程编码,黑白图像
颜色表规约(Color Map Specification) – 字段 4(5字节):
这个字段和它的子字段描述图像中使用的颜色表,如果颜色表类型字段为0,则表示不存在颜色表,则5个字节应该被设置为0,这些字节需要写入文件中。
图像规约(Image Specification)– 字段 5(10个字节):
这个字段和它的子字段描述了图像的屏幕位置,尺寸和像素深度。

(2)图像/颜色表数据(Image/Color Map Data);
图像信息字段(Image ID)– 字段 6(可变长):
存储了图像的身份信息(Identifying Information)这个字段最长为255个字节,图像信息字段长度字段规定了它的长度。
颜色表数据(Color Map Data) –字段7(可变长):
这个变长字段包含了颜色表信息(LUT数据),颜色表表项大小和颜色表长度字段共同规定了颜色表数据的长度。每个颜色表表项用整数个字节存储,规定每个颜色表的RGB采用连续的位存储,每个颜色的位长为MIN(颜色表表项大小字段值/3,8)。
图像数据(Image Data)– 字段 8(可变长):
这个字段包含Width*Height个像素,每个像素的格式如下所示:
(1)用伪彩色表示,则是一个颜色图的一个索引号;
(2)真彩图,则是属性,红绿,蓝顺序的数据;
(3)用调配色表示,就是独立的颜色表索引。
(3)开发者区域(Developer Area);
开发者数据(Developer Data) – 字段 9(可变长):
开发者字段的尺寸和格式完全是由开发者规定的,读取包含这些信息的文件时,完全可以忽略它们,除非理解这些内容。文件可能包含多个开发者字段,所以需要创建开发者目录(Developer Directory),它是开发者区域中这些字段的映射表。开发者目录可以使用偏移量来表示,存储在TGA文件注角(File Footer)4-7字节内,该偏移量是从文件的起始位置算起至开发者目录的起始位置,如果偏移量为0,则不存在开发者字段。
(4)拓展区域(Extension Area);
该拓展区域用于满足一些开发者对额外信息的需求,该区域的位置也是通过保存在TGA文件注脚中的偏移量来确定的,如果该偏移量为0,则不存在拓展区域。该区域包括拓展区域尺寸,作者名字,作者评论等信息。
(5)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。
二.TGA文件实例分析
1.将文件转化为TGA格式
用格式工厂将下图转为tga格式后,用Visual Studio2022以二进制编辑器形式打开。
2.分析文件
(1)文件头
①无图像信息字段,1字节,00
②没有使用颜色表,1字节,00
③未压缩的真彩图像,1字节,02
④由于不含颜色表,表示颜色表规范的第4-8字节都为0
⑤x轴起始坐标为0,2字节,00;y轴起始坐标为0,2字节,00;
即从图像左下角原点开始
⑥图像宽度为2字节,(178)B2;图像高度也为2字节,(107)6B。
⑦图像每像素存储占用位数为24位,2字节,18
(2)文件尾
(3)验证文件大小
通过分析二进制数据,可以计算得到文件大小:
18(文件头)+946*1643*3(图像部分)+0+0(无扩展区域和开发在自定义区域+26(文件尾)=4662878字节