【数据压缩】TGA文件格式分析

一、TGA文件格式简介

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格式支持压缩,使用不失真的压缩算法。

二、TGA文件结构

TGA原始文件结构(v1.0)由以下两个部分组成:文件头和图像/颜色表数据。TGA扩展文件结构(v2.0)由五部分组成:文件头、图像/颜色表数据、开发者自定义区域、扩展区域和文件尾。其中V2.0版本的文件头和图像/颜色表数据与V1.0保持一致。
1. 文件头(Tga File Header)
由图像描述信息字段长度、颜色表类型、图像类型、颜色表说明和图像说明五个字段组成,总计18字节,描述了图像存储的基本信息,应用程序可依据该部分字段值读写图像数据。
在这里插入图片描述
从下列TgaHeader结构体可以清楚了解文件头的结构。

typedef struct _TgaHeader{
  BYTE IDLength;        /* 00h  Size of Image ID field */
  BYTE ColorMapType;    /* 01h  Color map type */
  BYTE ImageType;       /* 02h  Image type code */
  WORD CMapStart;       /* 03h  Color map origin */
  WORD CMapLength;      /* 05h  Color map length */
  BYTE CMapDepth;       /* 07h  Depth of color map entries */
  WORD XOffset;         /* 08h  X origin of image */
  WORD YOffset;         /* 0Ah  Y origin of image */
  WORD Width;           /* 0Ch  Width of image */
  WORD Height;          /* 0Eh  Height of image */
  BYTE PixelDepth;      /* 10h  Image pixel size */
  BYTE ImageDescriptor; /* 11h  Image descriptor byte */
} TGAHEAD;

2. 图像/颜色表数据(Image/Color Map Data)
由图像描述信息(可选)、颜色表数据和图像数据三部分组成,用于存储图片的图像信息。
在这里插入图片描述
3.开发者自定义区域(Developer Area)
包含开发者定义字段列表和开发者字典(用于存储开发者定义字段的值),该区域为开发者扩展该文件格式提供接口,以便存储额外的信息。
4. 扩展区域(Extension Area)
由扩展区域大小、作者姓名、作者注释、日期/时间、工作名称/ID、工作累计耗时、编辑软件的名称、编辑软件的版本、关键颜色、像素宽高比、灰度值、颜色校正表偏移量、缩略图偏移量、扫描线表偏移量、alpha通道类型、扫描线表、缩略图图像数据和颜色校正表组成,为Truevision公司定义的标准扩展功能,以提供更多的图像附加信息。
5. 文件尾(TGA File Footer)
由扩展区域偏移量、开发者目录偏移量和TGA文件扩展格式签名三部分组成,用于验证TGA文件扩展格式,并可以确定扩展区域和开发者字典的位置。

三、图像数据说明

1.颜色存储

对于颜色的存储,TGA规定按整型数据存储,颜色值各分量在整型数据中的存储顺序从高到低为(A)RGB。以16位带alpha通道的颜色数据为例,可用2位无符号整型数据存储,内存中二进制表示为:arrrrrgg gggbbbbb,文件中二进制表示为:gggbbbbb arrrrrgg。

2.图像模式

未压缩的颜色表图像:这种类型的格式用于存储基于颜色表的图像(像素值用颜色索引表示),文件头中的颜色表类型(Field2)项的值必须为1,图像类型(Field3)必须为1。
未压缩的真彩色图像:这种类型的格式用于存储用(A)RGB值表示的像素数据,文件头中的颜色表类型(Field2)项的值必须为0,图像类型(Field3)必须为2。
未压缩的黑白图像:这种类型的格式用于存储灰度值表示的像素数据,文件头中的颜色表类型(Field2)项的值必须为0,图像类型(Field3)必须为3。
RLE压缩的颜色表图像:这种类型的格式用于存储基于颜色表的图像(像素值用颜色索引表示),存储数据时采用RLE压缩算法,文件头中的颜色表类型(Field2)项的值必须为1,图像类型(Field3)必须为9。
RLE压缩的真彩色图像:这种类型的格式用于存储用(A)RGB值表示的像素数据,存储数据时采用RLE压缩算法,文件头中的颜色表类型(Field2)项的值必须为0,图像类型(Field3)必须为10。
RLE压缩的黑白图像:这种类型的格式用于存储灰度值表示的像素数据,存储数据时采用RLE压缩算法,文件头中的颜色表类型(Field2)项的值必须为0,图像类型(Field3)必须为11。

3.行程压缩算法RLE

行程压缩算法RLE(Run-length encoded)是一种简单的无损资料压缩法,其好处是压缩和解压缩都非常快。RLE算法的基本思路是把数据按照线性序列分成两种情况:一种是连续的重复数据块,另一种是连续的不重复数据块,对其分别打包压缩。TGA格式中使用的RLE数据包定义如下:

连续的重复数据块打包
(Run-Length Packet)格式

在这里插入图片描述

连续的不重复数据块打包
(Non-Run-Length Packet)格式

在这里插入图片描述

四、TGA文件实例分析

准备工作:用格式工厂将下图转为tga格式后,用Visual Studio2022以二进制编辑器形式打开。
在这里插入图片描述
1. 文件头(Tga File Header)
在这里插入图片描述
各字节依次表示:
①无图像信息字段,1字节,00
②没有使用颜色表,1字节,00
③未压缩的真彩图像,1字节,02
④由于不含颜色表,表示颜色表规范的第4-8字节都为0
⑤x轴起始坐标为0,2字节,00;y轴起始坐标为0,2字节,00;
即从图像左下角原点开始
⑥图像宽度为180,2字节,B4;图像高度也为180,2字节,B4。
⑦图像每像素存储占用位数为24位,2字节,18

注:TGA文件格式中字段的字节存储次序采用Little-Endian的方式,即小端在前。这里每一部分的二进制存储是按低字节在前高字节在后。

2. 文件尾(TGA File Footer)**
在这里插入图片描述
各字节依次表示:
①无扩展区域,4字节,全为0
②无开发者自定义区域,4字节,全为0
③逐字节对应ASCII码的字符串为TRUEVISION-XFILE,则说明该TGA文件为v2.0的TGA扩展格式文件,16字节
④结束字符,对应ASCII码的“.”,1字节,2E
⑤文件结束符,1字节,00

3. 验证文件大小
在这里插入图片描述
文件显示为97,244字节,且图片尺寸为180×180。
通过分析二进制数据,可以计算得到文件大小:
18(文件头)+180×180×3(图像部分)+0+0(无扩展区域和开发在自定义区域+26(文件尾)=97244字节,符合文件显示。

五、总结

TGA文件格式的文件头和文件尾是固定的,媒体通过相应字段信息,可以实现对文件的交换、管理、编辑和呈现。
TGA文件格式通过在文件头规定图像和颜色表的基本信息,应用程序可依据字段值读写图像数据,实现媒体对文件的管理和编辑。
通过文字头的颜色表首地址可轻松获取用于呈现的图像数据,如实例图像为无颜色表的RGB图像,因为没有颜色表,所以偏移18个字节即可获取用于呈现的图像数据。
另外,文件尾规定了扩展区域和开发者定义区域的长度并提示文件的结束,便于媒体获取信息。


参考

TGA文件格式深度解析(一)
TGA File Format Summary
TGA图片格式解析

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值