数据压缩4 | TGA文件格式分析

一 简介

Truevision TGA,一般被称作TARGA,是一种由Truevision科技(现在已经被Avid科技收购)公司开发的光栅图像格式。这是一种TARGA和VISTA图形卡的原生数据格式,这两种芯片是IBM第一种支持真彩显示的图形卡。这种系列的图像卡是为了用PC进行专业的图像处理和视频编辑而开发的;因为这个原因,正常TGA格式的图像和NTSC和PAL视频格式中的图像是一致的。[2]通常,在PC中,TGA文件以.tga后缀结尾。TGA文件因为它的简单、容易实现而变得普遍起来。

reference: https://en.m.wikipedia.org/wiki/Truevision_TGA

二 结构分析

以FlexHEX分析具体图片为例:

project_use.tga

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.LengthField nameDescripton
11 byteID length 图像信息字段长度Length of the image ID field
21 byteColor map type 颜色表类型Whether a color map is included
31 byteImage type 图像类型Compression and color types
45 bytesColor map specification 颜色表规约Describes the color map
510 bytesImage specification 图像规约Image dimensions and format

 

1.1 ID Length 图像信息字段长度   ——   1 byte

这个字段规定了包含在字段6(Image ID字段)中的字节数,最大的字符数是255,它的值为0,则表示在这个文件中没有图像信息字段。

该图像此字节值为0,即该图像没有图像信息字段

 

1.2 Color Map Type 颜色表类型   ——   1 byte

当前已定义的有两个值0或者1,0 表示没有颜色表(color map),1 表示颜色表存在。

该图像此字节值为2,即该图像没有颜色表

 

1.3 Image Type 图像类型   ——   1 byte

TGA文件格式可以用于存储各种位深度的伪彩色,真彩色,调配色,目前定义的7种文件格式如下所示:

Map TypeDescription
0No Image Data included  
1Uncompressed, color-mapped image
2Uncompressed, true-color image
3Uncompressed, black-and-white image
9Run-length encoded, color-mapped image
10Run-length encoded, true-color image
11Run-length encoded, black-and-white image
该图像此字节值为2,即该图像类型为未压缩真彩图像

 

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
颜色表类型为0,故此处五字节为0

 

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,321 byte
Image Descriptor 图像描述符1 byte

 

00   0000   00DD   00E1   001800
  宽度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

 

149175字节 符合结果

 

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。

26 bytes的文件注脚

三 总结

 

 

四 参考

http://www.twinklingstar.cn/2013/471/tga-file-format/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值