一、简介
TGA(Truevision Graphics Adapter)文件格式,通常又称为Targa(Truevision Advanced Raster Graphics Adapter),是由Truevision公司1984年创建,并被用于该公司的首个视频图像产品中。1989年,Truevision公司制定了TGA文件格式的扩展格式,使得开发者可以依据其标准开发跨平台跨产品的兼容格式。TGA文件格式可用于存储8位、15位、16位、24位、32位图像数据,支持alpha通道、颜色索引、RGB颜色、灰度图、行程压缩算法(RLE)、开发者自定义区、缩略图等。TGA文件格式因其格式简单、易于实现、没有专利费用和跨平台等特性而被图形图像工业广泛使用。
二、文件结构
TGA扩展文件结构(v2.0)由五部分组成:文件头、图像/颜色表数据、开发者自定义区域、扩展区域和文件尾。
文件头(Tga File Header):由图像描述信息字段长度、颜色表类型、图像类型、颜色表说明和图像说明五个字段组成,总计18字节,描述了图像存储的基本信息,应用程序可依据该部分字段值读写图像数据。
图像/颜色表数据(Image/Color Map Data):由图像描述信息(可选)、颜色表数据和图像数据三部分组成,用于存储图片的图像信息。
开发者自定义区域(Developer Area):包含开发者定义字段列表和开发者字典(用于存储开发者定义字段的值),该区域为开发者扩展该文件格式提供接口,以便存储额外的信息。
扩展区域(Extension Area):由扩展区域大小、作者姓名、作者注释、日期/时间、工作名称/ID、工作累计耗时、编辑软件的名称、编辑软件的版本、关键颜色、像素宽高比、灰度值、颜色校正表偏移量、缩略图偏移量、扫描线表偏移量、alpha通道类型、扫描线表、缩略图图像数据和颜色校正表组成,为Truevision公司定义的标准扩展功能,以提供更多的图像附加信息。
文件尾(TGA File Footer):由扩展区域偏移量、开发者目录偏移量和TGA文件扩展格式签名三部分组成,用于验证TGA文件扩展格式,并可以确定扩展区域和开发者字典的位置。
三、字段说明
下面主要围绕TGA头文件(TGA File Header)以及图像/颜色数据表(Image/Color Map Data)展开说明
TGA File Header
1. 图像信息长度、颜色表类型、图像类型码
名称 | 长度 | 说明 |
---|---|---|
ID Length | 1 | 指出图像信息字段长度,取值范围0~255 |
Color Map Type | 1 | 0:不使用颜色表 1:使用颜色表 |
Image Type | 1 | 0:没有图像数据 1:未压缩的颜色表图像 2:未压缩的真彩图像 3:未压缩的黑白图像 9:RLE压缩的颜色表图像 10:RLE压缩的真彩图像 11:RLE压缩的黑白图像 |
问题一:如何判断tga文件的应用模式?
将tga文件以二进制形式打开,读头文件的第二、三个字节
可以看出图1是RLE压缩的颜色表图像,图2是未压缩的真彩图像
问题二:tga文件如何压缩?
tga文件采用形成压缩算法RLE(Run Length Encoding)它是最早出现、也是最简单的无损数据压缩算法。RLE算法的基本思路是把数据按照线性序列分成两种情况:一种是连续的重复数据块,另一种是连续的不重复数据块。对于第一种情况,对连续的重复数据块进行压缩,压缩方法就是用一个表示块数的属性加上一个数据块代表原来连续的若干块数据。对于第二种情况,RLE算法有两种处理方法,一种处理方法是用和第一种情况一样的方法处理连续的不重复数据块,仅仅是表示块数的属性总是1;另一种处理方法是不对数据进行任何处理,直接将原始数据作为压缩后的数据。
例如(每个字母代表一个数据块):
原始数据块:ABBBB
压缩后数据为:1A4B
原始数据块:ABCDE
压缩后数据块:
按第一种方法处理为1A1B1C1D1E
按第二种方法处理,则数据不变 ABCDE
数据块的长度可以是任意长度,数据块长度越长则连续重复的概率就越低,压缩的优势就体现不出来,因此,大多数RLE算法的实现都使用一个字节作为数据块长度。
2.颜色表规格字段
以下数据低位在前,高位在后
名称 | 长度 | 说明 |
---|---|---|
颜色表首址 | 2 | 颜色表首的入口索引 |
颜色表长度 | 2 | 颜色表表项总数 |
颜色表项位数 | 1 | 位数,16代表16位TGA,24代表24位TGA,32代表32位TGA |
问题三:怎样更改图片颜色?
可以在图像数据字段(Image Data)更改RGB数据或索引号,也可以更改颜色表。
以下图为例:
颜色表长度0x0200,表示颜色表共两项,图片最多有两种颜色。
颜色表数据为0xFF FF FF(白) 00 00 00(黑)
将颜色表数据改为0xFF FF FF(白) 00 00 FF(红) 发现之前黑色的像素都变成红色,图片变得非常辣眼。
修改图片颜色,也可以直接修改图像数据字段的RGB值或索引号。根据表头信息,在偏移24位处找到图像数据,将开始的几个索引号由0x00改为0x01。由于tga数据从左下角开始读,可以看到图片左下角的几个像素由白变黑。
3.图像规格字段
以下数据低位在前,高位在后
名称 | 长度 | 说明 |
---|---|---|
图像X坐标起始位置 | 2 | 图像左下角X坐标 |
图像Y坐标起始位置 | 2 | 图像左下角Y坐标 |
图像宽度 | 2 | 以像素为单位 |
图像高度 | 2 | 以像素为单位 |
图像每像素存储占用位数 | 2 | 值为8、16、24、32等 |
问题四:怎样查看tga文件分辨率?
以上图3-1为例,可以读出图像宽度0x2C 01, 高度 0xE1 00,每像素储存位数0x08 00。按高在低位在后的顺序重新排列,换算成十进制,则图像宽高比为300x225,每像素储存占1字节。
Image/Color Map Data
4.图像信息字段、颜色表数据、图像数据
名称 | 长度 | 说明 |
---|---|---|
图像信息字段 | 可变长 | 储存图像的身份信息,该字段最长255个字节,图像信息字段规定了它的长度 |
颜色表数据 | 可变长 | 颜色表表项大小和颜色表长度字段共同规定颜色表数据长度。每个颜色表表项用整数个字节存储,每个颜色表的RGB采用连续字节存储 |
图像数据 | 可变 | 该字段包含width*height个像素,每个像素格式如下(1).用伪彩色表示,则是一个颜色图的一个索引号 (2).真彩图,则数据存放格式为:16位 gggbbbbb arrrrrgg ;24位:BGR; 32位:BGRA (3).调配色,则是独立的颜色表索引 |