Fermat
tga.h
1 /*
2  * Copyright (c) 2010-2018, NVIDIA Corporation
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  * * Redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer.
9  * * Redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution.
12  * * Neither the name of NVIDIA Corporation nor the
13  * names of its contributors may be used to endorse or promote products
14  * derived from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19  * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
20  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 /*
29  Very simple TGA reading/writing.
30 */
31 
32 
33 #ifndef TGA_INCLUDED
34 #define TGA_INCLUDED
35 
36 namespace cugar {
37 
39 // TGA File Header
41 #pragma pack(push,1) // no alignment
42 struct TGAHeader
43 {
44  unsigned char identsize; // size of ID field that follows 18 byte header (0 usually)
45  unsigned char colourmaptype; // type of colour map 0=none, 1=has palette
46  unsigned char imagetype; // type of image 0=none,1=indexed,2=rgb,3=grey,+8=rle packed
47 
48  unsigned short colourmapstart; // first colour map entry in palette
49  unsigned short colourmaplength; // number of colours in palette
50  unsigned char colourmapbits; // number of bits per palette entry 15,16,24,32
51 
52  unsigned short xstart; // image x origin
53  unsigned short ystart; // image y origin
54  unsigned short width; // image width in pixels
55  unsigned short height; // image height in pixels
56  unsigned char bits; // image bits per pixel 8,16,24,32
57  unsigned char descriptor; // image descriptor bits (vh flip bits)
58 };
59 #pragma pack(pop)
60 
61 enum class TGAPixels
62 {
63  RGB = 0,
64  BGR = 1,
65  RGBA = 2,
66  BW = 3
67 };
68 
69 // Load an uncompressed tga image, 24 or 32 bpp. The pixel memory is allocated
70 // by the routine and must be freed by the caller using delete[].
71 unsigned char* load_tga(const char *filename, TGAHeader *hdr);
72 
73 // Write a TGA to file, 24 bpp, with the specified parameters. rgb indicates
74 // whether pixdata is in RGB or BGR format.
75 bool write_tga(const char* filename, int width, int height, const unsigned char *pixdata, TGAPixels input_type);
76 
77 } // namespace cugar
78 
79 #endif
Definition: tga.h:42
Define a vector_view POD type and plain_view() for std::vector.
Definition: diff.h:38