c++初学者

专注技术开发

[转]TGA图像文件格式资料

根据david mcduffe编写的TGA文件格式资料翻译而成
 
本文档是为满足许多对 TGA 图像格式的了解需要而创建的。本文摘录自truevision 技术指南的附录 C,如果
需要更进一步的信息,请致信以下地址:
at&t
electronic photography and imaging center
2002 wellesley ave.
indianapolis, in 42619
本文档不求全面,但力求准确。如果你发现了任何拼写错误或内容错误,请告诉我,( david mcduffe,
75530,2626 ),我将改正这些错误,谢谢。
不全面的原因是 TGA 包含了超过六种图像文件格式,而其中的几种较为常用。 我选择了我现在使用的格式并
在本文中加以详解。 如果你需要本文中没有包含的格式说明,你可以与你的 truevision 代理商联系。
对所有的 TGA 格式的文件而言,其第三字节(二进制整数)用来区别各种不同的 TGA 文件。下面列出了该字
节表明的对应文件类型:
	0  -  文件中没有图像数据
	1  -  未压缩的,颜色表图像
	2  -  未压缩的,rgb 图像
	3  -  未压缩的,黑白图像
	9  -  runlength 编码的颜色表图像
	10 -  runlength 编码的 rgb 图像
	11 -  压缩的,黑白图像
	32 -  使用 huffman,delta 和 runlength 编码的颜色表图像
	33 -  使用 huffman,delta 和 runlength 编码的颜色映射图像,4 趟四叉树类型处理。
	本文仅仅描述对应 1,2,9 和 10 的文件格式。
