从tga文件如何设计去提问题然后分析tga文件。
1、明确tga文件由几种文件类型,用哪个字段表示。
对所有的 TGA 格式的文件而言,其第三字节(二进制整数)用来区别各种不同的TGA 文件。
下面列出了该字节表明的对应文件类型:
0 - 文件中没有图像数据
1 - 未压缩的,颜色表图像
2 - 未压缩的,rgb 图像
3 - 未压缩的,黑白图像
9 - runlength 编码的颜色表图像
10 - runlength 编码的 rgb 图像
11 - 压缩的,黑白图像
32 - 使用 huffman,delta 和 runlength 编码的颜色表图像
33 - 使用 huffman,delta 和 runlength 编码的颜色映射图像,4趟四叉树类型处理。
2、用类型2来说明tga文件的文件分为几部分,每个部分都说明了什么信息。
数据类型 2: 无颜色表 rgb 图像
偏移 | 长度 | 描述 |
---|---|---|
0 | 1 | 图像信息字段( 见本子表的后面 )的字符数, 本字段是 1 字节无符号整型,指出了图像格式区别字段长度其取值范围是 0 到 255 ,当它为 0 时表示没有图像的信息字段。 |
1 | 1 | 颜色表类型:该字段的内容或者为 0 或者为 1;0 表示没有颜色表,1表示颜色表存在。由于本格式是无颜色表的,因此此项通常被忽略。提示:如果置为 1(targa绘画程序)将把边框颜色设置为映射中的第一种颜色 |
2 | 1 | 图像类型码:该字段总为 2 , 这也是此类型为格式 2 的原因 |
3 | 5 | 颜色表规格如果颜色表类型字段为 0 则被忽略;否则描述如下 |
3 | 2 | 颜色表首址 :颜色表首元入口的整型(低位-高位)索引 |
5 | 2 | 颜色表的长度:颜色表的表项总数,整型(低位-高位) |
7 | 1 | 颜色表表项的位(bit)数: 16代表16位TGA ,24 代表 24 位 TGA ,32 代表 32 位 TGA |
8 | 10 | 图像规格 |
8 | 2 | 图像 x 坐标起始位置:图像左下角 x 坐标的整型(低位-高位)值 |
10 | 2 | 图像 y 坐标起始位置: 图像左下角 y 坐标的整型(低位-高位)值 |
12 | 2 | 图像宽度 :以像素为单位,图像宽度的整型(低位-高位)值 |
14 | 2 | 图像高度:以像素为单位,图像高度的整型(低位-高位)值 |
16 | 1 | 图像每像素存储占用位(bit)数: 它的值为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 处值为 0),注意其最大可以含有 255个字符。如果需要存储更多信息,可以放在图像数据 之后 |
可变 | 可变 | 颜色表数据 :如果颜色表类型为 0,则该域不存在,否则越过该域直接读取,图像颜色表规格中描述了每项的字节数,为 2,3,4 之一 |
可变 | 可变 | 图像数据域:这里存储了(宽度)x(高度)个像素,每个像素中的 rgb色值,该色值包含整数个字节。3 字节表项中各字节依次对应BLUE,GREEN,RED;2 字节表项中,两个字节分解成如下形式: arrrrrgggggbbbbb,但是,由于低位在前,高位在后的存储顺序,从文件中读出表项时,将先读入 gggbbbbb 而后读入 arrrrrgg ;a 表示属性位;4 字节表项包含了分别代表 blue,green,red 及属性的四个字节;(由于硬件上的原因)有的时候 TGA 24类型的图像也象TGA 32 类型的图像那样存储 |
3、那些块是用来交换、管理、编辑、呈现的?
对于 数据类型 2即无颜色表 rgb 图像 来说,用来交换、管理和编辑的是:图像信息字段长度、颜色表类型、图像类型码、颜色表规格字段、图像规格字段、图像信息字段。
因为没有颜色表,所以偏移18个字节即可获取用于呈现的图像数据。