FiberVISH 0.2
Fish - The Fiber Bundle API for the Vish Visualization Shell
TGA.hpp
1#ifndef __TGA_HPP
2#define __TGA_HPP
3
4struct TGA
5{
6 unsigned char commentlen,maptype,filetype;
7 unsigned short maporg,maplen;
8 unsigned char mapsize;
9 unsigned short Xorigin,Yorigin,MaxX,MaxY;
10 unsigned char DataBits,flags;
11
12 enum
13 { nodata = 0,
14 rawmap = 1, rawrgb = 2, rawmon = 3,
15 rlemap = 9, rlergb = 10, rlemon = 11
16 };
17
18 enum
19 {
20 invertedflag = 0x20,
21 hasAlphaChannel = 0x08
22 };
23
25 void defRGB(unsigned short X,unsigned short Y);
26
28 void defRGBA(unsigned short X,unsigned short Y);
29
31 void def256(unsigned short X,unsigned short Y);
32
33 bool isRGBA() const { return DataBits==32; }
34 bool isRGB() const { return DataBits==24; }
35 bool is256() const { return DataBits==8; }
36
37 unsigned long dataoffset() const
38 {
39 if (DataBits==8) return 18 + maplen*3;
40 else return 18;
41 }
42
43 bool top_first() const { return (flags&invertedflag) != 0; }
44
46 void read(const unsigned char hdr[18]);
47
49 void write(unsigned char hdr[18]) const;
50};
51
52inline void TGA::defRGB(unsigned short X,unsigned short Y)
53{
54 Xorigin=0; Yorigin=0;
55 MaxX=X; MaxY=Y;
56
57 commentlen=0;
58 maptype=nodata;
59 filetype=rawrgb;
60 maporg=0; maplen=0; mapsize=0;
61 DataBits=24;
62 flags=0;
63}
64
65inline void TGA::defRGBA(unsigned short X,unsigned short Y)
66{
67 defRGB(X,Y);
68 DataBits=32;
69 flags |= hasAlphaChannel;
70}
71
72inline void TGA::def256(unsigned short X,unsigned short Y)
73{
74 Xorigin=0; Yorigin=0;
75 MaxX=X; MaxY=Y;
76
77 commentlen=0;
78 maptype=rawmap;
79 filetype=rawmap;
80 maporg=0;
81 maplen=256; // Anzahl der Eintraege ?
82 mapsize=24; // Bit pro Eintrag ?
83 DataBits=8;
84 flags=0;
85}
86
87inline void TGA::read(const unsigned char hdr[18])
88{
89 commentlen = hdr[0];
90 maptype = hdr[1];
91 filetype = hdr[2];
92 maporg = int(hdr[3]) + (int(hdr[4])<<8);
93 maplen = int(hdr[5]) + (int(hdr[6])<<8);
94 mapsize = hdr[7];
95 Xorigin = int(hdr[ 8]) + (int(hdr[ 9])<<8);
96 Yorigin = int(hdr[10]) + (int(hdr[11])<<8);
97 MaxX = int(hdr[12]) + (int(hdr[13])<<8);
98 MaxY = int(hdr[14]) + (int(hdr[15])<<8);
99 DataBits = hdr[16];
100 flags = hdr[17];
101}
102
103inline void TGA::write(unsigned char hdr[18]) const
104{
105 hdr[0] = commentlen;
106 hdr[1] = maptype;
107 hdr[2] = filetype;
108 hdr[3] = maporg; hdr[4] = maporg>>8;
109 hdr[5] = maplen; hdr[6] = maplen>>8;
110 hdr[7] = mapsize;
111 hdr[8] = Xorigin; hdr[9] = Xorigin>>8;
112 hdr[10] = Yorigin; hdr[11] = Yorigin>>8;
113 hdr[12] = MaxX; hdr[13] = MaxX >>8;
114 hdr[14] = MaxY; hdr[15] = MaxY >>8;
115 hdr[16] = DataBits;
116 hdr[17] = flags;
117}
118
119
120#endif // __TGA_HPP
Definition TGA.hpp:5
void read(const unsigned char hdr[18])
Setup targa header information from buffer.
Definition TGA.hpp:87
void defRGBA(unsigned short X, unsigned short Y)
Setup header for 32 Bit uncompressed Targa file.
Definition TGA.hpp:65
void defRGB(unsigned short X, unsigned short Y)
Setup header for 24 Bit uncompressed Targa file.
Definition TGA.hpp:52
void def256(unsigned short X, unsigned short Y)
Setup header for 8 Bit colormapped Targa file.
Definition TGA.hpp:72
void write(unsigned char hdr[18]) const
Write targa header information into buffer.
Definition TGA.hpp:103