一、TGA文件概述
1.什么是TGA格式图像?
tga是由美国Truevision公司为其显示卡开发的一种图像文件格式,已被国际上的图形、图像工业所接受。现已成为数字化图像,以及运用光线跟踪算法所产生的高质量图像的常用格式。TGA文件的扩展名为.tga,该格式支持压缩,使用不失真的压缩算法,可以带通道图,另外还支持行程编码压缩。
2.TGA文件各区域及其包含的字段
TGA文件包含5个区域,分别为:
(1)TGA文件头(TGA File Header)
(2)图像\颜色表数据(Image/Color Map Data)
(3)开发者区域(Developer Area)
(4)拓展区域(Extension Area)
(5)TGA文件注脚(TGA File Footer)
表1.各区域的字段分布
区域名称 | 字段 | 字段长度 | |
文件头 | 图像信息字段长度 | 1 byte | |
颜色表类型 | 1 byte | ||
图像类型 | 1 byte | ||
颜色表规约 | 5 byte | ||
图像规约 | 10 byte | ||
图像\颜色表数据 | 图像信息字段 | 可变长,由图像信息字段长度确定 | |
颜色表数据 | 可变长,由颜色表规约字段确定 | ||
图像数据 | 可变长,包含图像长*宽个像素 | ||
开发者区域 | 开发者数据 | 可变长 | |
拓展区域 | 可变长,由保存在TGA文件注脚中的偏移量确定 | ||
TGA文件注脚 | 保存文件注脚信息 | 最后26 byte |
3.TGA文件中的颜色
(1)伪彩色(pseudo-color):图像的每个像素值实际上是一个索引值或代码,该代码值作为色彩查找表CLUT(Color Look-Up Table)中某一项的入口地址,根据该地址可查找出包含实际R、G、B的强度值。用这种查找映射的方法产生的色彩成为伪彩色。
(2)真彩色(true-color):图像中的每个像素值都分成R、G、B三个基色量,每个基色分量直接决定其基色的强度,这样产生的彩色成为真彩色。
(3)调配色(direct-color):该值的获取是通过每个像素点的R、G、B分量分别作为单独的索引值进行变换,经相应的色彩变换表找出各自的基色强度,用变换后的R、G、B强度值产生的色彩。
二、TGA具体文件分析
图1.以该图为例分析TGA文件的格式
使用VS-二进制编辑器打开此图片:
1.文件头分析
表2.文件头18字节分布
名称 | 偏移 | 长度 | 说明 | |
图像信息字段长度 | 0 | 1 | 这个字段规定图像信息字段的长度,最大的字符数是255,若值为0,则表明这个文件中没有图像信息字段 | |
颜色表类型 | 1 | 1 | 0表示没有颜色表,1表示有颜色表 | |
图像类型 | 2 | 1 | TGA文件格式可以用于存储各种位深度的伪彩色、真彩色、调配色,目前定义的7种文件格式如下: 0 - 没有图像数据 1 - 未压缩,颜色表映射图像 2 - 未压缩,真彩图像 3 - 未压缩,黑白图像 9 - 行程编码,颜色表映射图像 10 - 行程编码,真彩图像 11 - 行程编码,黑白图像 | |
颜色表规约 | 颜色表首地址 | 3 | 2 | 第1个颜色表表项的索引,装载颜色表的首地址 |
颜色表长度 | 5 | 2 | 颜色表表项的数量 | |
颜色表表项大小 | 7 | 1 | 每个表项占用的位数,典型值有15、16、24或32位 | |
图像规约 | 图像x位置的起始位置 | 8 | 2 | 图像左下角的水平座标 |
图像x位置的起始位置 | 10 | 2 | 图像左下角的垂直坐标 | |
图像宽度 | 12 | 2 | 低位在前高位在后 | |
图像高度 | 14 | 2 | ||
像素深度 | 16 | 1 | 该字段表示每个像素占用的位数,通常的值为8、16、24、32位 | |
图像描述符 | 17 | 1 | 0-3位:规定每个像素属性位的数量 4-5位:表示像素数据从文件发送到屏幕的顺序,位4表示从左到右,位5表示从上到下,如下所示: Bit 5 Bit 4 从下到上,从左到右 0 0 从下到上,从右到左 0 1 从上到下,从左到右 1 0 从上到下,从右到左 1 1 |
图2.示例图前18字节的文件头
(1)第1字节:00表示此图像中没有图像信息字段
(2)第2字节:00表示此图像中没有颜色表
(3)第3字节:02表示此图像为未压缩的真彩图像
(4)第4-8字节:均为00表示该图像无颜色表信息
(5)第9-10字节:00 00表示图像左下角水平坐标为0
(6)第11-12字节:00 00表示图像左下角垂直坐标为0
(7)第13-14字节:AA 04表示图像宽度为4AA(16进制数)即1194像素
(8)第15-16字节:60 03表示图像高度为360(16进制数)即864像素
(9)第17字节:18表示图像深度为18(16进制数)即24位
(10)第18字节:00表示图像从下到上从左到右发送到屏幕
2.图像\颜色表数据、开发者区域和拓展区域分析
由文件头信息可知该图像是未压缩的真彩图像,故该部分的数据存储顺序为:B-G-R-属性;
这一部分的数据大小为宽*高*3(24位)字节,在本例中:
宽(1194像素)*高(864像素)*3(24位) = 3,094,848字节;
与文件头(18字节)和文件注脚(26字节)相加为该图像的总大小即3,094,892字节;
查看图像的属性可验证该计算方法。
图3.TGA图像属性
3.TGA文件注脚分析
表3.文件注脚26字节分布
名称 | 偏移 | 长度 | 说明 | |
TGA文件注脚 | 拓展区域偏移量 | 可变 | 4 | 从文件开始到扩展数据区域的偏移量 |
开发者区域偏移量 | 可变 | 4 | 从文件开始到开发者字典数据的偏移量 | |
签名 | 可变 | 16 | 最后26个字节表示文件注脚,凡是对于原先版本的TGA文件格式不存在这个区域,可以扫描8-23字节,如果符合下列字符串: TRUEVISION-XFILE 说明很有可能存在注脚字段,否则属于原先版本的TGA文件 | |
ASCⅡ码 | 可变 | 1 | TGA文件结束字符——ASCⅡ码值为“.” | |
二进制数 | 可变 | 1 | 文件结束字符——二进制数0x00 |
图3.示例图最后26字节的文件注脚
(1)第1-4字节:表示拓展区域偏移量为0
(2)第5-8字节:表示开发者区域偏移量为0
(3)第9-24字节:表示签名,存在“TRUEVISION-XFILE”字符串,表明存在注脚字段
(4)第25字节:用ASCⅡ码值“.”表示TGA文件结束
(5)第26字节:用二进制数0x00表示文件结束
三、总结
分析TGA格式的图像文件,主要是要理解各个字段数据的含义,格外要注意“低位在前高位在后”的读数规则,以便于以后编程的实现。