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