--------------------------------------------------------------------------------
|数据类型 1: 颜色表(color-mapped)图像
|--------|--------|------------------------------------------------------------
|  偏移  |  长度  |                            描述
|--------|--------|------------------------------------------------------------
|    0   |     1  |  图像信息字段(见本子表的后面)的字符数
|        |        |
|        |        |  本字段是 1 字节无符号整型,指出了图像格式区别字段长度
|        |        |  其取值范围是 0 到 255 ,当它为 0 时表示没有图像的
|        |        |  信息字段。
|        |        |
|        |        |
|--------|--------|------------------------------------------------------------
|    1   |     1  |  颜色表的类型
|        |        |
|        |        |  该字段为表示对应格式 1 的图像而包含一个二进制 1
|        |        |
|--------|--------|------------------------------------------------------------
|    2   |     1  |  图像类型码
|        |        |
|        |        |  该字段总为 1 , 这也是此类型为格式 1 的原因
|        |        |
|--------|--------|------------------------------------------------------------
|    3   |     5  |  颜色表规格
|        |        |
|    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)数
|        |        |
|        |        |
|   17   |     1  |  图像描述符字节
|        |        |  bits 3-0 - 每像素的属性位(bit)数
|        |        |
|        |        |  bit 4    - 保留,必须为 0
|        |        |  bit 5    - 屏幕起始位置标志
|        |        |             0 = 原点在左下角
|        |        |             1 = 原点在左上角
|        |        |             truevision 图像必须为 0
|        |        |  bits 7-6 - 交叉数据存储标志
|        |        |             00 = 无交叉
|        |        |             01 = 两路奇/偶交叉
|        |        |             10 = 四路交叉
|        |        |             11 = 保留
|        |        |  这一项应该设为 0,不要问我为什么
|        |        |
|--------|--------|------------------------------------------------------------
|   18   |  可变  |  图像信息字段
|        |        |  包含一个自由格式的,长度是图像记录块偏移 0 处的字节中的
|        |        |  值。它常常被忽略(即偏移 0 处值为 0 ),注意其最大可以
|        |        |  含有 255 个字符。如果需要存储更多信息,可以放在图像数据
|        |        |  之后
|        |        |
|        |        |
|--------|--------|------------------------------------------------------------
|  可变  |  可变  |  颜色表数据
|        |        |
|        |        |  起始位置由前一个字段的大小决定;其长度由单项数据大小
|        |        |  和数据项数目决定(在前面相应的说明字段中给出)
|        |        |  每项是 2 字节,3 字节或 4 字节,字节中没有使用的位(bit)
|        |        |  被认为是属性位。
|        |        |
|        |        |  4 字节表项中,字节 1 表示 BLUE,字节 2 表示 GREEN,
|        |        |  		    字节 3 表示 RED,字节 4 表示属性
|        |        |  3 字节表项中各字节依次对应 BLUE,GREEN,RED
|        |        |
|        |        |  2 字节表项中,两个字节分解成如下形式:
|        |        |  arrrrrgg gggbbbbb
|        |        |  但是,由于低位在前,高位在后的存储顺序,从文件中读出表项
|        |        |  时,将先读入 gggbbbbb 而后读入 arrrrrgg ;a 表示属性位。
|        |        |
|--------|--------|------------------------------------------------------------
|  可变  |  可变  |  图像数据字段
|        |        |
|        |        |  该字段给出了 (高度)x(宽度)个颜色表项索引,每个索引
|        |        |  以整数个字节的形式存储(典型的例子如 1 或 2 个字节)
|        |        |  所有的数据都没有符号,对于 2-字节表项而言,低位字节是
|        |        |  先存储的。
|        |        |
-------------------------------------------------------------------------------
--------------------------------------------------------------------------------
|数据类型 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 字节表项中,两个字节分解成如下形式:
|        |        |  arrrrrgg gggbbbbb
|        |        |  但是,由于低位在前,高位在后的存储顺序,从文件中读出表项
|        |        |  时,将先读入 gggbbbbb 而后读入 arrrrrgg ;a 表示属性位
|        |        |
|        |        |  4 字节表项包含了分别代表 blue,green,red 及属性的四个
|        |        |  字节;(由于硬件上的原因)有的时候 TGA 24 类型的图像也象
|        |        |  TGA 32 类型的图像那样存储
|        |        |
|        |        |
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
|数据类型 9:  runlength 编码,带颜色表的图像
|--------|--------|------------------------------------------------------------
|  偏移  |  长度  |                            描述
|--------|--------|------------------------------------------------------------
|    0   |     1  |  图像信息字段(见本子表的后面)的字符数
|        |        |
|        |        |  本字段是 1 字节无符号整型,指出了图像格式区别字段长度
|        |        |  其取值范围是 0 到 255 ,当它为 0 时表示没有图像的
|        |        |  信息字段。
|        |        |
|--------|--------|------------------------------------------------------------
|    1   |     1  |  颜色表的类型
|        |        |
|        |        |  该字段为表示对应带颜色表的图像而总为 1
|        |        |
|--------|--------|------------------------------------------------------------
|    2   |     1  |  图像类型码
|        |        |
|        |        |  本类型该字段为二进制 9
|        |        |
|--------|--------|------------------------------------------------------------
|    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)数
|        |        |
|        |        |
|   17   |     1  |  图像描述符字节
|        |        |  bits 3-0 - 每像素的属性位(bit)数
|        |        |
|        |        |  bit 4    - 保留,必须为 0
|        |        |  bit 5    - 屏幕起始位置标志
|        |        |             0 = 原点在左下角
|        |        |             1 = 原点在左上角
|        |        |             truevision 图像必须为 0
|        |        |  bits 7-6 - 交叉数据存储标志
|        |        |             00 = 无交叉
|        |        |             01 = 两路奇/偶交叉
|        |        |             10 = 四路交叉
|        |        |             11 = 保留
|        |        |
|--------|--------|------------------------------------------------------------
|   18   | 可变   |  图像信息字段
|        |        |  包含一个自由格式的,长度是图像记录块偏移 0 处的字节中的
|        |        |  值。它常常被忽略(即偏移 0 处值为 0 ),注意其最大可以
|        |        |  含有 255 个字符。如果需要存储更多信息,可以放在图像数据
|        |        |  之后
|        |        |
|--------|--------|------------------------------------------------------------
|  可变  |  可变  |  颜色表数据
|        |        |
|        |        |  起始位置由前一个字段的大小决定;其长度由单项数据大小
|        |        |  和数据项数目决定(在前面相应的说明字段中给出)
|        |        |  每项是 2 字节,3 字节或 4 字节,字节中没有使用的位(bit)
|        |        |  被认为是属性位。
|        |        |
|        |        |  4 字节表项中,字节 1 表示 BLUE,字节 2 表示 GREEN,
|        |        |  		    字节 3 表示 RED,字节 4 表示属性
|        |        |  3 字节表项中各字节依次对应 BLUE,GREEN,RED
|        |        |
|        |        |  2 字节表项中,两个字节分解成如下形式:
|        |        |  arrrrrgg gggbbbbb
|        |        |  但是,由于低位在前,高位在后的存储顺序,从文件中读出表项
|        |        |  时,将先读入 gggbbbbb 而后读入 arrrrrgg ;a 表示属性位。
|        |        |
|--------|--------|------------------------------------------------------------
| 可变   |  可变  |  图像数据域
|        |        |
|        |        |  本区域给出了(宽度)x(高度)个颜色表索引这些索引存放
|        |        |  在数据包中;有两中类型的数据包:run-length 数据包,
|        |        |  以及未加工的数据包,每种类型的数据包含有 1-字节的头信息,
|        |        |  (其中指出了数据包类型和数目),其后是可变长度的数据域
|        |        |  头信息中最高位为 1 表示 run-length 类型的数据包,当
|        |        |  它为 0 时,表示未加工的数据包
|        |        |
|        |        |  对于 run-length 数据包,头信息含义如下
|        |        |      __________________________________________________
|        |        |      | 1 bit |   7 位的重复记数减一
|        |        |      |   id  |   由于 7 位表示的最大值为 127,故最大  |
|        |        |      |       |   的运行大小为 128,(译注:原文为     |
|        |        |      |       |   the largest run size)          |
|        |        |      |-------|----------------------------------------|
|        |        |      |   1   |  c     c     c     c     c     c    c  |
|        |        |      --------------------------------------------------
|        |        |
|        |        |  对于未加工数据包,头信息的含义如下
|        |        |      __________________________________________________
|        |        |      | 1 bit |   7 位的像素个数减一                   |
|        |        |      |   id  |   由于 7 位表示的最大值为 127,故该    |
|        |        |      |       |   类型的一个数据包中像素个数不能大于   |
|        |        |      |       |   128                                  |
|        |        |      |-------|----------------------------------------|
|        |        |      |   0   |  n     n     n     n     n     n    n  |
|        |        |      --------------------------------------------------
|        |        |
|        |        |  对于 run-length 数据包而言,头信息之后是一个简单的
|        |        |  颜色索引,且假定该索引被重复头信息中低 7 位表示的次数
|        |        |  run-length 数据包也许会跨越扫描线
|        |        |  (扫描线起始于某行结束于下一行)
|        |        |
|        |        |  对于未加工的数据包,头信息之后是颜色索引(数值由头信息
|        |        |  给出)该类型的数据包也可能跨越扫描线
|        |        |
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
|数据类型 10:run length 编码,rgb 图像
|--------|--------|------------------------------------------------------------
|   偏移 |   长度 |                         描述
|--------|--------|------------------------------------------------------------
|    0   |     1  |  图像信息字段(见本子表的后面)的字符数
|        |        |
|        |        |  本字段是 1 字节无符号整型,指出了图像格式区别字段长度
|        |        |  其取值范围是 0 到 255 ,当它为 0 时表示没有图像的
|        |        |  信息字段。
|        |        |
|--------|--------|------------------------------------------------------------
|    1   |     1  |  该字段的内容或者为 0 或者为 1;0 表示没有颜色表,1 表示
|        |        |  颜色表存在。由于本格式是无颜色表的,因此此项通常被忽略。
|        |        |  提示:如果置为 1(targa 绘画程序)将把边框颜色设置为映射
|        |        |        中的第一种颜色
|        |        |
|--------|--------|------------------------------------------------------------
|    2   |     1  |  图像类型代码
|        |        |
|        |        |  本类型该字段为二进制 10
|        |        |
|--------|--------|------------------------------------------------------------
|    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)数
|        |        |
|        |        |
|   17   |     1  |  图像描述符字节
|        |        |  bits 3-0 - 每像素的属性位(bit)数
|        |        |
|        |        |  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(高度)个颜色表索引这些索引存放
|        |        |  在数据包中;有两中类型的数据包:run-length 数据包,
|        |        |  以及未加工的数据包,每种类型的数据包含有 1-字节的头信息,
|        |        |  (其中指出了数据包类型和数目),其后是可变长度的数据域
|        |        |  头信息中最高位为 1 表示 run-length 类型的数据包,当
|        |        |  它为 0 时,表示未加工的数据包
|        |        |
|        |        |  对于 run-length 数据包,头信息含义如下
|        |        |      __________________________________________________
|        |        |      | 1 bit |   7 位的重复记数减一
|        |        |      |   id  |   由于 7 位表示的最大值为 127,故最大  |
|        |        |      |       |   的运行大小为 128,(译注:原文为     |
|        |        |      |       |   the largest run size)          |
|        |        |      |-------|----------------------------------------|
|        |        |      |   1   |  c     c     c     c     c     c    c  |
|        |        |      --------------------------------------------------
|        |        |
|        |        |  对于未加工数据包,头信息的含义如下
|        |        |      __________________________________________________
|        |        |      | 1 bit |   7 位的像素个数减一                   |
|        |        |      |   id  |   由于 7 位表示的最大值为 127,故该    |
|        |        |      |       |   类型的一个数据包中像素个数不能大于   |
|        |        |      |       |   128                                  |
|        |        |      |-------|----------------------------------------|
|        |        |      |   0   |  n     n     n     n     n     n    n  |
|        |        |      --------------------------------------------------
|        |        |
|        |        |
|        |        |  对于 run length 数据包,头信息之后是一个简单颜色值,
|        |        |  且假定该值重复的次数为头信息中记录的数
|        |        |  run-length 数据包也许会跨越扫描线
|        |        |  (扫描线起始于某行结束于下一行)
|        |        |
|        |        |  对于未加工数据包,头信息之后是颜色值(数目由头信息指出)
|        |        |
|        |        |
|        |        |  颜色表项自身有 2-字节,3-字节或 4-字节几种大小(分别
|        |        |  对应 TGA 16,TGA 24 和 TGA 32)形式如下:
|        |        |
|        |        |
|        |        |  3 字节表项中各字节依次对应 BLUE,GREEN,RED
|        |        |
|        |        |  2 字节表项中,两个字节分解成如下形式:
|        |        |  arrrrrgg gggbbbbb
|        |        |  但是,由于低位在前,高位在后的存储顺序,从文件中读出表项
|        |        |  时,将先读入 gggbbbbb 而后读入 arrrrrgg ;a 表示属性位
|        |        |
|        |        |  4 字节表项包含了分别代表 blue,green,red 及属性的四个
|        |        |  字节;(由于硬件上的原因)有的时候 TGA 24 类型的图像也象
|        |        |  TGA 32 类型的图像那样存储
|        |        |
--------------------------------------------------------------------------------

posted on 2008-12-26 18:12 大海 阅读(1007) 评论(0)  编辑 收藏 引用 所属分类: 图像


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理