1 /*
2 * pnglite.h - Interface for pnglite library
3 * Copyright (c) 2007 Daniel Karling
4 *
5 * This software is provided 'as-is', without any express or implied
6 * warranty. In no event will the authors be held liable for any damages
7 * arising from the use of this software.
8 *
9 * Permission is granted to anyone to use this software for any purpose,
10 * including commercial applications, and to alter it and redistribute it
11 * freely, subject to the following restrictions:
12 *
13 * 1. The origin of this software must not be misrepresented; you must not
14 * claim that you wrote the original software. If you use this software
15 * in a product, an acknowledgment in the product documentation would be
16 * appreciated but is not required.
17 *
18 * 2. Altered source versions must be plainly marked as such, and must not
19 * be misrepresented as being the original software.
20 *
21 * 3. This notice may not be removed or altered from any source
22 * distribution.
23 *
24 * Daniel Karling
25 * daniel.karling@gmail.com
26 */
27
28
29 #ifndef _PNGLITE_H_
30 #define _PNGLITE_H_
31
32 #include <string.h>
33
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
37
38 /*
39 * Enumerations for pnglite.
40 * Negative numbers are error codes and 0 and up are okay responses.
41 */
42
43 enum {
44 PNG_DONE = 1,
45 PNG_NO_ERROR = 0,
46 PNG_FILE_ERROR = -1,
47 PNG_HEADER_ERROR = -2,
48 PNG_IO_ERROR = -3,
49 PNG_EOF_ERROR = -4,
50 PNG_CRC_ERROR = -5,
51 PNG_MEMORY_ERROR = -6,
52 PNG_ZLIB_ERROR = -7,
53 PNG_UNKNOWN_FILTER = -8,
54 PNG_NOT_SUPPORTED = -9,
55 PNG_WRONG_ARGUMENTS = -10
56 };
57
58 /*
59 * The five different kinds of color storage in PNG files.
60 */
61
62 enum {
63 PNG_GREYSCALE = 0,
64 PNG_TRUECOLOR = 2,
65 PNG_INDEXED = 3,
66 PNG_GREYSCALE_ALPHA = 4,
67 PNG_TRUECOLOR_ALPHA = 6
68 };
69
70 typedef struct {
71 void *zs; /* pointer to z_stream */
72 int fd;
73 unsigned char *image;
74
75 unsigned char *png_data;
76 unsigned png_datalen;
77
78 unsigned width;
79 unsigned height;
80 unsigned char depth;
81 unsigned char color_type;
82 unsigned char compression_method;
83 unsigned char filter_method;
84 unsigned char interlace_method;
85 unsigned char bpp;
86
87 unsigned char *readbuf;
88 unsigned readbuflen;
89 } png_t;
90
91
92 /*
93 * Function: png_open
94 *
95 * This function is used to open a png file with the internal file
96 * IO system.
97 *
98 * Parameters:
99 * png - Empty png_t struct.
100 * filename - Filename of the file to be opened.
101 *
102 * Returns:
103 * PNG_NO_ERROR on success, otherwise an error code.
104 */
105
106 int png_open(png_t *png, const char *filename);
107
108 /*
109 * Function: png_print_info
110 *
111 * This function prints some info about the opened png file to stdout.
112 *
113 * Parameters:
114 * png - png struct to get info from.
115 */
116
117 void png_print_info(png_t *png);
118
119 /*
120 * Function: png_error_string
121 *
122 * This function translates an error code to a human readable string.
123 *
124 * Parameters:
125 * error - Error code.
126 *
127 * Returns:
128 * Pointer to string.
129 */
130
131 char *png_error_string(int error);
132
133 /*
134 * Function: png_get_data
135 *
136 * This function decodes the opened png file and stores the result in data.
137 * data should be big enough to hold the decoded png.
138 * Required size will be:
139 *
140 * > width*height*(bytes per pixel)
141 *
142 * Parameters:
143 * data - Where to store result.
144 *
145 * Returns:
146 * PNG_NO_ERROR on success, otherwise an error code.
147 */
148
149 int png_get_data(png_t *png, uint8_t *data);
150
151 /*
152 * Function: png_close
153 *
154 * Closes an open png file pointer.
155 *
156 * Parameters:
157 * png - png to close.
158 *
159 * Returns:
160 * PNG_NO_ERROR
161 */
162
163 int png_close(png_t *png);
164
165 #ifdef __cplusplus
166 }
167 #endif
168
169 #endif /* _PNGLITE_H_ */