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