原文
* L+ y' y. O/ ]4 j; S3 ^http://dev.gameres.com/Program/Visual/Other/TGAFormat.htm
$ j4 C8 x% r/ c; ` 2 d3 \& k" U' P5 ~, N
根据david mcduffe编写的TGA文件格式资料翻译而成 B* P( I+ o4 C0 m
) N/ d, s& L, s, p- K u4 P, }8 z
本文档是为满足许多对 TGA 图像格式的了解需要而创建的。本文摘录自truevision 技术指南的附录 C,如果
# @& y$ V2 c- E! j h需要更进一步的信息,请致信以下地址:
( L4 c: G# x1 n, W$ b+ X* A
# ~2 ~4 n3 D! c5 y5 ^ at&t- M3 i) c; K( v8 q9 x
electronic photography and imaging center8 a; V/ a, Y q! r
2002 wellesley ave.3 C$ D, T7 @2 b0 m: y+ V7 M* R( n
indianapolis, in 42619
" t4 ^/ E. a- L3 b本文档不求全面,但力求准确。如果你发现了任何拼写错误或内容错误,请告诉我,( david mcduffe, ( p% S! d( A$ I! U2 R
75530,2626 ),我将改正这些错误,谢谢。
) |( `+ |% v( d6 n! X) G; e9 w$ F2 y
不全面的原因是 TGA 包含了超过六种图像文件格式,而其中的几种较为常用。 我选择了我现在使用的格式并9 [1 s6 h% Q4 o
在本文中加以详解。 如果你需要本文中没有包含的格式说明,你可以与你的 truevision 代理商联系。; I) W' W$ ]* }3 H, o; U% |
对所有的 TGA 格式的文件而言,其第三字节(二进制整数)用来区别各种不同的 TGA 文件。下面列出了该字
; z6 z3 O3 d5 ?+ R1 d, s1 @节表明的对应文件类型:
8 I# k% \9 A' B. n 0 - 文件中没有图像数据5 }; M: H6 l# k1 X% a7 S
1 - 未压缩的,颜色表图像
l1 x5 w; Q3 p" Q3 I* p& Z 2 - 未压缩的,rgb 图像: U9 O+ l, x9 J+ o" s, d$ T
3 - 未压缩的,黑白图像7 |3 ~: M j3 ~$ W" ]1 P5 T% m8 B
9 - runlength 编码的颜色表图像
: D7 T6 \# [0 H6 U. d7 Y; A 10 - runlength 编码的 rgb 图像
' w. |3 {1 P% j8 s 11 - 压缩的,黑白图像
1 D$ ^' C5 L( a" A 32 - 使用 huffman,delta 和 runlength 编码的颜色表图像/ Z- V4 V# `4 Q! w' [% z5 L
33 - 使用 huffman,delta 和 runlength 编码的颜色映射图像,4 趟四叉树类型处理。' e' o$ F+ t F$ @+ o
本文仅仅描述对应 1,2,9 和 10 的文件格式。
. k; t* b+ V. l( [
! U, w) b$ n2 M- n( \. h--------------------------------------------------------------------------------
( d, v' G6 E* ^7 j: T G|数据类型 1: 颜色表(color-mapped)图像8 q7 d+ a F: s. M/ Z* p
|--------|--------|------------------------------------------------------------
1 E% ?3 N ^ r* y: [- h| 偏移 | 长度 | 描述$ J; c! R4 R& O% V
|--------|--------|------------------------------------------------------------
1 x p5 J4 M: T6 `& A! D# {! L" P; d! T# R| 0 | 1 | 图像信息字段(见本子表的后面)的字符数
+ U) U c6 ?4 L9 K$ S| | |
1 b) O Y3 w( F4 L0 N. i. N| | | 本字段是 1 字节无符号整型,指出了图像格式区别字段长度 0 W1 D3 P9 K/ |% m7 K
| | | 其取值范围是 0 到 255 ,当它为 0 时表示没有图像的 9 T/ `1 _, l7 ^5 q0 A; ~
| | | 信息字段。 D% J+ O1 B# d
| | | : A$ o: g W9 |* |- d
| | | 7 e) e5 {' R, p% l
|--------|--------|------------------------------------------------------------5 j. T9 h- S: z* z& }
| 1 | 1 | 颜色表的类型
: m2 f, `6 z9 O# O; O Z d1 n| | | 9 ^ w' j$ a+ `% O) f, ]
| | | 该字段为表示对应格式 1 的图像而包含一个二进制 1
. x: f) E$ Y8 k, {| | | & j- @4 G' d" T) ^7 }8 S
|--------|--------|------------------------------------------------------------
7 a& @' O2 k! O% g; I2 M( o9 a| 2 | 1 | 图像类型码
0 L$ n) w5 M7 p, a4 d| | | 4 d; M! I8 F$ _
| | | 该字段总为 1 , 这也是此类型为格式 1 的原因
7 r# M9 K3 H/ I; S$ || | |
* K: u1 L/ A: k5 l' K) [5 _|--------|--------|------------------------------------------------------------3 n3 b3 C6 k) D: `' t
| 3 | 5 | 颜色表规格 * @" F6 X J$ q; g" x. v
| | | 0 ?. n0 z* f0 L8 x7 g$ a
| 3 | 2 | 颜色表首址
7 B8 a# E) _4 K' T3 R. ]; Z| | | 颜色表首元表项的整型(低位-高位)索引
+ N1 a8 S. R6 h Z, z* L) {| | |
5 O1 u3 Q) G5 d4 x) a| 5 | 2 | 颜色表的长度 1 s$ f( U& U" e
| | | 颜色表的表项总数,整型(低位-高位)
# C& u* ~$ |: ~( [( z| | |
8 Q* a1 `0 F& G0 p2 u" a| 7 | 1 | 颜色表表项的位(bit)数 7 p. C- [$ O& d
| | | 16 代表 16 位 TGA ,24 代表 24 位 TGA ,32 代表 32 位 TGA
) V; Z: s$ Y. v* M" S. g2 L| | | 1 R5 _8 g2 z' r/ D
| | | 5 V% p6 _! M; [% ]% r
|--------|--------|------------------------------------------------------------
, N) ]5 q7 g7 M* f" w4 l1 n& \% `| 8 | 10 | 图像规格 2 h: l9 ]1 k# c- ^
| | | 7 |1 `- q% R4 e) D ]7 ^$ y4 l3 G
| 8 | 2 | 图像 x 坐标起始位置 2 G: m) y( d' B% Z0 d. h$ ?6 r& t
| | | 图像左下角 x 坐标的整型(低位-高位)值
# Z; a2 i& b) h| | |
9 q0 L) N3 M) e| | |
% f& X& x- |5 C" W+ E! b( ]) I| 10 | 2 | 图像 y 坐标起始位置
6 \' O) U9 _ }4 K' k" v: |3 K; H| | | 图像左下角 y 坐标的整型(低位-高位)值 # z: @$ A3 q y2 e( I
| | | 2 Z# P; c0 Q7 S$ N) U4 J
| | | " K s- ~" O L8 i
| 12 | 2 | 图像宽度
4 g) h N& [. f9 q/ h( r8 o| | | 以像素为单位,图像宽度的整型(低位-高位)值
0 L. G. f3 Z/ D. e" P| | |
% T) C5 a! k! C+ U| 14 | 2 | 图像高度
8 r) X' F i% ~6 n| | | 以像素为单位,图像高度的整型(低位-高位)值 * A9 V) {9 M: }
| | | # x0 l! W) p. D) j
| 16 | 1 | 图像每像素存储占用位(bit)数 3 f, T& S7 x, _
| | |
- N5 n8 Y" {1 k3 V2 {8 U| | |
1 e& }8 \$ V. j3 a' J9 W" [| 17 | 1 | 图像描述符字节 9 F2 J1 c( X- f1 K8 D
| | | bits 3-0 - 每像素的属性位(bit)数 6 Z& J5 ~/ K; p) o
| | |
9 }# m5 ]) E& `( ~; n. o| | | bit 4 - 保留,必须为 0
0 `( _. M. K- ]: s) w# k| | | bit 5 - 屏幕起始位置标志 - s9 `+ d' \( {$ N9 p
| | | 0 = 原点在左下角 6 D7 Y. [( Y# q- m
| | | 1 = 原点在左上角 ' i% o1 @% u: `+ J6 S9 H) K8 i
| | | truevision 图像必须为 0
6 \5 R+ K4 K8 K5 V! C, t| | | bits 7-6 - 交叉数据存储标志 ' L& P5 B* t- z% C6 d
| | | 00 = 无交叉
1 z% G# U* s: t- A4 A" q2 ]8 ^0 z| | | 01 = 两路奇/偶交叉 ; T4 Y. p4 s f5 j3 E2 P3 V9 D
| | | 10 = 四路交叉
8 C$ D- ?& ]% C2 ?) j( h| | | 11 = 保留
8 ]7 j7 S* P$ x| | | 这一项应该设为 0,不要问我为什么
8 E4 h' W' C0 m8 || | |
/ S) L" G E" y* C|--------|--------|------------------------------------------------------------
/ [' C. b7 S; b! N% t) E7 `0 b| 18 | 可变 | 图像信息字段
: o3 u7 t5 m0 d) C9 u' \| | | 包含一个自由格式的,长度是图像记录块偏移 0 处的字节中的 - C7 \# ~& w" `9 j! u9 Y+ J( ?
| | | 值。它常常被忽略(即偏移 0 处值为 0 ),注意其最大可以 " j4 n K5 t4 s0 q2 z
| | | 含有 255 个字符。如果需要存储更多信息,可以放在图像数据
* A& ~$ q" G, c) X# u6 R" |' _6 N4 r| | | 之后 ) h( U) B3 ?! K
| | |
/ v2 i; |, i; ?: u9 ~| | | ! j6 P" N6 p' ]0 q/ w& }! r
|--------|--------|------------------------------------------------------------; g; j' p4 A8 H, R$ i
| 可变 | 可变 | 颜色表数据
+ B0 g! M' X7 |: ~) D; s V0 v| | | / N3 c) r% m) U$ H( R
| | | 起始位置由前一个字段的大小决定;其长度由单项数据大小
9 M$ M, w5 R# ]- b4 o$ Y| | | 和数据项数目决定(在前面相应的说明字段中给出) 1 i% k- U/ b3 c
| | | 每项是 2 字节,3 字节或 4 字节,字节中没有使用的位(bit) ) |0 n) Z# J% t) h" @/ n
| | | 被认为是属性位。
) _' c" V2 m6 \2 G4 v7 z% ^% ^| | | 2 h1 s; K5 X# f( x/ Z9 {9 v: O
| | | 4 字节表项中,字节 1 表示 BLUE,字节 2 表示 GREEN," @) v9 o) X$ l) R/ i [5 E! E
| | | 字节 3 表示 RED,字节 4 表示属性
; a7 W# d7 z$ [4 z1 ?8 |1 _| | | 3 字节表项中各字节依次对应 BLUE,GREEN,RED % h' o- u" _! A* _ N7 [
| | |
) l1 M& f9 n% ~# ?| | | 2 字节表项中,两个字节分解成如下形式: / d" h( b, E! \1 i1 {% w
| | | arrrrrgg gggbbbbb
9 E+ g1 y! @+ x8 R; D( b| | | 但是,由于低位在前,高位在后的存储顺序,从文件中读出表项 % l6 O8 y* ?# Y/ \8 l; }
| | | 时,将先读入 gggbbbbb 而后读入 arrrrrgg ;a 表示属性位。
, k$ @2 K3 ]0 y1 X| | | 4 \$ \/ `9 v, j- H
|--------|--------|------------------------------------------------------------
6 [. T, c, \( ?- M; Y7 f4 l| 可变 | 可变 | 图像数据字段
( `5 H9 N& y3 F8 F| | |
: Q# A0 p$ k' N3 s| | | 该字段给出了 (高度)x(宽度)个颜色表项索引,每个索引
V7 W% X' w3 ]8 |- ?; c% M5 N. ~5 Y* || | | 以整数个字节的形式存储(典型的例子如 1 或 2 个字节)
! ?% S* A# @& c" @, k9 b6 |! v& y0 ~| | | 所有的数据都没有符号,对于 2-字节表项而言,低位字节是
, \: j, F0 w! H# X/ p) \| | | 先存储的。 & q- B# l( Y. T; Q8 r1 K
| | | ; C! n# ?" z; k
-------------------------------------------------------------------------------; H; n1 k) u/ U
6 G/ |( B; G L0 d4 K+ f/ N6 t0 {9 T
) `; a# f! v$ a# F9 q! V+ ^. z: O$ p2 _; {! I; l* V0 L/ A3 P
--------------------------------------------------------------------------------5 y. R" V. r- {" p6 o' N
|数据类型 2: 无颜色表 rgb 图像
1 V0 t4 X3 }% F8 @% C|--------|--------|------------------------------------------------------------+ W1 R+ P) p1 z9 T9 V
| 偏移 | 长度 | 描述 5 B: S& c0 x5 N3 P# f! N
|--------|--------|----------------------------------------------------------: R0 u! _! {# F/ ~ @" q J8 q( C
| 0 | 1 | 图像信息字段( 见本子表的后面 )的字符数
; ?& [# d9 ]2 _8 P/ w| | | ) T; z, Y5 F# u7 x6 a
| | | 本字段是 1 字节无符号整型,指出了图像格式区别字段长度 w R t6 T& R! x, {
| | | 其取值范围是 0 到 255 ,当它为 0 时表示没有图像的- |) s6 O4 W- ^+ o) h3 f
| | | 信息字段。6 T/ j$ q: P& l# F4 ^' F
| | |( G+ U* t+ e) C" Q# Z
|--------|--------|------------------------------------------------------------
6 D* a: k2 T4 V4 y| 1 | 1 | 颜色表类型
4 _0 a$ Z6 A3 o/ i8 R( i. || | | ! s! L: W. s' s% k
| | | 该字段的内容或者为 0 或者为 1;0 表示没有颜色表,1 表示: Y) Q! |( T. y1 @
| | | 颜色表存在。由于本格式是无颜色表的,因此此项通常被忽略。, m* O: ?9 F; f1 l$ k' C
| | | 提示:如果置为 1(targa 绘画程序)将把边框颜色设置为映射! H% n/ h( v/ m& @
| | | 中的第一种颜色
, d a0 {8 Q7 j5 ~% k3 G| | | ) n' k4 ?4 |, C H
|--------|--------|------------------------------------------------------------
l# R% C1 J: |2 Y$ ?| 2 | 1 | 图像类型码
. y. e L& d& T$ M7 c6 [0 _+ ^8 G| | |
' [% ]5 C5 [. s# N7 a8 l0 X| | | 该字段总为 2 , 这也是此类型为格式 2 的原因 1 A2 y0 s5 f) N$ N9 O" `6 S3 ]
| | | + B8 L9 ~' r# ?; Y4 y" a; h
|--------|--------|------------------------------------------------------------' _8 g( t& N) w* g% q* X! n/ h0 n
| 3 | 5 | 颜色表规格$ h( A% G& k& |- @7 Z: E
| | | # |1 E- q5 }0 m' |. S. N; h
| | | 如果颜色表类型字段为 0 则被忽略;否则描述如下
R" u, F4 E9 Q# [| | | 1 A5 X4 ~6 C, A+ a! o& p* n
| 3 | 2 | 颜色表首址
+ y' P3 D! B3 y/ n# ~| | | 颜色表首元入口的整型(低位-高位)索引 A0 i* }4 X" y) T/ n B, ~, e! H
| | |
0 \! R- `% y% C) ]9 O# n| 5 | 2 | 颜色表的长度
/ F0 @* G9 d6 ], S# a* d# X& j1 u| | | 颜色表的表项总数,整型(低位-高位) . ^+ [5 d- O" z6 Z Z
| | |
7 h2 S% G1 v9 T" \/ c5 {| 7 | 1 | 颜色表表项的位(bit)数
b5 `0 U3 H5 r. n' T9 K; B% n| | | 16 代表 16 位 TGA ,24 代表 24 位 TGA ,32 代表 32 位 TGA
' C2 o/ ]# W, A T2 _$ n| | |
1 B- @ |1 U5 t, a' e, U; c2 x| | | + Z# ~5 V/ ]7 z5 n' |& V7 g
|--------|--------|------------------------------------------------------------9 }$ u5 E0 q! v7 ^% n6 D
| 8 | 10 | 图像规格. Z* ~! N7 s# E% J3 U, P- w
| | |
+ ~/ K, \) b% q8 }| 8 | 2 | 图像 x 坐标起始位置 " g4 R+ ^8 T, _
| | | 图像左下角 x 坐标的整型(低位-高位)值
( R" y- w% R$ m: ]| | |
( b# L5 l* N, d1 Q| | |% z9 ^8 ~ a, c8 M. w2 U. f% `
| 10 | 2 | 图像 y 坐标起始位置
; h! q( w$ y/ Q9 G- d| | | 图像左下角 y 坐标的整型(低位-高位)值
- w/ w2 u* O6 f$ R9 R| | | ! t. i8 I2 e. a$ G2 o4 z
| | |9 u& | Z" A" `+ E R
| 12 | 2 | 图像宽度
3 M8 ?0 ? i g8 q- i. t+ e4 @| | | 以像素为单位,图像宽度的整型(低位-高位)值
- D" B" E/ x9 ^| | | + |+ c1 L8 o) W$ S
| 14 | 2 | 图像高度6 E7 ^* F! @7 Y2 w4 r
| | | 以像素为单位,图像高度的整型(低位-高位)值+ t8 C/ H! o0 g& l
| | |( |# f5 \" N9 Z! J6 v* L! x3 j- y
| 16 | 1 | 图像每像素存储占用位(bit)数9 s @, ]; Z, N' K' d i9 ?
| | | 它的值为16,24 或 32 等等决定了该图像是 TGA 16,TGA24
7 x3 C& u' A7 n| | | TGA 32 等等' K6 R, H) I$ P1 c2 r( p
| | |
1 D3 o% g0 T5 n! d8 `| 17 | 1 | 图像描述符字节, I! |0 ^# M. T6 w) h4 @8 h' o: w
| | | bits 3-0 - 每像素对应的属性位的位数;对于 TGA 16,
" ]: r( [8 @0 X: w1 H# I| | | 该值为 0 或 1,对于 TGA 24,该值为 0,4 [. v5 m$ a7 w+ s$ n
| | | 对于 TGA 32,该值为 8+ ]3 f8 M" O- ]# V U( J& T4 \ K+ w
| | | . H9 J* M- B+ _0 [2 e {! X5 l# x+ k$ j
| | | bit 4 - 保留,必须为 07 `. j6 M. B5 M# R
| | | bit 5 - 屏幕起始位置标志/ |: c3 A; y/ j
| | | 0 = 原点在左下角
+ K1 @5 H# r2 T& t# Y| | | 1 = 原点在左上角
9 O! ?1 L" ?4 C9 G, i! Y| | | 对于 truevision 图像必须为 0
. n. k" {6 g0 m| | | bits 7-6 - 交叉数据存储标志+ c$ n1 [" m% o# | J1 s$ C4 h. W
| | | 00 = 无交叉
3 e6 z1 p. M. F, g2 b7 r| | | 01 = 两路奇/偶交叉 & n1 A8 f# Q( ?: a. I
| | | 10 = 四路交叉
+ D p8 |3 G6 s+ c- H* ?| | | 11 = 保留6 t$ k* I4 b& G% Q* W$ O) e+ {" G
| | |
6 d5 Y2 V) i' c, @3 u( X4 T|--------|--------|------------------------------------------------------------- l( z2 h7 |- G
| 18 | 可变 | 图像信息字段 5 n4 b3 R/ Z. U. L
| | | 包含一个自由格式的,长度是图像记录块偏移 0 处的字节中的
0 Y# r- y5 k7 h3 z X: b8 G6 h| | | 值。它常常被忽略(即偏移 0 处值为 0 ),注意其最大可以
) E2 g4 P. @. Q0 @) I: C' \| | | 含有 255 个字符。如果需要存储更多信息,可以放在图像数据
5 y: Q: y% r0 z7 V2 F8 {| | | 之后 0 N9 e$ h. b4 c
| | | M+ _; C! V1 ^
|--------|--------|------------------------------------------------------------& u3 t; @7 V f; z3 C& k
| 可变 | 可变 | 颜色表数据
. n) {7 d5 _: i2 m) ?. C5 C6 E# d0 K5 Y| | |
: g3 ` P* m3 s8 o& i| | | 如果颜色表类型为 0,则该域不存在,否则越过该域直接读取
4 i$ ~- K: `7 ?| | | 图像颜色表规格中描述了每项的字节数,为 2,3,4 之一) c& A! y3 Z2 H; L
| | |
2 ^. m" |. _3 |3 z4 g* m% K| | | 0 x: M7 ~! `4 R) E) t
| | |
# ]8 o' x. z0 A$ b! b| | | " Z1 a- ^5 h( ^' _( K' N
|--------|--------|------------------------------------------------------------
' z+ i6 v9 ?& }9 v1 l| 可变 | 可变 | 图像数据域& `+ M: d7 l/ x% ?% w* D/ n$ W* x
| | |
" O9 r. b( E( s( y8 L# T" ]| | | 这里存储了(宽度)x(高度)个像素,每个像素中的 rgb 色值4 }. x z' N: D- R" U' @1 b
| | | 该色值包含整数个字节* E% s, W1 }# A% |# |
| | |
5 Q9 P- Y3 }& q8 d| | | : ]9 r4 E; ]/ g8 b2 x( j. B
| | | 3 字节表项中各字节依次对应 BLUE,GREEN,RED ! c4 T7 z- `* x. w) V
| | | + ^8 W, d# O6 x9 `( Y5 z
| | | 2 字节表项中,两个字节分解成如下形式: ( ]7 m6 T4 |2 K; U& B U' I, ^
| | | arrrrrgg gggbbbbb
* N" \: P! Y& e+ w| | | 但是,由于低位在前,高位在后的存储顺序,从文件中读出表项 2 p& w1 @7 x9 M, G
| | | 时,将先读入 gggbbbbb 而后读入 arrrrrgg ;a 表示属性位* n+ O( T/ q- J
| | | " ~, \) q. U e' W! x. l, s
| | | 4 字节表项包含了分别代表 blue,green,red 及属性的四个& W3 p7 |$ g1 D5 S& m
| | | 字节;(由于硬件上的原因)有的时候 TGA 24 类型的图像也象1 `1 k( c$ {! L5 ^8 s- n! M# f; J
| | | TGA 32 类型的图像那样存储( O+ n" q4 _: D! ]
| | |
& d6 M: X1 L9 V| | | 2 D& w( q0 h( N# ~
--------------------------------------------------------------------------------, m% J; G# Z( p
* J' z* H$ A P5 R( ?; t! q
8 W7 i, ?7 _! j5 R. M
! D" n7 f) l9 m/ z; k! y
* b. O6 B/ k( Y V( q, b
--------------------------------------------------------------------------------
* k5 ]* X$ W; V|数据类型 9: runlength 编码,带颜色表的图像
0 p3 t! [3 w" e0 K4 a|--------|--------|------------------------------------------------------------- N3 F$ p4 y7 | t5 m' Z9 R7 j- S
| 偏移 | 长度 | 描述% a- ~7 I" x; `* H0 x; S
|--------|--------|------------------------------------------------------------
3 [7 w3 `5 M# A. O" E; I9 X6 M6 u| 0 | 1 | 图像信息字段(见本子表的后面)的字符数 + e. y( t5 a) r
| | |
1 u/ p2 z' _ o+ A$ @; n| | | 本字段是 1 字节无符号整型,指出了图像格式区别字段长度 ; l& S" ~5 A$ {
| | | 其取值范围是 0 到 255 ,当它为 0 时表示没有图像的
6 a$ k9 d/ M) x) ^6 i4 @: O| | | 信息字段。 % j3 E* |2 J; F9 Q, z+ q
| | |
; t/ ], {# J4 I U|--------|--------|------------------------------------------------------------5 @! q" @+ p9 I. ~
| 1 | 1 | 颜色表的类型
+ r0 I) q7 f: j; }| | |
, f" a- f2 v3 e: ^8 ^ b| | | 该字段为表示对应带颜色表的图像而总为 1
9 D9 {3 b) {3 I" D& W: A9 `| | |
8 f/ E& g; z: A|--------|--------|------------------------------------------------------------# }8 k' M$ r( s
| 2 | 1 | 图像类型码4 ]) c$ W: @+ k) {" n$ }. J) G" L
| | | . k _$ ]/ ]* ?% m; J7 X1 w
| | | 本类型该字段为二进制 92 O9 P! h) l) K2 A, z" m, X
| | | 0 I" u6 w, m; R
|--------|--------|------------------------------------------------------------
' s' O# G% `& [. [* S# x| 3 | 5 | 颜色表规格
$ x+ a% k6 C1 n+ r| | |
" y2 O& o! | u7 C9 k0 D0 n; T| | | 如果颜色表类型字段为 0 则被忽略;否则描述如下9 K; J! X+ L0 D5 O/ M
| | | , h2 G' u/ Q' i. f
| | | : ?1 l# \# a; C# G i) K; _
| 3 | 2 | 颜色表首址) U, S# |! z' ]0 V2 o
| | | 颜色表首元入口的整型(低位-高位)索引0 C: Q6 j0 j+ D6 V! v! h
| | | " v+ o8 H+ D$ R
| 5 | 2 | 颜色表的长度
: h% I6 n" R# \+ D+ G3 X| | | 颜色表的表项总数,整型(低位-高位)
/ o, h! F1 u3 C$ K4 K% m| | | " K. E- u: y7 b
| 7 | 1 | 颜色表表项的位(bit)数
. a3 y/ Y6 |9 S, v2 F# H. M| | | 16 代表 16 位 TGA ,24 代表 24 位 TGA ,32 代表 32 位 TGA
% _5 |* N4 q. a3 G) f| | | ; r- w! d1 }9 ^# {6 d2 Z% Y
|--------|--------|------------------------------------------------------------, O( d! W# a2 M" d" u, V! f
| 8 | 10 | 图像规格 : M& E9 y8 t" J! a+ I! Y2 N" S
| | |
& g4 x9 y5 x2 D| 8 | 2 | 图像 x 坐标起始位置
! H# G( w3 S$ s7 X: A( Z1 ^$ R1 v| | | 图像左下角 x 坐标的整型(低位-高位)值 8 [# u* V( q @: K
| | |
& ^7 c+ n. W: c0 G9 g, c; T6 N| | | ! @4 [+ J1 M H4 f6 ~
| 10 | 2 | 图像 y 坐标起始位置 : \: [9 g- G+ X8 m% d
| | | 图像左下角 y 坐标的整型(低位-高位)值 # }2 J% U$ i+ S: O+ E7 k/ S# z
| | | 2 L, f, f9 ^4 |9 w1 h" \! t
| | | ) _' B; Q& P8 B# d6 p# c
| 12 | 2 | 图像宽度
- S; t( | m7 H& W7 |0 O| | | 以像素为单位,图像宽度的整型(低位-高位)值 + n, r1 j! N- F X: O& m/ g
| | |
3 q, ~! b1 u/ l7 o) `3 \7 h| 14 | 2 | 图像高度 # F$ G3 M0 U+ V" p ?4 k' ~% n
| | | 以像素为单位,图像高度的整型(低位-高位)值 1 o6 d/ m# l. \& a, i7 x
| | | : {. _" k* U% o+ L0 c# f& _8 `) @
| 16 | 1 | 图像每像素存储占用位(bit)数 1 M; I$ s1 x/ V( w/ S
| | |
+ m7 A, A6 a# }| | |
: {6 a( i9 L/ L6 \5 m, a| 17 | 1 | 图像描述符字节 # Q/ x6 S& Q0 F% Z- g0 \
| | | bits 3-0 - 每像素的属性位(bit)数
5 ^: v( z! [* R$ y3 Y6 x" |# d4 O% D4 t| | | 8 @: v3 d! Q/ j- L- Z, t
| | | bit 4 - 保留,必须为 0
: o6 C: @9 A E, A! U| | | bit 5 - 屏幕起始位置标志
R$ |0 r3 x0 B( Z+ H* x| | | 0 = 原点在左下角 0 ]) q& c" Q3 N7 [( M
| | | 1 = 原点在左上角
/ k9 X" }2 ^& O- \| | | truevision 图像必须为 0 0 x0 \8 c' q* t# m6 G
| | | bits 7-6 - 交叉数据存储标志 . r- Q* e# P8 |" w7 \3 B
| | | 00 = 无交叉
0 X+ }4 w ~5 O [3 N& T| | | 01 = 两路奇/偶交叉
% q5 ?3 d" M a; N6 i) i, h7 c| | | 10 = 四路交叉
2 M$ u1 L2 a* l| | | 11 = 保留
2 T4 u9 k" N+ Y% Q/ g| | |
- O! m! e3 x# ?0 C|--------|--------|------------------------------------------------------------
9 z7 A6 W( R' X+ `+ S| 18 | 可变 | 图像信息字段
: }" G) ]2 p! d; ^0 H+ E8 H( {6 v| | | 包含一个自由格式的,长度是图像记录块偏移 0 处的字节中的 5 P! ^2 u+ |) t) ]. C! W, L
| | | 值。它常常被忽略(即偏移 0 处值为 0 ),注意其最大可以
5 \* j! z* J0 U" ]7 u| | | 含有 255 个字符。如果需要存储更多信息,可以放在图像数据 ! w Y6 O3 ^6 |* A! ~/ ^
| | | 之后. a y% M- M9 H
| | |
4 Z1 O( `9 F0 V1 }' Z Q# u|--------|--------|------------------------------------------------------------* p8 n% f% G& M& Y( a6 ^7 Z8 C
| 可变 | 可变 | 颜色表数据
" ^ J5 u# D* y5 v. s# \3 i| | | ; Y5 g1 r: {$ Y3 s1 @! h6 j
| | | 起始位置由前一个字段的大小决定;其长度由单项数据大小 : z; d& v7 ?' v# z& E
| | | 和数据项数目决定(在前面相应的说明字段中给出) - U6 h, t0 t( ]" l( y" g8 ]9 O
| | | 每项是 2 字节,3 字节或 4 字节,字节中没有使用的位(bit) 0 q4 C( H- F( ?, K& g, I
| | | 被认为是属性位。 7 k0 H# @) o/ m$ |+ P" x
| | |
! Z g) X$ V2 k( x# s| | | 4 字节表项中,字节 1 表示 BLUE,字节 2 表示 GREEN,, Y( l+ x5 i# ~, ^; @# M. y u
| | | 字节 3 表示 RED,字节 4 表示属性
7 S: a7 k6 F& M) z# y: ~| | | 3 字节表项中各字节依次对应 BLUE,GREEN,RED - Y% T9 e! E$ S$ ]& I4 b0 ^4 B" S
| | | % i( S3 S3 W. r4 t: @
| | | 2 字节表项中,两个字节分解成如下形式:
3 o5 q' P+ l8 I4 X0 g% T1 [6 N| | | arrrrrgg gggbbbbb
) s( H! b J* \% l2 a T3 f/ D# v| | | 但是,由于低位在前,高位在后的存储顺序,从文件中读出表项
1 |$ o: i; X! W$ S| | | 时,将先读入 gggbbbbb 而后读入 arrrrrgg ;a 表示属性位。
, K; ~# y& F& B: Q0 c7 `| | | ) {5 j. e3 r. Q+ K5 I0 c
|--------|--------|------------------------------------------------------------( V& F7 {, c' a t* B; D* U+ |
| 可变 | 可变 | 图像数据域
% {( L8 k. i+ \; m| | | l& r2 E- L9 i) H
| | | 本区域给出了(宽度)x(高度)个颜色表索引这些索引存放7 e8 j l/ Y" M* J8 @
| | | 在数据包中;有两中类型的数据包:run-length 数据包,
+ U$ X3 @7 g+ h9 T2 Y| | | 以及未加工的数据包,每种类型的数据包含有 1-字节的头信息,
/ I- b' |) a3 X$ x7 Q$ Z, m| | | (其中指出了数据包类型和数目),其后是可变长度的数据域' I' V: S) N! K; l/ z
| | | 头信息中最高位为 1 表示 run-length 类型的数据包,当( H/ a# b( m2 G' H+ _( L; d) P! T
| | | 它为 0 时,表示未加工的数据包
8 W8 t9 ~9 ~" W' P1 g/ v! }/ f| | | * I6 A. a! K) x" }- n4 K9 h& h3 J
| | | 对于 run-length 数据包,头信息含义如下
4 X6 F. a+ A: p$ B; R" O; x| | | __________________________________________________ 3 O9 d$ L1 F5 p9 G" N( D
| | | | 1 bit | 7 位的重复记数减一" ^/ t/ @5 B% |2 Z8 C! u6 U* `
| | | | id | 由于 7 位表示的最大值为 127,故最大 |
: a7 X0 A+ s6 \# W+ ]$ U! ]| | | | | 的运行大小为 128,(译注:原文为 |3 ^1 A$ e/ C e! u
| | | | | the largest run size) | 0 x* G7 f3 n' K$ h
| | | |-------|----------------------------------------|
8 E) f; ~, }: {* \* m% x| | | | 1 | c c c c c c c |
" O; \6 E, k& K5 R* Q1 w| | | --------------------------------------------------
9 l5 u: f! {# o2 k* I u| | |
, P* v" m! s3 L4 t3 n6 o8 o% T| | | 对于未加工数据包,头信息的含义如下2 [: C% J7 j. g5 i/ b' k4 p$ \2 r- f
| | | __________________________________________________
( T2 b* N8 c2 Y; Y| | | | 1 bit | 7 位的像素个数减一 |
# l: \+ i V9 B y$ g% `- W7 h| | | | id | 由于 7 位表示的最大值为 127,故该 |
0 j5 c) ~3 f5 I9 W* h| | | | | 类型的一个数据包中像素个数不能大于 |% y$ _* u) }/ i ^* b; i3 K) k
| | | | | 128 |7 O# y. z% j3 |# E+ k
| | | |-------|----------------------------------------|; P2 w+ ?. t) @$ p
| | | | 0 | n n n n n n n |* P6 i& d7 @: t! @7 R
| | | --------------------------------------------------' S9 l; J2 W v
| | |
) L2 }. y) I# J| | | 对于 run-length 数据包而言,头信息之后是一个简单的
2 \! c4 `6 b" q# }( Q' k6 @8 F| | | 颜色索引,且假定该索引被重复头信息中低 7 位表示的次数) ^* C1 v' M2 A2 _5 l a
| | | run-length 数据包也许会跨越扫描线' A; L' g# i% u7 N
| | | (扫描线起始于某行结束于下一行)/ e: g2 Q& d0 U4 N
| | | 2 E. S1 ^6 n# ?2 S: D/ B9 i
| | | 对于未加工的数据包,头信息之后是颜色索引(数值由头信息
7 y- D" j, o& M+ I0 H* p }) w| | | 给出)该类型的数据包也可能跨越扫描线
# U0 o: {( g4 N$ ~* R| | | 3 i; u: E: |0 }% g) e
--------------------------------------------------------------------------------, l P" q: Q# d( T) u+ Q& ~
* g$ b8 ]3 s2 f+ K9 F& E
& K, c! z# g, x8 u: u
. F. X$ r: r6 V- n. Y4 u
. [+ _7 W/ ^& j; [5 ]- V--------------------------------------------------------------------------------
1 O" n6 I s: X% g/ }1 c|数据类型 10:run length 编码,rgb 图像; }* G+ H% U! n; Y; y" `3 e. s( y
|--------|--------|------------------------------------------------------------
7 {4 W5 s: P- j1 t6 H& z% Q9 Z| 偏移 | 长度 | 描述 # Z+ S1 Q# w. R3 m4 \
|--------|--------|------------------------------------------------------------: n, P9 [( N7 Q e+ t, e
| 0 | 1 | 图像信息字段(见本子表的后面)的字符数 8 x- e- C, ]3 } }+ _
| | |
$ X* n! t. k+ i1 y' Z) F( n| | | 本字段是 1 字节无符号整型,指出了图像格式区别字段长度 - L/ u- \1 @* L2 [9 M! A* p/ W
| | | 其取值范围是 0 到 255 ,当它为 0 时表示没有图像的
2 l; J( S! V' R& Z3 K, {6 [| | | 信息字段。
, D+ s! }7 n% Y" ?( n| | |
. E `/ |" Y N; d5 E8 L4 K|--------|--------|------------------------------------------------------------; R: M! s7 s4 W
| 1 | 1 | 该字段的内容或者为 0 或者为 1;0 表示没有颜色表,1 表示
5 j% z0 X$ G7 x| | | 颜色表存在。由于本格式是无颜色表的,因此此项通常被忽略。
8 l- p/ y0 [! M* \: y| | | 提示:如果置为 1(targa 绘画程序)将把边框颜色设置为映射8 M5 ~ z$ c! x" N7 h: K: z
| | | 中的第一种颜色
; F' Q* H: e; g| | |
$ W( l: ~$ F6 t1 T$ A9 `|--------|--------|------------------------------------------------------------* P. ~9 C/ c) L& y- N
| 2 | 1 | 图像类型代码, g* y! T5 @6 x. j3 K0 P* o S+ R: e
| | |
$ L" B; ^$ J4 V) G- ?4 N. U( \| | | 本类型该字段为二进制 10 y8 C {. t2 I6 ^
| | | I5 I1 J1 D& a: ^
|--------|--------|------------------------------------------------------------
7 u) V' b* k* t/ X) c- d+ y1 R| 3 | 5 | 颜色表规格8 r- B/ G b/ P
| | |
; W; L3 a. Z+ q7 K| | | 如果颜色表类型字段为 0 则被忽略;否则描述如下
/ n6 v; b, ~& G) q8 m) S2 H- W| | |
: H6 ~5 l0 }& C# P# V- [. _| | |
% ^: V& t$ x f2 x4 ~| 3 | 2 | 颜色表首址) O2 b+ J! @+ @& M
| | | 颜色表首元入口的整型(低位-高位)索引
$ J' M' A! `* g' |$ n| | | , F+ b# s( X6 Q: E: ^
| 5 | 2 | 颜色表的长度9 W: C2 ]5 X" K! q# a' b
| | | 颜色表的表项总数,整型(低位-高位) & l8 T! U7 D$ \* u
| | | ; z5 w1 n0 `! l3 l: N- {
| 7 | 1 | 颜色表表项的位(bit)数9 { `5 P5 g+ B5 p2 a3 j
| | | 16 代表 16 位 TGA ,24 代表 24 位 TGA ,32 代表 32 位 TGA
1 w' r7 U, \/ n9 N| | |
/ o+ b) f8 ]8 C- B* Q|--------|--------|------------------------------------------------------------7 O3 o( V5 P! `
| 8 | 10 | 图像规格 ' h0 F. b/ l- i: Y U
| | |
* C/ I! e+ H9 y( F8 ?" p| 8 | 2 | 图像 x 坐标起始位置
. E+ ^5 K2 U* X8 m \ o| | | 图像左下角 x 坐标的整型(低位-高位)值 ' Q7 n% }1 w7 n) O& R' r
| | | 5 {( g B( u- a# G1 c
| | |
: a0 ? |3 B t# d| 10 | 2 | 图像 y 坐标起始位置
; M i+ X6 @8 @" ~4 W| | | 图像左下角 y 坐标的整型(低位-高位)值
; I+ W: v& R! H1 P. I* N1 ?* q! Q| | |
' u z) I6 f/ L+ F2 f$ u2 k1 N) K| | |
% @" p$ `; J( G3 a! C| 12 | 2 | 图像宽度 , n. w. Q' ^8 @* m: q K; S
| | | 以像素为单位,图像宽度的整型(低位-高位)值
/ O1 n2 m% D& j| | |
f( K7 n0 H& z| 14 | 2 | 图像高度
m; g& E- t0 M( n' q! y9 _- \| | | 以像素为单位,图像高度的整型(低位-高位)值 4 q& W4 J! x& x4 m
| | |
* U6 Y" _7 K5 b' O8 P5 w! T8 T| 16 | 1 | 图像每像素存储占用位(bit)数
$ v) A& P/ n! [/ O" H| | | , [4 V5 i& r2 k
| | |
/ f) P i3 _6 T" H' r' L| 17 | 1 | 图像描述符字节
! y! ?3 I5 g8 V; y| | | bits 3-0 - 每像素的属性位(bit)数 & \( `7 ]; U, p& T
| | | % H# ?5 c; T6 H7 R; A2 N
| | | bit 4 - 保留,必须为 0
) n. ]8 J* k- E9 n0 S% X6 i6 X| | | bit 5 - 屏幕起始位置标志
: R# m/ h) J8 ^. w1 R| | | 0 = 原点在左下角 # ]$ E, `! C3 L4 c1 p$ v2 c+ p
| | | 1 = 原点在左上角 * z+ v/ G% l2 {- R- S/ G
| | | truevision 图像必须为 0 0 H! d: J% Y- K e+ k' O$ \: u
| | | bits 7-6 - 交叉数据存储标志
& U8 t6 [5 v G) E* c6 M H( ^3 Y| | | 00 = 无交叉
. n( `3 \$ K* ~5 w: q- _| | | 01 = 两路奇/偶交叉
9 d& z& `: J4 t% K2 p' e| | | 10 = 四路交叉 / z- i+ R8 A3 s' x" q
| | | 11 = 保留
% v; K% b( U# E1 U d| | | ! b. }4 s( ]% i
|--------|--------|------------------------------------------------------------8 F Q) h% M3 e! v V
| 18 | 可变 | 图像信息字段
6 m8 Z, s5 ~5 G: ~# n% I# d! r| | | 包含一个自由格式的,长度是图像记录块偏移 0 处的字节中的
! S5 P3 F8 }% O) R" || | | 值。它常常被忽略(即偏移 0 处值为 0 ),注意其最大可以
/ `; b S8 m# m! H% u| | | 含有 255 个字符。如果需要存储更多信息,可以放在图像数据 m/ }6 W9 O4 \$ F; d
| | | 之后
. b' f+ @9 N6 z& x| | |
. ?1 o6 y. L' M7 ]; X|--------|--------|------------------------------------------------------------; v+ d5 F- n9 q( e) b1 [4 g% _# l" f
| 可变 | 可变 | 颜色表数据
* q9 t, q! d+ Z d| | |
0 P; w0 W. g$ ]6 C5 P8 g| | | 如果颜色表类型为 0,则该域不存在,否则越过该域直接读取, _. n' n2 M/ x/ U
| | | 图像颜色表规格中描述了每项的字节数,为 2,3,4 之一
) C: ?! c+ @" J0 ]| | | ) g: R& A, Z$ l; `- p6 j1 o
|--------|--------|------------------------------------------------------------
A1 F- P6 J4 b% g| 可变 | 可变 | 图像数据域
$ W n' T1 g+ T4 j- ~5 \; P* {" S) L& L| | | ( C# S* C3 C! g2 c0 X3 P8 Y7 n
| | | 本区域给出了(宽度)x(高度)个颜色表索引这些索引存放/ O B9 I1 W, G1 g% w
| | | 在数据包中;有两中类型的数据包:run-length 数据包,5 W5 V8 v+ V" k
| | | 以及未加工的数据包,每种类型的数据包含有 1-字节的头信息,
: {# e; I5 w6 o2 W3 l+ K| | | (其中指出了数据包类型和数目),其后是可变长度的数据域4 M. V- j' [- @5 X& z3 v
| | | 头信息中最高位为 1 表示 run-length 类型的数据包,当
' |; b1 a' A( e+ Z: g; p| | | 它为 0 时,表示未加工的数据包
8 [3 t* [# _* V* ^| | | 4 h7 r8 `. @$ z2 J @6 e c
| | | 对于 run-length 数据包,头信息含义如下- R8 W8 o5 p* a9 z3 S9 L, a4 f
| | | __________________________________________________ : ~4 N8 m% U! M3 z
| | | | 1 bit | 7 位的重复记数减一
2 z7 J# s2 Z6 G, g| | | | id | 由于 7 位表示的最大值为 127,故最大 |
* Z- E- d7 M- V* x; U9 G' f| | | | | 的运行大小为 128,(译注:原文为 |0 K! O$ D5 `# ]3 @5 g+ A3 k
| | | | | the largest run size) | 9 e& L7 e4 J5 f" W& ~# B
| | | |-------|----------------------------------------|/ X, i0 q/ g8 B, m* B* u
| | | | 1 | c c c c c c c |- u5 t$ h" m+ K, R5 Y- g# J& L3 \( s
| | | --------------------------------------------------
( h9 L8 m8 @2 d$ z5 E0 V4 H6 ^| | | + R: N* ?8 k6 p4 A
| | | 对于未加工数据包,头信息的含义如下
* N1 N# y) D |$ d$ U| | | __________________________________________________+ c9 Y! S a8 o! {* f
| | | | 1 bit | 7 位的像素个数减一 |
% C: e' W* [) x# w| | | | id | 由于 7 位表示的最大值为 127,故该 |( L" n1 k6 l& P" q1 L9 I
| | | | | 类型的一个数据包中像素个数不能大于 |
3 E; Y3 r4 x) B p. ~1 }+ {6 R| | | | | 128 |. L! O+ z2 _ }. N9 D0 Z
| | | |-------|----------------------------------------|
4 Y6 p8 d% L& _, ], T- p% e& t| | | | 0 | n n n n n n n |
* D h1 o2 g9 j4 A' ]| | | --------------------------------------------------
( p* X/ j, |7 }) A| | | 8 }0 D+ ?, \4 H6 _# r' V" J( `
| | | 2 r2 b& }; h' h* I; @/ E, M: \. |& @
| | | 对于 run length 数据包,头信息之后是一个简单颜色值,) P4 N# z. K, s1 u& M: T1 M/ K" h
| | | 且假定该值重复的次数为头信息中记录的数
! n9 \; Z# N* Q0 C1 H# B; _| | | run-length 数据包也许会跨越扫描线
4 ~3 j: c, d V+ b) `| | | (扫描线起始于某行结束于下一行)
X) l" Q4 d7 b5 i) D| | |
0 i$ w. ?4 E4 E: r2 t| | | 对于未加工数据包,头信息之后是颜色值(数目由头信息指出)
1 U0 ?& d" q* [8 E f: a( i9 v| | | 9 R' j+ O( m0 O0 `1 p9 [$ \9 J9 v
| | | - ^! a; h& L: P. V4 y$ F8 w
| | | 颜色表项自身有 2-字节,3-字节或 4-字节几种大小(分别8 `' P& C& P7 e! u% P' P
| | | 对应 TGA 16,TGA 24 和 TGA 32)形式如下:
3 B) n" S: b6 J- o) n6 S| | |
7 d# o6 L0 ]2 f) s| | | ' r& ~( n0 C# T
| | | 3 字节表项中各字节依次对应 BLUE,GREEN,RED 8 t! F% o% I( C
| | | 1 @: R: O, a: ^2 q+ E7 D. c
| | | 2 字节表项中,两个字节分解成如下形式: n" K, [9 i1 W: h: C
| | | arrrrrgg gggbbbbb
. o' z9 F1 {# t1 Q| | | 但是,由于低位在前,高位在后的存储顺序,从文件中读出表项
# Z7 O6 k x8 `, k% ~| | | 时,将先读入 gggbbbbb 而后读入 arrrrrgg ;a 表示属性位' v- a$ ~$ H" @& z
| | |
) C3 R$ D0 a. Y# K# t/ K4 v| | | 4 字节表项包含了分别代表 blue,green,red 及属性的四个, ^3 z& d# C0 D9 g
| | | 字节;(由于硬件上的原因)有的时候 TGA 24 类型的图像也象
% C! t* i& b9 X# Z0 m| | | TGA 32 类型的图像那样存储
- ?( ^! h* c) O| | |
' O4 ~4 o" A0 ^: K* }4 n--------------------------------------------------------------------------------3 B6 V- V6 {4 {7 c# Y
" ?7 W) D6 |" S2 R2 k<完> |