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