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