LodePNG version 20160124 Copyright (c) 2005-2016 Lode Vandevenne LodePNG is a PNG image decoder and encoder, all in one, no dependency or linkage to zlib or libpng required. It's made for C (ISO C90), and has a C++ wrapper with a more convenient interface on top. https://github.com/lvandeve/lodepng

Committer:
unix_guru
Date:
Tue Feb 23 18:19:20 2016 +0000
Revision:
0:6b244485c156
First version commit
; LodePNG version 20160124
;
; Copyright (c) 2005-2016 Lode Vandevenne

Who changed what in which revision?

UserRevisionLine numberNew contents of line
unix_guru 0:6b244485c156 1 /*
unix_guru 0:6b244485c156 2 LodePNG version 20160124
unix_guru 0:6b244485c156 3
unix_guru 0:6b244485c156 4 Copyright (c) 2005-2016 Lode Vandevenne
unix_guru 0:6b244485c156 5
unix_guru 0:6b244485c156 6 This software is provided 'as-is', without any express or implied
unix_guru 0:6b244485c156 7 warranty. In no event will the authors be held liable for any damages
unix_guru 0:6b244485c156 8 arising from the use of this software.
unix_guru 0:6b244485c156 9
unix_guru 0:6b244485c156 10 Permission is granted to anyone to use this software for any purpose,
unix_guru 0:6b244485c156 11 including commercial applications, and to alter it and redistribute it
unix_guru 0:6b244485c156 12 freely, subject to the following restrictions:
unix_guru 0:6b244485c156 13
unix_guru 0:6b244485c156 14 1. The origin of this software must not be misrepresented; you must not
unix_guru 0:6b244485c156 15 claim that you wrote the original software. If you use this software
unix_guru 0:6b244485c156 16 in a product, an acknowledgment in the product documentation would be
unix_guru 0:6b244485c156 17 appreciated but is not required.
unix_guru 0:6b244485c156 18
unix_guru 0:6b244485c156 19 2. Altered source versions must be plainly marked as such, and must not be
unix_guru 0:6b244485c156 20 misrepresented as being the original software.
unix_guru 0:6b244485c156 21
unix_guru 0:6b244485c156 22 3. This notice may not be removed or altered from any source
unix_guru 0:6b244485c156 23 distribution.
unix_guru 0:6b244485c156 24 */
unix_guru 0:6b244485c156 25
unix_guru 0:6b244485c156 26 #ifndef LODEPNG_H
unix_guru 0:6b244485c156 27 #define LODEPNG_H
unix_guru 0:6b244485c156 28
unix_guru 0:6b244485c156 29 #include <string.h> /*for size_t*/
unix_guru 0:6b244485c156 30
unix_guru 0:6b244485c156 31 extern const char* LODEPNG_VERSION_STRING;
unix_guru 0:6b244485c156 32
unix_guru 0:6b244485c156 33 /*
unix_guru 0:6b244485c156 34 The following #defines are used to create code sections. They can be disabled
unix_guru 0:6b244485c156 35 to disable code sections, which can give faster compile time and smaller binary.
unix_guru 0:6b244485c156 36 The "NO_COMPILE" defines are designed to be used to pass as defines to the
unix_guru 0:6b244485c156 37 compiler command to disable them without modifying this header, e.g.
unix_guru 0:6b244485c156 38 -DLODEPNG_NO_COMPILE_ZLIB for gcc.
unix_guru 0:6b244485c156 39 In addition to those below, you can also define LODEPNG_NO_COMPILE_CRC to
unix_guru 0:6b244485c156 40 allow implementing a custom lodepng_crc32.
unix_guru 0:6b244485c156 41 */
unix_guru 0:6b244485c156 42 /*deflate & zlib. If disabled, you must specify alternative zlib functions in
unix_guru 0:6b244485c156 43 the custom_zlib field of the compress and decompress settings*/
unix_guru 0:6b244485c156 44 #ifndef LODEPNG_NO_COMPILE_ZLIB
unix_guru 0:6b244485c156 45 #define LODEPNG_COMPILE_ZLIB
unix_guru 0:6b244485c156 46 #endif
unix_guru 0:6b244485c156 47 /*png encoder and png decoder*/
unix_guru 0:6b244485c156 48 #ifndef LODEPNG_NO_COMPILE_PNG
unix_guru 0:6b244485c156 49 #define LODEPNG_COMPILE_PNG
unix_guru 0:6b244485c156 50 #endif
unix_guru 0:6b244485c156 51 /*deflate&zlib decoder and png decoder*/
unix_guru 0:6b244485c156 52 #ifndef LODEPNG_NO_COMPILE_DECODER
unix_guru 0:6b244485c156 53 #define LODEPNG_COMPILE_DECODER
unix_guru 0:6b244485c156 54 #endif
unix_guru 0:6b244485c156 55 /*deflate&zlib encoder and png encoder*/
unix_guru 0:6b244485c156 56 #ifndef LODEPNG_NO_COMPILE_ENCODER
unix_guru 0:6b244485c156 57 #define LODEPNG_COMPILE_ENCODER
unix_guru 0:6b244485c156 58 #endif
unix_guru 0:6b244485c156 59 /*the optional built in harddisk file loading and saving functions*/
unix_guru 0:6b244485c156 60 #ifndef LODEPNG_NO_COMPILE_DISK
unix_guru 0:6b244485c156 61 #define LODEPNG_COMPILE_DISK
unix_guru 0:6b244485c156 62 #endif
unix_guru 0:6b244485c156 63 /*support for chunks other than IHDR, IDAT, PLTE, tRNS, IEND: ancillary and unknown chunks*/
unix_guru 0:6b244485c156 64 #ifndef LODEPNG_NO_COMPILE_ANCILLARY_CHUNKS
unix_guru 0:6b244485c156 65 #define LODEPNG_COMPILE_ANCILLARY_CHUNKS
unix_guru 0:6b244485c156 66 #endif
unix_guru 0:6b244485c156 67 /*ability to convert error numerical codes to English text string*/
unix_guru 0:6b244485c156 68 #ifndef LODEPNG_NO_COMPILE_ERROR_TEXT
unix_guru 0:6b244485c156 69 #define LODEPNG_COMPILE_ERROR_TEXT
unix_guru 0:6b244485c156 70 #endif
unix_guru 0:6b244485c156 71 /*Compile the default allocators (C's free, malloc and realloc). If you disable this,
unix_guru 0:6b244485c156 72 you can define the functions lodepng_free, lodepng_malloc and lodepng_realloc in your
unix_guru 0:6b244485c156 73 source files with custom allocators.*/
unix_guru 0:6b244485c156 74 #ifndef LODEPNG_NO_COMPILE_ALLOCATORS
unix_guru 0:6b244485c156 75 #define LODEPNG_COMPILE_ALLOCATORS
unix_guru 0:6b244485c156 76 #endif
unix_guru 0:6b244485c156 77 /*compile the C++ version (you can disable the C++ wrapper here even when compiling for C++)*/
unix_guru 0:6b244485c156 78 #ifdef __cplusplus
unix_guru 0:6b244485c156 79 #ifndef LODEPNG_NO_COMPILE_CPP
unix_guru 0:6b244485c156 80 #define LODEPNG_COMPILE_CPP
unix_guru 0:6b244485c156 81 #endif
unix_guru 0:6b244485c156 82 #endif
unix_guru 0:6b244485c156 83
unix_guru 0:6b244485c156 84 #ifdef LODEPNG_COMPILE_CPP
unix_guru 0:6b244485c156 85 #include <vector>
unix_guru 0:6b244485c156 86 #include <string>
unix_guru 0:6b244485c156 87 #endif /*LODEPNG_COMPILE_CPP*/
unix_guru 0:6b244485c156 88
unix_guru 0:6b244485c156 89 #ifdef LODEPNG_COMPILE_PNG
unix_guru 0:6b244485c156 90 /*The PNG color types (also used for raw).*/
unix_guru 0:6b244485c156 91 typedef enum LodePNGColorType
unix_guru 0:6b244485c156 92 {
unix_guru 0:6b244485c156 93 LCT_GREY = 0, /*greyscale: 1,2,4,8,16 bit*/
unix_guru 0:6b244485c156 94 LCT_RGB = 2, /*RGB: 8,16 bit*/
unix_guru 0:6b244485c156 95 LCT_PALETTE = 3, /*palette: 1,2,4,8 bit*/
unix_guru 0:6b244485c156 96 LCT_GREY_ALPHA = 4, /*greyscale with alpha: 8,16 bit*/
unix_guru 0:6b244485c156 97 LCT_RGBA = 6 /*RGB with alpha: 8,16 bit*/
unix_guru 0:6b244485c156 98 } LodePNGColorType;
unix_guru 0:6b244485c156 99
unix_guru 0:6b244485c156 100 #ifdef LODEPNG_COMPILE_DECODER
unix_guru 0:6b244485c156 101 /*
unix_guru 0:6b244485c156 102 Converts PNG data in memory to raw pixel data.
unix_guru 0:6b244485c156 103 out: Output parameter. Pointer to buffer that will contain the raw pixel data.
unix_guru 0:6b244485c156 104 After decoding, its size is w * h * (bytes per pixel) bytes larger than
unix_guru 0:6b244485c156 105 initially. Bytes per pixel depends on colortype and bitdepth.
unix_guru 0:6b244485c156 106 Must be freed after usage with free(*out).
unix_guru 0:6b244485c156 107 Note: for 16-bit per channel colors, uses big endian format like PNG does.
unix_guru 0:6b244485c156 108 w: Output parameter. Pointer to width of pixel data.
unix_guru 0:6b244485c156 109 h: Output parameter. Pointer to height of pixel data.
unix_guru 0:6b244485c156 110 in: Memory buffer with the PNG file.
unix_guru 0:6b244485c156 111 insize: size of the in buffer.
unix_guru 0:6b244485c156 112 colortype: the desired color type for the raw output image. See explanation on PNG color types.
unix_guru 0:6b244485c156 113 bitdepth: the desired bit depth for the raw output image. See explanation on PNG color types.
unix_guru 0:6b244485c156 114 Return value: LodePNG error code (0 means no error).
unix_guru 0:6b244485c156 115 */
unix_guru 0:6b244485c156 116 unsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigned* h,
unix_guru 0:6b244485c156 117 const unsigned char* in, size_t insize,
unix_guru 0:6b244485c156 118 LodePNGColorType colortype, unsigned bitdepth);
unix_guru 0:6b244485c156 119
unix_guru 0:6b244485c156 120 /*Same as lodepng_decode_memory, but always decodes to 32-bit RGBA raw image*/
unix_guru 0:6b244485c156 121 unsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h,
unix_guru 0:6b244485c156 122 const unsigned char* in, size_t insize);
unix_guru 0:6b244485c156 123
unix_guru 0:6b244485c156 124 /*Same as lodepng_decode_memory, but always decodes to 24-bit RGB raw image*/
unix_guru 0:6b244485c156 125 unsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h,
unix_guru 0:6b244485c156 126 const unsigned char* in, size_t insize);
unix_guru 0:6b244485c156 127
unix_guru 0:6b244485c156 128 #ifdef LODEPNG_COMPILE_DISK
unix_guru 0:6b244485c156 129 /*
unix_guru 0:6b244485c156 130 Load PNG from disk, from file with given name.
unix_guru 0:6b244485c156 131 Same as the other decode functions, but instead takes a filename as input.
unix_guru 0:6b244485c156 132 */
unix_guru 0:6b244485c156 133 unsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned* h,
unix_guru 0:6b244485c156 134 const char* filename,
unix_guru 0:6b244485c156 135 LodePNGColorType colortype, unsigned bitdepth);
unix_guru 0:6b244485c156 136
unix_guru 0:6b244485c156 137 /*Same as lodepng_decode_file, but always decodes to 32-bit RGBA raw image.*/
unix_guru 0:6b244485c156 138 unsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigned* h,
unix_guru 0:6b244485c156 139 const char* filename);
unix_guru 0:6b244485c156 140
unix_guru 0:6b244485c156 141 /*Same as lodepng_decode_file, but always decodes to 24-bit RGB raw image.*/
unix_guru 0:6b244485c156 142 unsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigned* h,
unix_guru 0:6b244485c156 143 const char* filename);
unix_guru 0:6b244485c156 144 #endif /*LODEPNG_COMPILE_DISK*/
unix_guru 0:6b244485c156 145 #endif /*LODEPNG_COMPILE_DECODER*/
unix_guru 0:6b244485c156 146
unix_guru 0:6b244485c156 147
unix_guru 0:6b244485c156 148 #ifdef LODEPNG_COMPILE_ENCODER
unix_guru 0:6b244485c156 149 /*
unix_guru 0:6b244485c156 150 Converts raw pixel data into a PNG image in memory. The colortype and bitdepth
unix_guru 0:6b244485c156 151 of the output PNG image cannot be chosen, they are automatically determined
unix_guru 0:6b244485c156 152 by the colortype, bitdepth and content of the input pixel data.
unix_guru 0:6b244485c156 153 Note: for 16-bit per channel colors, needs big endian format like PNG does.
unix_guru 0:6b244485c156 154 out: Output parameter. Pointer to buffer that will contain the PNG image data.
unix_guru 0:6b244485c156 155 Must be freed after usage with free(*out).
unix_guru 0:6b244485c156 156 outsize: Output parameter. Pointer to the size in bytes of the out buffer.
unix_guru 0:6b244485c156 157 image: The raw pixel data to encode. The size of this buffer should be
unix_guru 0:6b244485c156 158 w * h * (bytes per pixel), bytes per pixel depends on colortype and bitdepth.
unix_guru 0:6b244485c156 159 w: width of the raw pixel data in pixels.
unix_guru 0:6b244485c156 160 h: height of the raw pixel data in pixels.
unix_guru 0:6b244485c156 161 colortype: the color type of the raw input image. See explanation on PNG color types.
unix_guru 0:6b244485c156 162 bitdepth: the bit depth of the raw input image. See explanation on PNG color types.
unix_guru 0:6b244485c156 163 Return value: LodePNG error code (0 means no error).
unix_guru 0:6b244485c156 164 */
unix_guru 0:6b244485c156 165 unsigned lodepng_encode_memory(unsigned char** out, size_t* outsize,
unix_guru 0:6b244485c156 166 const unsigned char* image, unsigned w, unsigned h,
unix_guru 0:6b244485c156 167 LodePNGColorType colortype, unsigned bitdepth);
unix_guru 0:6b244485c156 168
unix_guru 0:6b244485c156 169 /*Same as lodepng_encode_memory, but always encodes from 32-bit RGBA raw image.*/
unix_guru 0:6b244485c156 170 unsigned lodepng_encode32(unsigned char** out, size_t* outsize,
unix_guru 0:6b244485c156 171 const unsigned char* image, unsigned w, unsigned h);
unix_guru 0:6b244485c156 172
unix_guru 0:6b244485c156 173 /*Same as lodepng_encode_memory, but always encodes from 24-bit RGB raw image.*/
unix_guru 0:6b244485c156 174 unsigned lodepng_encode24(unsigned char** out, size_t* outsize,
unix_guru 0:6b244485c156 175 const unsigned char* image, unsigned w, unsigned h);
unix_guru 0:6b244485c156 176
unix_guru 0:6b244485c156 177 #ifdef LODEPNG_COMPILE_DISK
unix_guru 0:6b244485c156 178 /*
unix_guru 0:6b244485c156 179 Converts raw pixel data into a PNG file on disk.
unix_guru 0:6b244485c156 180 Same as the other encode functions, but instead takes a filename as output.
unix_guru 0:6b244485c156 181 NOTE: This overwrites existing files without warning!
unix_guru 0:6b244485c156 182 */
unix_guru 0:6b244485c156 183 unsigned lodepng_encode_file(const char* filename,
unix_guru 0:6b244485c156 184 const unsigned char* image, unsigned w, unsigned h,
unix_guru 0:6b244485c156 185 LodePNGColorType colortype, unsigned bitdepth);
unix_guru 0:6b244485c156 186
unix_guru 0:6b244485c156 187 /*Same as lodepng_encode_file, but always encodes from 32-bit RGBA raw image.*/
unix_guru 0:6b244485c156 188 unsigned lodepng_encode32_file(const char* filename,
unix_guru 0:6b244485c156 189 const unsigned char* image, unsigned w, unsigned h);
unix_guru 0:6b244485c156 190
unix_guru 0:6b244485c156 191 /*Same as lodepng_encode_file, but always encodes from 24-bit RGB raw image.*/
unix_guru 0:6b244485c156 192 unsigned lodepng_encode24_file(const char* filename,
unix_guru 0:6b244485c156 193 const unsigned char* image, unsigned w, unsigned h);
unix_guru 0:6b244485c156 194 #endif /*LODEPNG_COMPILE_DISK*/
unix_guru 0:6b244485c156 195 #endif /*LODEPNG_COMPILE_ENCODER*/
unix_guru 0:6b244485c156 196
unix_guru 0:6b244485c156 197
unix_guru 0:6b244485c156 198 #ifdef LODEPNG_COMPILE_CPP
unix_guru 0:6b244485c156 199 namespace lodepng
unix_guru 0:6b244485c156 200 {
unix_guru 0:6b244485c156 201 #ifdef LODEPNG_COMPILE_DECODER
unix_guru 0:6b244485c156 202 /*Same as lodepng_decode_memory, but decodes to an std::vector. The colortype
unix_guru 0:6b244485c156 203 is the format to output the pixels to. Default is RGBA 8-bit per channel.*/
unix_guru 0:6b244485c156 204 unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
unix_guru 0:6b244485c156 205 const unsigned char* in, size_t insize,
unix_guru 0:6b244485c156 206 LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
unix_guru 0:6b244485c156 207 unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
unix_guru 0:6b244485c156 208 const std::vector<unsigned char>& in,
unix_guru 0:6b244485c156 209 LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
unix_guru 0:6b244485c156 210 #ifdef LODEPNG_COMPILE_DISK
unix_guru 0:6b244485c156 211 /*
unix_guru 0:6b244485c156 212 Converts PNG file from disk to raw pixel data in memory.
unix_guru 0:6b244485c156 213 Same as the other decode functions, but instead takes a filename as input.
unix_guru 0:6b244485c156 214 */
unix_guru 0:6b244485c156 215 unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
unix_guru 0:6b244485c156 216 const std::string& filename,
unix_guru 0:6b244485c156 217 LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
unix_guru 0:6b244485c156 218 #endif /* LODEPNG_COMPILE_DISK */
unix_guru 0:6b244485c156 219 #endif /* LODEPNG_COMPILE_DECODER */
unix_guru 0:6b244485c156 220
unix_guru 0:6b244485c156 221 #ifdef LODEPNG_COMPILE_ENCODER
unix_guru 0:6b244485c156 222 /*Same as lodepng_encode_memory, but encodes to an std::vector. colortype
unix_guru 0:6b244485c156 223 is that of the raw input data. The output PNG color type will be auto chosen.*/
unix_guru 0:6b244485c156 224 unsigned encode(std::vector<unsigned char>& out,
unix_guru 0:6b244485c156 225 const unsigned char* in, unsigned w, unsigned h,
unix_guru 0:6b244485c156 226 LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
unix_guru 0:6b244485c156 227 unsigned encode(std::vector<unsigned char>& out,
unix_guru 0:6b244485c156 228 const std::vector<unsigned char>& in, unsigned w, unsigned h,
unix_guru 0:6b244485c156 229 LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
unix_guru 0:6b244485c156 230 #ifdef LODEPNG_COMPILE_DISK
unix_guru 0:6b244485c156 231 /*
unix_guru 0:6b244485c156 232 Converts 32-bit RGBA raw pixel data into a PNG file on disk.
unix_guru 0:6b244485c156 233 Same as the other encode functions, but instead takes a filename as output.
unix_guru 0:6b244485c156 234 NOTE: This overwrites existing files without warning!
unix_guru 0:6b244485c156 235 */
unix_guru 0:6b244485c156 236 unsigned encode(const std::string& filename,
unix_guru 0:6b244485c156 237 const unsigned char* in, unsigned w, unsigned h,
unix_guru 0:6b244485c156 238 LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
unix_guru 0:6b244485c156 239 unsigned encode(const std::string& filename,
unix_guru 0:6b244485c156 240 const std::vector<unsigned char>& in, unsigned w, unsigned h,
unix_guru 0:6b244485c156 241 LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
unix_guru 0:6b244485c156 242 #endif /* LODEPNG_COMPILE_DISK */
unix_guru 0:6b244485c156 243 #endif /* LODEPNG_COMPILE_ENCODER */
unix_guru 0:6b244485c156 244 } /* namespace lodepng */
unix_guru 0:6b244485c156 245 #endif /*LODEPNG_COMPILE_CPP*/
unix_guru 0:6b244485c156 246 #endif /*LODEPNG_COMPILE_PNG*/
unix_guru 0:6b244485c156 247
unix_guru 0:6b244485c156 248 #ifdef LODEPNG_COMPILE_ERROR_TEXT
unix_guru 0:6b244485c156 249 /*Returns an English description of the numerical error code.*/
unix_guru 0:6b244485c156 250 const char* lodepng_error_text(unsigned code);
unix_guru 0:6b244485c156 251 #endif /*LODEPNG_COMPILE_ERROR_TEXT*/
unix_guru 0:6b244485c156 252
unix_guru 0:6b244485c156 253 #ifdef LODEPNG_COMPILE_DECODER
unix_guru 0:6b244485c156 254 /*Settings for zlib decompression*/
unix_guru 0:6b244485c156 255 typedef struct LodePNGDecompressSettings LodePNGDecompressSettings;
unix_guru 0:6b244485c156 256 struct LodePNGDecompressSettings
unix_guru 0:6b244485c156 257 {
unix_guru 0:6b244485c156 258 unsigned ignore_adler32; /*if 1, continue and don't give an error message if the Adler32 checksum is corrupted*/
unix_guru 0:6b244485c156 259
unix_guru 0:6b244485c156 260 /*use custom zlib decoder instead of built in one (default: null)*/
unix_guru 0:6b244485c156 261 unsigned (*custom_zlib)(unsigned char**, size_t*,
unix_guru 0:6b244485c156 262 const unsigned char*, size_t,
unix_guru 0:6b244485c156 263 const LodePNGDecompressSettings*);
unix_guru 0:6b244485c156 264 /*use custom deflate decoder instead of built in one (default: null)
unix_guru 0:6b244485c156 265 if custom_zlib is used, custom_deflate is ignored since only the built in
unix_guru 0:6b244485c156 266 zlib function will call custom_deflate*/
unix_guru 0:6b244485c156 267 unsigned (*custom_inflate)(unsigned char**, size_t*,
unix_guru 0:6b244485c156 268 const unsigned char*, size_t,
unix_guru 0:6b244485c156 269 const LodePNGDecompressSettings*);
unix_guru 0:6b244485c156 270
unix_guru 0:6b244485c156 271 const void* custom_context; /*optional custom settings for custom functions*/
unix_guru 0:6b244485c156 272 };
unix_guru 0:6b244485c156 273
unix_guru 0:6b244485c156 274 extern const LodePNGDecompressSettings lodepng_default_decompress_settings;
unix_guru 0:6b244485c156 275 void lodepng_decompress_settings_init(LodePNGDecompressSettings* settings);
unix_guru 0:6b244485c156 276 #endif /*LODEPNG_COMPILE_DECODER*/
unix_guru 0:6b244485c156 277
unix_guru 0:6b244485c156 278 #ifdef LODEPNG_COMPILE_ENCODER
unix_guru 0:6b244485c156 279 /*
unix_guru 0:6b244485c156 280 Settings for zlib compression. Tweaking these settings tweaks the balance
unix_guru 0:6b244485c156 281 between speed and compression ratio.
unix_guru 0:6b244485c156 282 */
unix_guru 0:6b244485c156 283 typedef struct LodePNGCompressSettings LodePNGCompressSettings;
unix_guru 0:6b244485c156 284 struct LodePNGCompressSettings /*deflate = compress*/
unix_guru 0:6b244485c156 285 {
unix_guru 0:6b244485c156 286 /*LZ77 related settings*/
unix_guru 0:6b244485c156 287 unsigned btype; /*the block type for LZ (0, 1, 2 or 3, see zlib standard). Should be 2 for proper compression.*/
unix_guru 0:6b244485c156 288 unsigned use_lz77; /*whether or not to use LZ77. Should be 1 for proper compression.*/
unix_guru 0:6b244485c156 289 unsigned windowsize; /*must be a power of two <= 32768. higher compresses more but is slower. Default value: 2048.*/
unix_guru 0:6b244485c156 290 unsigned minmatch; /*mininum lz77 length. 3 is normally best, 6 can be better for some PNGs. Default: 0*/
unix_guru 0:6b244485c156 291 unsigned nicematch; /*stop searching if >= this length found. Set to 258 for best compression. Default: 128*/
unix_guru 0:6b244485c156 292 unsigned lazymatching; /*use lazy matching: better compression but a bit slower. Default: true*/
unix_guru 0:6b244485c156 293
unix_guru 0:6b244485c156 294 /*use custom zlib encoder instead of built in one (default: null)*/
unix_guru 0:6b244485c156 295 unsigned (*custom_zlib)(unsigned char**, size_t*,
unix_guru 0:6b244485c156 296 const unsigned char*, size_t,
unix_guru 0:6b244485c156 297 const LodePNGCompressSettings*);
unix_guru 0:6b244485c156 298 /*use custom deflate encoder instead of built in one (default: null)
unix_guru 0:6b244485c156 299 if custom_zlib is used, custom_deflate is ignored since only the built in
unix_guru 0:6b244485c156 300 zlib function will call custom_deflate*/
unix_guru 0:6b244485c156 301 unsigned (*custom_deflate)(unsigned char**, size_t*,
unix_guru 0:6b244485c156 302 const unsigned char*, size_t,
unix_guru 0:6b244485c156 303 const LodePNGCompressSettings*);
unix_guru 0:6b244485c156 304
unix_guru 0:6b244485c156 305 const void* custom_context; /*optional custom settings for custom functions*/
unix_guru 0:6b244485c156 306 };
unix_guru 0:6b244485c156 307
unix_guru 0:6b244485c156 308 extern const LodePNGCompressSettings lodepng_default_compress_settings;
unix_guru 0:6b244485c156 309 void lodepng_compress_settings_init(LodePNGCompressSettings* settings);
unix_guru 0:6b244485c156 310 #endif /*LODEPNG_COMPILE_ENCODER*/
unix_guru 0:6b244485c156 311
unix_guru 0:6b244485c156 312 #ifdef LODEPNG_COMPILE_PNG
unix_guru 0:6b244485c156 313 /*
unix_guru 0:6b244485c156 314 Color mode of an image. Contains all information required to decode the pixel
unix_guru 0:6b244485c156 315 bits to RGBA colors. This information is the same as used in the PNG file
unix_guru 0:6b244485c156 316 format, and is used both for PNG and raw image data in LodePNG.
unix_guru 0:6b244485c156 317 */
unix_guru 0:6b244485c156 318 typedef struct LodePNGColorMode
unix_guru 0:6b244485c156 319 {
unix_guru 0:6b244485c156 320 /*header (IHDR)*/
unix_guru 0:6b244485c156 321 LodePNGColorType colortype; /*color type, see PNG standard or documentation further in this header file*/
unix_guru 0:6b244485c156 322 unsigned bitdepth; /*bits per sample, see PNG standard or documentation further in this header file*/
unix_guru 0:6b244485c156 323
unix_guru 0:6b244485c156 324 /*
unix_guru 0:6b244485c156 325 palette (PLTE and tRNS)
unix_guru 0:6b244485c156 326
unix_guru 0:6b244485c156 327 Dynamically allocated with the colors of the palette, including alpha.
unix_guru 0:6b244485c156 328 When encoding a PNG, to store your colors in the palette of the LodePNGColorMode, first use
unix_guru 0:6b244485c156 329 lodepng_palette_clear, then for each color use lodepng_palette_add.
unix_guru 0:6b244485c156 330 If you encode an image without alpha with palette, don't forget to put value 255 in each A byte of the palette.
unix_guru 0:6b244485c156 331
unix_guru 0:6b244485c156 332 When decoding, by default you can ignore this palette, since LodePNG already
unix_guru 0:6b244485c156 333 fills the palette colors in the pixels of the raw RGBA output.
unix_guru 0:6b244485c156 334
unix_guru 0:6b244485c156 335 The palette is only supported for color type 3.
unix_guru 0:6b244485c156 336 */
unix_guru 0:6b244485c156 337 unsigned char* palette; /*palette in RGBARGBA... order. When allocated, must be either 0, or have size 1024*/
unix_guru 0:6b244485c156 338 size_t palettesize; /*palette size in number of colors (amount of bytes is 4 * palettesize)*/
unix_guru 0:6b244485c156 339
unix_guru 0:6b244485c156 340 /*
unix_guru 0:6b244485c156 341 transparent color key (tRNS)
unix_guru 0:6b244485c156 342
unix_guru 0:6b244485c156 343 This color uses the same bit depth as the bitdepth value in this struct, which can be 1-bit to 16-bit.
unix_guru 0:6b244485c156 344 For greyscale PNGs, r, g and b will all 3 be set to the same.
unix_guru 0:6b244485c156 345
unix_guru 0:6b244485c156 346 When decoding, by default you can ignore this information, since LodePNG sets
unix_guru 0:6b244485c156 347 pixels with this key to transparent already in the raw RGBA output.
unix_guru 0:6b244485c156 348
unix_guru 0:6b244485c156 349 The color key is only supported for color types 0 and 2.
unix_guru 0:6b244485c156 350 */
unix_guru 0:6b244485c156 351 unsigned key_defined; /*is a transparent color key given? 0 = false, 1 = true*/
unix_guru 0:6b244485c156 352 unsigned key_r; /*red/greyscale component of color key*/
unix_guru 0:6b244485c156 353 unsigned key_g; /*green component of color key*/
unix_guru 0:6b244485c156 354 unsigned key_b; /*blue component of color key*/
unix_guru 0:6b244485c156 355 } LodePNGColorMode;
unix_guru 0:6b244485c156 356
unix_guru 0:6b244485c156 357 /*init, cleanup and copy functions to use with this struct*/
unix_guru 0:6b244485c156 358 void lodepng_color_mode_init(LodePNGColorMode* info);
unix_guru 0:6b244485c156 359 void lodepng_color_mode_cleanup(LodePNGColorMode* info);
unix_guru 0:6b244485c156 360 /*return value is error code (0 means no error)*/
unix_guru 0:6b244485c156 361 unsigned lodepng_color_mode_copy(LodePNGColorMode* dest, const LodePNGColorMode* source);
unix_guru 0:6b244485c156 362
unix_guru 0:6b244485c156 363 void lodepng_palette_clear(LodePNGColorMode* info);
unix_guru 0:6b244485c156 364 /*add 1 color to the palette*/
unix_guru 0:6b244485c156 365 unsigned lodepng_palette_add(LodePNGColorMode* info,
unix_guru 0:6b244485c156 366 unsigned char r, unsigned char g, unsigned char b, unsigned char a);
unix_guru 0:6b244485c156 367
unix_guru 0:6b244485c156 368 /*get the total amount of bits per pixel, based on colortype and bitdepth in the struct*/
unix_guru 0:6b244485c156 369 unsigned lodepng_get_bpp(const LodePNGColorMode* info);
unix_guru 0:6b244485c156 370 /*get the amount of color channels used, based on colortype in the struct.
unix_guru 0:6b244485c156 371 If a palette is used, it counts as 1 channel.*/
unix_guru 0:6b244485c156 372 unsigned lodepng_get_channels(const LodePNGColorMode* info);
unix_guru 0:6b244485c156 373 /*is it a greyscale type? (only colortype 0 or 4)*/
unix_guru 0:6b244485c156 374 unsigned lodepng_is_greyscale_type(const LodePNGColorMode* info);
unix_guru 0:6b244485c156 375 /*has it got an alpha channel? (only colortype 2 or 6)*/
unix_guru 0:6b244485c156 376 unsigned lodepng_is_alpha_type(const LodePNGColorMode* info);
unix_guru 0:6b244485c156 377 /*has it got a palette? (only colortype 3)*/
unix_guru 0:6b244485c156 378 unsigned lodepng_is_palette_type(const LodePNGColorMode* info);
unix_guru 0:6b244485c156 379 /*only returns true if there is a palette and there is a value in the palette with alpha < 255.
unix_guru 0:6b244485c156 380 Loops through the palette to check this.*/
unix_guru 0:6b244485c156 381 unsigned lodepng_has_palette_alpha(const LodePNGColorMode* info);
unix_guru 0:6b244485c156 382 /*
unix_guru 0:6b244485c156 383 Check if the given color info indicates the possibility of having non-opaque pixels in the PNG image.
unix_guru 0:6b244485c156 384 Returns true if the image can have translucent or invisible pixels (it still be opaque if it doesn't use such pixels).
unix_guru 0:6b244485c156 385 Returns false if the image can only have opaque pixels.
unix_guru 0:6b244485c156 386 In detail, it returns true only if it's a color type with alpha, or has a palette with non-opaque values,
unix_guru 0:6b244485c156 387 or if "key_defined" is true.
unix_guru 0:6b244485c156 388 */
unix_guru 0:6b244485c156 389 unsigned lodepng_can_have_alpha(const LodePNGColorMode* info);
unix_guru 0:6b244485c156 390 /*Returns the byte size of a raw image buffer with given width, height and color mode*/
unix_guru 0:6b244485c156 391 size_t lodepng_get_raw_size(unsigned w, unsigned h, const LodePNGColorMode* color);
unix_guru 0:6b244485c156 392
unix_guru 0:6b244485c156 393 #ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
unix_guru 0:6b244485c156 394 /*The information of a Time chunk in PNG.*/
unix_guru 0:6b244485c156 395 typedef struct LodePNGTime
unix_guru 0:6b244485c156 396 {
unix_guru 0:6b244485c156 397 unsigned year; /*2 bytes used (0-65535)*/
unix_guru 0:6b244485c156 398 unsigned month; /*1-12*/
unix_guru 0:6b244485c156 399 unsigned day; /*1-31*/
unix_guru 0:6b244485c156 400 unsigned hour; /*0-23*/
unix_guru 0:6b244485c156 401 unsigned minute; /*0-59*/
unix_guru 0:6b244485c156 402 unsigned second; /*0-60 (to allow for leap seconds)*/
unix_guru 0:6b244485c156 403 } LodePNGTime;
unix_guru 0:6b244485c156 404 #endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
unix_guru 0:6b244485c156 405
unix_guru 0:6b244485c156 406 /*Information about the PNG image, except pixels, width and height.*/
unix_guru 0:6b244485c156 407 typedef struct LodePNGInfo
unix_guru 0:6b244485c156 408 {
unix_guru 0:6b244485c156 409 /*header (IHDR), palette (PLTE) and transparency (tRNS) chunks*/
unix_guru 0:6b244485c156 410 unsigned compression_method;/*compression method of the original file. Always 0.*/
unix_guru 0:6b244485c156 411 unsigned filter_method; /*filter method of the original file*/
unix_guru 0:6b244485c156 412 unsigned interlace_method; /*interlace method of the original file*/
unix_guru 0:6b244485c156 413 LodePNGColorMode color; /*color type and bits, palette and transparency of the PNG file*/
unix_guru 0:6b244485c156 414
unix_guru 0:6b244485c156 415 #ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
unix_guru 0:6b244485c156 416 /*
unix_guru 0:6b244485c156 417 suggested background color chunk (bKGD)
unix_guru 0:6b244485c156 418 This color uses the same color mode as the PNG (except alpha channel), which can be 1-bit to 16-bit.
unix_guru 0:6b244485c156 419
unix_guru 0:6b244485c156 420 For greyscale PNGs, r, g and b will all 3 be set to the same. When encoding
unix_guru 0:6b244485c156 421 the encoder writes the red one. For palette PNGs: When decoding, the RGB value
unix_guru 0:6b244485c156 422 will be stored, not a palette index. But when encoding, specify the index of
unix_guru 0:6b244485c156 423 the palette in background_r, the other two are then ignored.
unix_guru 0:6b244485c156 424
unix_guru 0:6b244485c156 425 The decoder does not use this background color to edit the color of pixels.
unix_guru 0:6b244485c156 426 */
unix_guru 0:6b244485c156 427 unsigned background_defined; /*is a suggested background color given?*/
unix_guru 0:6b244485c156 428 unsigned background_r; /*red component of suggested background color*/
unix_guru 0:6b244485c156 429 unsigned background_g; /*green component of suggested background color*/
unix_guru 0:6b244485c156 430 unsigned background_b; /*blue component of suggested background color*/
unix_guru 0:6b244485c156 431
unix_guru 0:6b244485c156 432 /*
unix_guru 0:6b244485c156 433 non-international text chunks (tEXt and zTXt)
unix_guru 0:6b244485c156 434
unix_guru 0:6b244485c156 435 The char** arrays each contain num strings. The actual messages are in
unix_guru 0:6b244485c156 436 text_strings, while text_keys are keywords that give a short description what
unix_guru 0:6b244485c156 437 the actual text represents, e.g. Title, Author, Description, or anything else.
unix_guru 0:6b244485c156 438
unix_guru 0:6b244485c156 439 A keyword is minimum 1 character and maximum 79 characters long. It's
unix_guru 0:6b244485c156 440 discouraged to use a single line length longer than 79 characters for texts.
unix_guru 0:6b244485c156 441
unix_guru 0:6b244485c156 442 Don't allocate these text buffers yourself. Use the init/cleanup functions
unix_guru 0:6b244485c156 443 correctly and use lodepng_add_text and lodepng_clear_text.
unix_guru 0:6b244485c156 444 */
unix_guru 0:6b244485c156 445 size_t text_num; /*the amount of texts in these char** buffers (there may be more texts in itext)*/
unix_guru 0:6b244485c156 446 char** text_keys; /*the keyword of a text chunk (e.g. "Comment")*/
unix_guru 0:6b244485c156 447 char** text_strings; /*the actual text*/
unix_guru 0:6b244485c156 448
unix_guru 0:6b244485c156 449 /*
unix_guru 0:6b244485c156 450 international text chunks (iTXt)
unix_guru 0:6b244485c156 451 Similar to the non-international text chunks, but with additional strings
unix_guru 0:6b244485c156 452 "langtags" and "transkeys".
unix_guru 0:6b244485c156 453 */
unix_guru 0:6b244485c156 454 size_t itext_num; /*the amount of international texts in this PNG*/
unix_guru 0:6b244485c156 455 char** itext_keys; /*the English keyword of the text chunk (e.g. "Comment")*/
unix_guru 0:6b244485c156 456 char** itext_langtags; /*language tag for this text's language, ISO/IEC 646 string, e.g. ISO 639 language tag*/
unix_guru 0:6b244485c156 457 char** itext_transkeys; /*keyword translated to the international language - UTF-8 string*/
unix_guru 0:6b244485c156 458 char** itext_strings; /*the actual international text - UTF-8 string*/
unix_guru 0:6b244485c156 459
unix_guru 0:6b244485c156 460 /*time chunk (tIME)*/
unix_guru 0:6b244485c156 461 unsigned time_defined; /*set to 1 to make the encoder generate a tIME chunk*/
unix_guru 0:6b244485c156 462 LodePNGTime time;
unix_guru 0:6b244485c156 463
unix_guru 0:6b244485c156 464 /*phys chunk (pHYs)*/
unix_guru 0:6b244485c156 465 unsigned phys_defined; /*if 0, there is no pHYs chunk and the values below are undefined, if 1 else there is one*/
unix_guru 0:6b244485c156 466 unsigned phys_x; /*pixels per unit in x direction*/
unix_guru 0:6b244485c156 467 unsigned phys_y; /*pixels per unit in y direction*/
unix_guru 0:6b244485c156 468 unsigned phys_unit; /*may be 0 (unknown unit) or 1 (metre)*/
unix_guru 0:6b244485c156 469
unix_guru 0:6b244485c156 470 /*
unix_guru 0:6b244485c156 471 unknown chunks
unix_guru 0:6b244485c156 472 There are 3 buffers, one for each position in the PNG where unknown chunks can appear
unix_guru 0:6b244485c156 473 each buffer contains all unknown chunks for that position consecutively
unix_guru 0:6b244485c156 474 The 3 buffers are the unknown chunks between certain critical chunks:
unix_guru 0:6b244485c156 475 0: IHDR-PLTE, 1: PLTE-IDAT, 2: IDAT-IEND
unix_guru 0:6b244485c156 476 Do not allocate or traverse this data yourself. Use the chunk traversing functions declared
unix_guru 0:6b244485c156 477 later, such as lodepng_chunk_next and lodepng_chunk_append, to read/write this struct.
unix_guru 0:6b244485c156 478 */
unix_guru 0:6b244485c156 479 unsigned char* unknown_chunks_data[3];
unix_guru 0:6b244485c156 480 size_t unknown_chunks_size[3]; /*size in bytes of the unknown chunks, given for protection*/
unix_guru 0:6b244485c156 481 #endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
unix_guru 0:6b244485c156 482 } LodePNGInfo;
unix_guru 0:6b244485c156 483
unix_guru 0:6b244485c156 484 /*init, cleanup and copy functions to use with this struct*/
unix_guru 0:6b244485c156 485 void lodepng_info_init(LodePNGInfo* info);
unix_guru 0:6b244485c156 486 void lodepng_info_cleanup(LodePNGInfo* info);
unix_guru 0:6b244485c156 487 /*return value is error code (0 means no error)*/
unix_guru 0:6b244485c156 488 unsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source);
unix_guru 0:6b244485c156 489
unix_guru 0:6b244485c156 490 #ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
unix_guru 0:6b244485c156 491 void lodepng_clear_text(LodePNGInfo* info); /*use this to clear the texts again after you filled them in*/
unix_guru 0:6b244485c156 492 unsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char* str); /*push back both texts at once*/
unix_guru 0:6b244485c156 493
unix_guru 0:6b244485c156 494 void lodepng_clear_itext(LodePNGInfo* info); /*use this to clear the itexts again after you filled them in*/
unix_guru 0:6b244485c156 495 unsigned lodepng_add_itext(LodePNGInfo* info, const char* key, const char* langtag,
unix_guru 0:6b244485c156 496 const char* transkey, const char* str); /*push back the 4 texts of 1 chunk at once*/
unix_guru 0:6b244485c156 497 #endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
unix_guru 0:6b244485c156 498
unix_guru 0:6b244485c156 499 /*
unix_guru 0:6b244485c156 500 Converts raw buffer from one color type to another color type, based on
unix_guru 0:6b244485c156 501 LodePNGColorMode structs to describe the input and output color type.
unix_guru 0:6b244485c156 502 See the reference manual at the end of this header file to see which color conversions are supported.
unix_guru 0:6b244485c156 503 return value = LodePNG error code (0 if all went ok, an error if the conversion isn't supported)
unix_guru 0:6b244485c156 504 The out buffer must have size (w * h * bpp + 7) / 8, where bpp is the bits per pixel
unix_guru 0:6b244485c156 505 of the output color type (lodepng_get_bpp).
unix_guru 0:6b244485c156 506 For < 8 bpp images, there should not be padding bits at the end of scanlines.
unix_guru 0:6b244485c156 507 For 16-bit per channel colors, uses big endian format like PNG does.
unix_guru 0:6b244485c156 508 Return value is LodePNG error code
unix_guru 0:6b244485c156 509 */
unix_guru 0:6b244485c156 510 unsigned lodepng_convert(unsigned char* out, const unsigned char* in,
unix_guru 0:6b244485c156 511 const LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in,
unix_guru 0:6b244485c156 512 unsigned w, unsigned h);
unix_guru 0:6b244485c156 513
unix_guru 0:6b244485c156 514 #ifdef LODEPNG_COMPILE_DECODER
unix_guru 0:6b244485c156 515 /*
unix_guru 0:6b244485c156 516 Settings for the decoder. This contains settings for the PNG and the Zlib
unix_guru 0:6b244485c156 517 decoder, but not the Info settings from the Info structs.
unix_guru 0:6b244485c156 518 */
unix_guru 0:6b244485c156 519 typedef struct LodePNGDecoderSettings
unix_guru 0:6b244485c156 520 {
unix_guru 0:6b244485c156 521 LodePNGDecompressSettings zlibsettings; /*in here is the setting to ignore Adler32 checksums*/
unix_guru 0:6b244485c156 522
unix_guru 0:6b244485c156 523 unsigned ignore_crc; /*ignore CRC checksums*/
unix_guru 0:6b244485c156 524
unix_guru 0:6b244485c156 525 unsigned color_convert; /*whether to convert the PNG to the color type you want. Default: yes*/
unix_guru 0:6b244485c156 526
unix_guru 0:6b244485c156 527 #ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
unix_guru 0:6b244485c156 528 unsigned read_text_chunks; /*if false but remember_unknown_chunks is true, they're stored in the unknown chunks*/
unix_guru 0:6b244485c156 529 /*store all bytes from unknown chunks in the LodePNGInfo (off by default, useful for a png editor)*/
unix_guru 0:6b244485c156 530 unsigned remember_unknown_chunks;
unix_guru 0:6b244485c156 531 #endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
unix_guru 0:6b244485c156 532 } LodePNGDecoderSettings;
unix_guru 0:6b244485c156 533
unix_guru 0:6b244485c156 534 void lodepng_decoder_settings_init(LodePNGDecoderSettings* settings);
unix_guru 0:6b244485c156 535 #endif /*LODEPNG_COMPILE_DECODER*/
unix_guru 0:6b244485c156 536
unix_guru 0:6b244485c156 537 #ifdef LODEPNG_COMPILE_ENCODER
unix_guru 0:6b244485c156 538 /*automatically use color type with less bits per pixel if losslessly possible. Default: AUTO*/
unix_guru 0:6b244485c156 539 typedef enum LodePNGFilterStrategy
unix_guru 0:6b244485c156 540 {
unix_guru 0:6b244485c156 541 /*every filter at zero*/
unix_guru 0:6b244485c156 542 LFS_ZERO,
unix_guru 0:6b244485c156 543 /*Use filter that gives minimum sum, as described in the official PNG filter heuristic.*/
unix_guru 0:6b244485c156 544 LFS_MINSUM,
unix_guru 0:6b244485c156 545 /*Use the filter type that gives smallest Shannon entropy for this scanline. Depending
unix_guru 0:6b244485c156 546 on the image, this is better or worse than minsum.*/
unix_guru 0:6b244485c156 547 LFS_ENTROPY,
unix_guru 0:6b244485c156 548 /*
unix_guru 0:6b244485c156 549 Brute-force-search PNG filters by compressing each filter for each scanline.
unix_guru 0:6b244485c156 550 Experimental, very slow, and only rarely gives better compression than MINSUM.
unix_guru 0:6b244485c156 551 */
unix_guru 0:6b244485c156 552 LFS_BRUTE_FORCE,
unix_guru 0:6b244485c156 553 /*use predefined_filters buffer: you specify the filter type for each scanline*/
unix_guru 0:6b244485c156 554 LFS_PREDEFINED
unix_guru 0:6b244485c156 555 } LodePNGFilterStrategy;
unix_guru 0:6b244485c156 556
unix_guru 0:6b244485c156 557 /*Gives characteristics about the colors of the image, which helps decide which color model to use for encoding.
unix_guru 0:6b244485c156 558 Used internally by default if "auto_convert" is enabled. Public because it's useful for custom algorithms.*/
unix_guru 0:6b244485c156 559 typedef struct LodePNGColorProfile
unix_guru 0:6b244485c156 560 {
unix_guru 0:6b244485c156 561 unsigned colored; /*not greyscale*/
unix_guru 0:6b244485c156 562 unsigned key; /*if true, image is not opaque. Only if true and alpha is false, color key is possible.*/
unix_guru 0:6b244485c156 563 unsigned short key_r; /*these values are always in 16-bit bitdepth in the profile*/
unix_guru 0:6b244485c156 564 unsigned short key_g;
unix_guru 0:6b244485c156 565 unsigned short key_b;
unix_guru 0:6b244485c156 566 unsigned alpha; /*alpha channel or alpha palette required*/
unix_guru 0:6b244485c156 567 unsigned numcolors; /*amount of colors, up to 257. Not valid if bits == 16.*/
unix_guru 0:6b244485c156 568 unsigned char palette[1024]; /*Remembers up to the first 256 RGBA colors, in no particular order*/
unix_guru 0:6b244485c156 569 unsigned bits; /*bits per channel (not for palette). 1,2 or 4 for greyscale only. 16 if 16-bit per channel required.*/
unix_guru 0:6b244485c156 570 } LodePNGColorProfile;
unix_guru 0:6b244485c156 571
unix_guru 0:6b244485c156 572 void lodepng_color_profile_init(LodePNGColorProfile* profile);
unix_guru 0:6b244485c156 573
unix_guru 0:6b244485c156 574 /*Get a LodePNGColorProfile of the image.*/
unix_guru 0:6b244485c156 575 unsigned lodepng_get_color_profile(LodePNGColorProfile* profile,
unix_guru 0:6b244485c156 576 const unsigned char* image, unsigned w, unsigned h,
unix_guru 0:6b244485c156 577 const LodePNGColorMode* mode_in);
unix_guru 0:6b244485c156 578 /*The function LodePNG uses internally to decide the PNG color with auto_convert.
unix_guru 0:6b244485c156 579 Chooses an optimal color model, e.g. grey if only grey pixels, palette if < 256 colors, ...*/
unix_guru 0:6b244485c156 580 unsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out,
unix_guru 0:6b244485c156 581 const unsigned char* image, unsigned w, unsigned h,
unix_guru 0:6b244485c156 582 const LodePNGColorMode* mode_in);
unix_guru 0:6b244485c156 583
unix_guru 0:6b244485c156 584 /*Settings for the encoder.*/
unix_guru 0:6b244485c156 585 typedef struct LodePNGEncoderSettings
unix_guru 0:6b244485c156 586 {
unix_guru 0:6b244485c156 587 LodePNGCompressSettings zlibsettings; /*settings for the zlib encoder, such as window size, ...*/
unix_guru 0:6b244485c156 588
unix_guru 0:6b244485c156 589 unsigned auto_convert; /*automatically choose output PNG color type. Default: true*/
unix_guru 0:6b244485c156 590
unix_guru 0:6b244485c156 591 /*If true, follows the official PNG heuristic: if the PNG uses a palette or lower than
unix_guru 0:6b244485c156 592 8 bit depth, set all filters to zero. Otherwise use the filter_strategy. Note that to
unix_guru 0:6b244485c156 593 completely follow the official PNG heuristic, filter_palette_zero must be true and
unix_guru 0:6b244485c156 594 filter_strategy must be LFS_MINSUM*/
unix_guru 0:6b244485c156 595 unsigned filter_palette_zero;
unix_guru 0:6b244485c156 596 /*Which filter strategy to use when not using zeroes due to filter_palette_zero.
unix_guru 0:6b244485c156 597 Set filter_palette_zero to 0 to ensure always using your chosen strategy. Default: LFS_MINSUM*/
unix_guru 0:6b244485c156 598 LodePNGFilterStrategy filter_strategy;
unix_guru 0:6b244485c156 599 /*used if filter_strategy is LFS_PREDEFINED. In that case, this must point to a buffer with
unix_guru 0:6b244485c156 600 the same length as the amount of scanlines in the image, and each value must <= 5. You
unix_guru 0:6b244485c156 601 have to cleanup this buffer, LodePNG will never free it. Don't forget that filter_palette_zero
unix_guru 0:6b244485c156 602 must be set to 0 to ensure this is also used on palette or low bitdepth images.*/
unix_guru 0:6b244485c156 603 const unsigned char* predefined_filters;
unix_guru 0:6b244485c156 604
unix_guru 0:6b244485c156 605 /*force creating a PLTE chunk if colortype is 2 or 6 (= a suggested palette).
unix_guru 0:6b244485c156 606 If colortype is 3, PLTE is _always_ created.*/
unix_guru 0:6b244485c156 607 unsigned force_palette;
unix_guru 0:6b244485c156 608 #ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
unix_guru 0:6b244485c156 609 /*add LodePNG identifier and version as a text chunk, for debugging*/
unix_guru 0:6b244485c156 610 unsigned add_id;
unix_guru 0:6b244485c156 611 /*encode text chunks as zTXt chunks instead of tEXt chunks, and use compression in iTXt chunks*/
unix_guru 0:6b244485c156 612 unsigned text_compression;
unix_guru 0:6b244485c156 613 #endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
unix_guru 0:6b244485c156 614 } LodePNGEncoderSettings;
unix_guru 0:6b244485c156 615
unix_guru 0:6b244485c156 616 void lodepng_encoder_settings_init(LodePNGEncoderSettings* settings);
unix_guru 0:6b244485c156 617 #endif /*LODEPNG_COMPILE_ENCODER*/
unix_guru 0:6b244485c156 618
unix_guru 0:6b244485c156 619
unix_guru 0:6b244485c156 620 #if defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER)
unix_guru 0:6b244485c156 621 /*The settings, state and information for extended encoding and decoding.*/
unix_guru 0:6b244485c156 622 typedef struct LodePNGState
unix_guru 0:6b244485c156 623 {
unix_guru 0:6b244485c156 624 #ifdef LODEPNG_COMPILE_DECODER
unix_guru 0:6b244485c156 625 LodePNGDecoderSettings decoder; /*the decoding settings*/
unix_guru 0:6b244485c156 626 #endif /*LODEPNG_COMPILE_DECODER*/
unix_guru 0:6b244485c156 627 #ifdef LODEPNG_COMPILE_ENCODER
unix_guru 0:6b244485c156 628 LodePNGEncoderSettings encoder; /*the encoding settings*/
unix_guru 0:6b244485c156 629 #endif /*LODEPNG_COMPILE_ENCODER*/
unix_guru 0:6b244485c156 630 LodePNGColorMode info_raw; /*specifies the format in which you would like to get the raw pixel buffer*/
unix_guru 0:6b244485c156 631 LodePNGInfo info_png; /*info of the PNG image obtained after decoding*/
unix_guru 0:6b244485c156 632 unsigned error;
unix_guru 0:6b244485c156 633 #ifdef LODEPNG_COMPILE_CPP
unix_guru 0:6b244485c156 634 /* For the lodepng::State subclass. */
unix_guru 0:6b244485c156 635 virtual ~LodePNGState(){}
unix_guru 0:6b244485c156 636 #endif
unix_guru 0:6b244485c156 637 } LodePNGState;
unix_guru 0:6b244485c156 638
unix_guru 0:6b244485c156 639 /*init, cleanup and copy functions to use with this struct*/
unix_guru 0:6b244485c156 640 void lodepng_state_init(LodePNGState* state);
unix_guru 0:6b244485c156 641 void lodepng_state_cleanup(LodePNGState* state);
unix_guru 0:6b244485c156 642 void lodepng_state_copy(LodePNGState* dest, const LodePNGState* source);
unix_guru 0:6b244485c156 643 #endif /* defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) */
unix_guru 0:6b244485c156 644
unix_guru 0:6b244485c156 645 #ifdef LODEPNG_COMPILE_DECODER
unix_guru 0:6b244485c156 646 /*
unix_guru 0:6b244485c156 647 Same as lodepng_decode_memory, but uses a LodePNGState to allow custom settings and
unix_guru 0:6b244485c156 648 getting much more information about the PNG image and color mode.
unix_guru 0:6b244485c156 649 */
unix_guru 0:6b244485c156 650 unsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h,
unix_guru 0:6b244485c156 651 LodePNGState* state,
unix_guru 0:6b244485c156 652 const unsigned char* in, size_t insize);
unix_guru 0:6b244485c156 653
unix_guru 0:6b244485c156 654 /*
unix_guru 0:6b244485c156 655 Read the PNG header, but not the actual data. This returns only the information
unix_guru 0:6b244485c156 656 that is in the header chunk of the PNG, such as width, height and color type. The
unix_guru 0:6b244485c156 657 information is placed in the info_png field of the LodePNGState.
unix_guru 0:6b244485c156 658 */
unix_guru 0:6b244485c156 659 unsigned lodepng_inspect(unsigned* w, unsigned* h,
unix_guru 0:6b244485c156 660 LodePNGState* state,
unix_guru 0:6b244485c156 661 const unsigned char* in, size_t insize);
unix_guru 0:6b244485c156 662 #endif /*LODEPNG_COMPILE_DECODER*/
unix_guru 0:6b244485c156 663
unix_guru 0:6b244485c156 664
unix_guru 0:6b244485c156 665 #ifdef LODEPNG_COMPILE_ENCODER
unix_guru 0:6b244485c156 666 /*This function allocates the out buffer with standard malloc and stores the size in *outsize.*/
unix_guru 0:6b244485c156 667 unsigned lodepng_encode(unsigned char** out, size_t* outsize,
unix_guru 0:6b244485c156 668 const unsigned char* image, unsigned w, unsigned h,
unix_guru 0:6b244485c156 669 LodePNGState* state);
unix_guru 0:6b244485c156 670 #endif /*LODEPNG_COMPILE_ENCODER*/
unix_guru 0:6b244485c156 671
unix_guru 0:6b244485c156 672 /*
unix_guru 0:6b244485c156 673 The lodepng_chunk functions are normally not needed, except to traverse the
unix_guru 0:6b244485c156 674 unknown chunks stored in the LodePNGInfo struct, or add new ones to it.
unix_guru 0:6b244485c156 675 It also allows traversing the chunks of an encoded PNG file yourself.
unix_guru 0:6b244485c156 676
unix_guru 0:6b244485c156 677 PNG standard chunk naming conventions:
unix_guru 0:6b244485c156 678 First byte: uppercase = critical, lowercase = ancillary
unix_guru 0:6b244485c156 679 Second byte: uppercase = public, lowercase = private
unix_guru 0:6b244485c156 680 Third byte: must be uppercase
unix_guru 0:6b244485c156 681 Fourth byte: uppercase = unsafe to copy, lowercase = safe to copy
unix_guru 0:6b244485c156 682 */
unix_guru 0:6b244485c156 683
unix_guru 0:6b244485c156 684 /*
unix_guru 0:6b244485c156 685 Gets the length of the data of the chunk. Total chunk length has 12 bytes more.
unix_guru 0:6b244485c156 686 There must be at least 4 bytes to read from. If the result value is too large,
unix_guru 0:6b244485c156 687 it may be corrupt data.
unix_guru 0:6b244485c156 688 */
unix_guru 0:6b244485c156 689 unsigned lodepng_chunk_length(const unsigned char* chunk);
unix_guru 0:6b244485c156 690
unix_guru 0:6b244485c156 691 /*puts the 4-byte type in null terminated string*/
unix_guru 0:6b244485c156 692 void lodepng_chunk_type(char type[5], const unsigned char* chunk);
unix_guru 0:6b244485c156 693
unix_guru 0:6b244485c156 694 /*check if the type is the given type*/
unix_guru 0:6b244485c156 695 unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type);
unix_guru 0:6b244485c156 696
unix_guru 0:6b244485c156 697 /*0: it's one of the critical chunk types, 1: it's an ancillary chunk (see PNG standard)*/
unix_guru 0:6b244485c156 698 unsigned char lodepng_chunk_ancillary(const unsigned char* chunk);
unix_guru 0:6b244485c156 699
unix_guru 0:6b244485c156 700 /*0: public, 1: private (see PNG standard)*/
unix_guru 0:6b244485c156 701 unsigned char lodepng_chunk_private(const unsigned char* chunk);
unix_guru 0:6b244485c156 702
unix_guru 0:6b244485c156 703 /*0: the chunk is unsafe to copy, 1: the chunk is safe to copy (see PNG standard)*/
unix_guru 0:6b244485c156 704 unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk);
unix_guru 0:6b244485c156 705
unix_guru 0:6b244485c156 706 /*get pointer to the data of the chunk, where the input points to the header of the chunk*/
unix_guru 0:6b244485c156 707 unsigned char* lodepng_chunk_data(unsigned char* chunk);
unix_guru 0:6b244485c156 708 const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk);
unix_guru 0:6b244485c156 709
unix_guru 0:6b244485c156 710 /*returns 0 if the crc is correct, 1 if it's incorrect (0 for OK as usual!)*/
unix_guru 0:6b244485c156 711 unsigned lodepng_chunk_check_crc(const unsigned char* chunk);
unix_guru 0:6b244485c156 712
unix_guru 0:6b244485c156 713 /*generates the correct CRC from the data and puts it in the last 4 bytes of the chunk*/
unix_guru 0:6b244485c156 714 void lodepng_chunk_generate_crc(unsigned char* chunk);
unix_guru 0:6b244485c156 715
unix_guru 0:6b244485c156 716 /*iterate to next chunks. don't use on IEND chunk, as there is no next chunk then*/
unix_guru 0:6b244485c156 717 unsigned char* lodepng_chunk_next(unsigned char* chunk);
unix_guru 0:6b244485c156 718 const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk);
unix_guru 0:6b244485c156 719
unix_guru 0:6b244485c156 720 /*
unix_guru 0:6b244485c156 721 Appends chunk to the data in out. The given chunk should already have its chunk header.
unix_guru 0:6b244485c156 722 The out variable and outlength are updated to reflect the new reallocated buffer.
unix_guru 0:6b244485c156 723 Returns error code (0 if it went ok)
unix_guru 0:6b244485c156 724 */
unix_guru 0:6b244485c156 725 unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk);
unix_guru 0:6b244485c156 726
unix_guru 0:6b244485c156 727 /*
unix_guru 0:6b244485c156 728 Appends new chunk to out. The chunk to append is given by giving its length, type
unix_guru 0:6b244485c156 729 and data separately. The type is a 4-letter string.
unix_guru 0:6b244485c156 730 The out variable and outlength are updated to reflect the new reallocated buffer.
unix_guru 0:6b244485c156 731 Returne error code (0 if it went ok)
unix_guru 0:6b244485c156 732 */
unix_guru 0:6b244485c156 733 unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length,
unix_guru 0:6b244485c156 734 const char* type, const unsigned char* data);
unix_guru 0:6b244485c156 735
unix_guru 0:6b244485c156 736
unix_guru 0:6b244485c156 737 /*Calculate CRC32 of buffer*/
unix_guru 0:6b244485c156 738 unsigned lodepng_crc32(const unsigned char* buf, size_t len);
unix_guru 0:6b244485c156 739 #endif /*LODEPNG_COMPILE_PNG*/
unix_guru 0:6b244485c156 740
unix_guru 0:6b244485c156 741
unix_guru 0:6b244485c156 742 #ifdef LODEPNG_COMPILE_ZLIB
unix_guru 0:6b244485c156 743 /*
unix_guru 0:6b244485c156 744 This zlib part can be used independently to zlib compress and decompress a
unix_guru 0:6b244485c156 745 buffer. It cannot be used to create gzip files however, and it only supports the
unix_guru 0:6b244485c156 746 part of zlib that is required for PNG, it does not support dictionaries.
unix_guru 0:6b244485c156 747 */
unix_guru 0:6b244485c156 748
unix_guru 0:6b244485c156 749 #ifdef LODEPNG_COMPILE_DECODER
unix_guru 0:6b244485c156 750 /*Inflate a buffer. Inflate is the decompression step of deflate. Out buffer must be freed after use.*/
unix_guru 0:6b244485c156 751 unsigned lodepng_inflate(unsigned char** out, size_t* outsize,
unix_guru 0:6b244485c156 752 const unsigned char* in, size_t insize,
unix_guru 0:6b244485c156 753 const LodePNGDecompressSettings* settings);
unix_guru 0:6b244485c156 754
unix_guru 0:6b244485c156 755 /*
unix_guru 0:6b244485c156 756 Decompresses Zlib data. Reallocates the out buffer and appends the data. The
unix_guru 0:6b244485c156 757 data must be according to the zlib specification.
unix_guru 0:6b244485c156 758 Either, *out must be NULL and *outsize must be 0, or, *out must be a valid
unix_guru 0:6b244485c156 759 buffer and *outsize its size in bytes. out must be freed by user after usage.
unix_guru 0:6b244485c156 760 */
unix_guru 0:6b244485c156 761 unsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize,
unix_guru 0:6b244485c156 762 const unsigned char* in, size_t insize,
unix_guru 0:6b244485c156 763 const LodePNGDecompressSettings* settings);
unix_guru 0:6b244485c156 764 #endif /*LODEPNG_COMPILE_DECODER*/
unix_guru 0:6b244485c156 765
unix_guru 0:6b244485c156 766 #ifdef LODEPNG_COMPILE_ENCODER
unix_guru 0:6b244485c156 767 /*
unix_guru 0:6b244485c156 768 Compresses data with Zlib. Reallocates the out buffer and appends the data.
unix_guru 0:6b244485c156 769 Zlib adds a small header and trailer around the deflate data.
unix_guru 0:6b244485c156 770 The data is output in the format of the zlib specification.
unix_guru 0:6b244485c156 771 Either, *out must be NULL and *outsize must be 0, or, *out must be a valid
unix_guru 0:6b244485c156 772 buffer and *outsize its size in bytes. out must be freed by user after usage.
unix_guru 0:6b244485c156 773 */
unix_guru 0:6b244485c156 774 unsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize,
unix_guru 0:6b244485c156 775 const unsigned char* in, size_t insize,
unix_guru 0:6b244485c156 776 const LodePNGCompressSettings* settings);
unix_guru 0:6b244485c156 777
unix_guru 0:6b244485c156 778 /*
unix_guru 0:6b244485c156 779 Find length-limited Huffman code for given frequencies. This function is in the
unix_guru 0:6b244485c156 780 public interface only for tests, it's used internally by lodepng_deflate.
unix_guru 0:6b244485c156 781 */
unix_guru 0:6b244485c156 782 unsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned* frequencies,
unix_guru 0:6b244485c156 783 size_t numcodes, unsigned maxbitlen);
unix_guru 0:6b244485c156 784
unix_guru 0:6b244485c156 785 /*Compress a buffer with deflate. See RFC 1951. Out buffer must be freed after use.*/
unix_guru 0:6b244485c156 786 unsigned lodepng_deflate(unsigned char** out, size_t* outsize,
unix_guru 0:6b244485c156 787 const unsigned char* in, size_t insize,
unix_guru 0:6b244485c156 788 const LodePNGCompressSettings* settings);
unix_guru 0:6b244485c156 789
unix_guru 0:6b244485c156 790 #endif /*LODEPNG_COMPILE_ENCODER*/
unix_guru 0:6b244485c156 791 #endif /*LODEPNG_COMPILE_ZLIB*/
unix_guru 0:6b244485c156 792
unix_guru 0:6b244485c156 793 #ifdef LODEPNG_COMPILE_DISK
unix_guru 0:6b244485c156 794 /*
unix_guru 0:6b244485c156 795 Load a file from disk into buffer. The function allocates the out buffer, and
unix_guru 0:6b244485c156 796 after usage you should free it.
unix_guru 0:6b244485c156 797 out: output parameter, contains pointer to loaded buffer.
unix_guru 0:6b244485c156 798 outsize: output parameter, size of the allocated out buffer
unix_guru 0:6b244485c156 799 filename: the path to the file to load
unix_guru 0:6b244485c156 800 return value: error code (0 means ok)
unix_guru 0:6b244485c156 801 */
unix_guru 0:6b244485c156 802 unsigned lodepng_load_file(unsigned char** out, size_t* outsize, const char* filename);
unix_guru 0:6b244485c156 803
unix_guru 0:6b244485c156 804 /*
unix_guru 0:6b244485c156 805 Save a file from buffer to disk. Warning, if it exists, this function overwrites
unix_guru 0:6b244485c156 806 the file without warning!
unix_guru 0:6b244485c156 807 buffer: the buffer to write
unix_guru 0:6b244485c156 808 buffersize: size of the buffer to write
unix_guru 0:6b244485c156 809 filename: the path to the file to save to
unix_guru 0:6b244485c156 810 return value: error code (0 means ok)
unix_guru 0:6b244485c156 811 */
unix_guru 0:6b244485c156 812 unsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize, const char* filename);
unix_guru 0:6b244485c156 813 #endif /*LODEPNG_COMPILE_DISK*/
unix_guru 0:6b244485c156 814
unix_guru 0:6b244485c156 815 #ifdef LODEPNG_COMPILE_CPP
unix_guru 0:6b244485c156 816 /* The LodePNG C++ wrapper uses std::vectors instead of manually allocated memory buffers. */
unix_guru 0:6b244485c156 817 namespace lodepng
unix_guru 0:6b244485c156 818 {
unix_guru 0:6b244485c156 819 #ifdef LODEPNG_COMPILE_PNG
unix_guru 0:6b244485c156 820 class State : public LodePNGState
unix_guru 0:6b244485c156 821 {
unix_guru 0:6b244485c156 822 public:
unix_guru 0:6b244485c156 823 State();
unix_guru 0:6b244485c156 824 State(const State& other);
unix_guru 0:6b244485c156 825 virtual ~State();
unix_guru 0:6b244485c156 826 State& operator=(const State& other);
unix_guru 0:6b244485c156 827 };
unix_guru 0:6b244485c156 828
unix_guru 0:6b244485c156 829 #ifdef LODEPNG_COMPILE_DECODER
unix_guru 0:6b244485c156 830 /* Same as other lodepng::decode, but using a State for more settings and information. */
unix_guru 0:6b244485c156 831 unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
unix_guru 0:6b244485c156 832 State& state,
unix_guru 0:6b244485c156 833 const unsigned char* in, size_t insize);
unix_guru 0:6b244485c156 834 unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
unix_guru 0:6b244485c156 835 State& state,
unix_guru 0:6b244485c156 836 const std::vector<unsigned char>& in);
unix_guru 0:6b244485c156 837 #endif /*LODEPNG_COMPILE_DECODER*/
unix_guru 0:6b244485c156 838
unix_guru 0:6b244485c156 839 #ifdef LODEPNG_COMPILE_ENCODER
unix_guru 0:6b244485c156 840 /* Same as other lodepng::encode, but using a State for more settings and information. */
unix_guru 0:6b244485c156 841 unsigned encode(std::vector<unsigned char>& out,
unix_guru 0:6b244485c156 842 const unsigned char* in, unsigned w, unsigned h,
unix_guru 0:6b244485c156 843 State& state);
unix_guru 0:6b244485c156 844 unsigned encode(std::vector<unsigned char>& out,
unix_guru 0:6b244485c156 845 const std::vector<unsigned char>& in, unsigned w, unsigned h,
unix_guru 0:6b244485c156 846 State& state);
unix_guru 0:6b244485c156 847 #endif /*LODEPNG_COMPILE_ENCODER*/
unix_guru 0:6b244485c156 848
unix_guru 0:6b244485c156 849 #ifdef LODEPNG_COMPILE_DISK
unix_guru 0:6b244485c156 850 /*
unix_guru 0:6b244485c156 851 Load a file from disk into an std::vector.
unix_guru 0:6b244485c156 852 return value: error code (0 means ok)
unix_guru 0:6b244485c156 853 */
unix_guru 0:6b244485c156 854 unsigned load_file(std::vector<unsigned char>& buffer, const std::string& filename);
unix_guru 0:6b244485c156 855
unix_guru 0:6b244485c156 856 /*
unix_guru 0:6b244485c156 857 Save the binary data in an std::vector to a file on disk. The file is overwritten
unix_guru 0:6b244485c156 858 without warning.
unix_guru 0:6b244485c156 859 */
unix_guru 0:6b244485c156 860 unsigned save_file(const std::vector<unsigned char>& buffer, const std::string& filename);
unix_guru 0:6b244485c156 861 #endif /* LODEPNG_COMPILE_DISK */
unix_guru 0:6b244485c156 862 #endif /* LODEPNG_COMPILE_PNG */
unix_guru 0:6b244485c156 863
unix_guru 0:6b244485c156 864 #ifdef LODEPNG_COMPILE_ZLIB
unix_guru 0:6b244485c156 865 #ifdef LODEPNG_COMPILE_DECODER
unix_guru 0:6b244485c156 866 /* Zlib-decompress an unsigned char buffer */
unix_guru 0:6b244485c156 867 unsigned decompress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,
unix_guru 0:6b244485c156 868 const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings);
unix_guru 0:6b244485c156 869
unix_guru 0:6b244485c156 870 /* Zlib-decompress an std::vector */
unix_guru 0:6b244485c156 871 unsigned decompress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,
unix_guru 0:6b244485c156 872 const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings);
unix_guru 0:6b244485c156 873 #endif /* LODEPNG_COMPILE_DECODER */
unix_guru 0:6b244485c156 874
unix_guru 0:6b244485c156 875 #ifdef LODEPNG_COMPILE_ENCODER
unix_guru 0:6b244485c156 876 /* Zlib-compress an unsigned char buffer */
unix_guru 0:6b244485c156 877 unsigned compress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,
unix_guru 0:6b244485c156 878 const LodePNGCompressSettings& settings = lodepng_default_compress_settings);
unix_guru 0:6b244485c156 879
unix_guru 0:6b244485c156 880 /* Zlib-compress an std::vector */
unix_guru 0:6b244485c156 881 unsigned compress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,
unix_guru 0:6b244485c156 882 const LodePNGCompressSettings& settings = lodepng_default_compress_settings);
unix_guru 0:6b244485c156 883 #endif /* LODEPNG_COMPILE_ENCODER */
unix_guru 0:6b244485c156 884 #endif /* LODEPNG_COMPILE_ZLIB */
unix_guru 0:6b244485c156 885 } /* namespace lodepng */
unix_guru 0:6b244485c156 886 #endif /*LODEPNG_COMPILE_CPP*/
unix_guru 0:6b244485c156 887
unix_guru 0:6b244485c156 888 /*
unix_guru 0:6b244485c156 889 TODO:
unix_guru 0:6b244485c156 890 [.] test if there are no memory leaks or security exploits - done a lot but needs to be checked often
unix_guru 0:6b244485c156 891 [.] check compatibility with various compilers - done but needs to be redone for every newer version
unix_guru 0:6b244485c156 892 [X] converting color to 16-bit per channel types
unix_guru 0:6b244485c156 893 [ ] read all public PNG chunk types (but never let the color profile and gamma ones touch RGB values)
unix_guru 0:6b244485c156 894 [ ] make sure encoder generates no chunks with size > (2^31)-1
unix_guru 0:6b244485c156 895 [ ] partial decoding (stream processing)
unix_guru 0:6b244485c156 896 [X] let the "isFullyOpaque" function check color keys and transparent palettes too
unix_guru 0:6b244485c156 897 [X] better name for the variables "codes", "codesD", "codelengthcodes", "clcl" and "lldl"
unix_guru 0:6b244485c156 898 [ ] don't stop decoding on errors like 69, 57, 58 (make warnings)
unix_guru 0:6b244485c156 899 [ ] let the C++ wrapper catch exceptions coming from the standard library and return LodePNG error codes
unix_guru 0:6b244485c156 900 [ ] allow user to provide custom color conversion functions, e.g. for premultiplied alpha, padding bits or not, ...
unix_guru 0:6b244485c156 901 [ ] allow user to give data (void*) to custom allocator
unix_guru 0:6b244485c156 902 */
unix_guru 0:6b244485c156 903
unix_guru 0:6b244485c156 904 #endif /*LODEPNG_H inclusion guard*/
unix_guru 0:6b244485c156 905
unix_guru 0:6b244485c156 906 /*
unix_guru 0:6b244485c156 907 LodePNG Documentation
unix_guru 0:6b244485c156 908 ---------------------
unix_guru 0:6b244485c156 909
unix_guru 0:6b244485c156 910 0. table of contents
unix_guru 0:6b244485c156 911 --------------------
unix_guru 0:6b244485c156 912
unix_guru 0:6b244485c156 913 1. about
unix_guru 0:6b244485c156 914 1.1. supported features
unix_guru 0:6b244485c156 915 1.2. features not supported
unix_guru 0:6b244485c156 916 2. C and C++ version
unix_guru 0:6b244485c156 917 3. security
unix_guru 0:6b244485c156 918 4. decoding
unix_guru 0:6b244485c156 919 5. encoding
unix_guru 0:6b244485c156 920 6. color conversions
unix_guru 0:6b244485c156 921 6.1. PNG color types
unix_guru 0:6b244485c156 922 6.2. color conversions
unix_guru 0:6b244485c156 923 6.3. padding bits
unix_guru 0:6b244485c156 924 6.4. A note about 16-bits per channel and endianness
unix_guru 0:6b244485c156 925 7. error values
unix_guru 0:6b244485c156 926 8. chunks and PNG editing
unix_guru 0:6b244485c156 927 9. compiler support
unix_guru 0:6b244485c156 928 10. examples
unix_guru 0:6b244485c156 929 10.1. decoder C++ example
unix_guru 0:6b244485c156 930 10.2. decoder C example
unix_guru 0:6b244485c156 931 11. state settings reference
unix_guru 0:6b244485c156 932 12. changes
unix_guru 0:6b244485c156 933 13. contact information
unix_guru 0:6b244485c156 934
unix_guru 0:6b244485c156 935
unix_guru 0:6b244485c156 936 1. about
unix_guru 0:6b244485c156 937 --------
unix_guru 0:6b244485c156 938
unix_guru 0:6b244485c156 939 PNG is a file format to store raster images losslessly with good compression,
unix_guru 0:6b244485c156 940 supporting different color types and alpha channel.
unix_guru 0:6b244485c156 941
unix_guru 0:6b244485c156 942 LodePNG is a PNG codec according to the Portable Network Graphics (PNG)
unix_guru 0:6b244485c156 943 Specification (Second Edition) - W3C Recommendation 10 November 2003.
unix_guru 0:6b244485c156 944
unix_guru 0:6b244485c156 945 The specifications used are:
unix_guru 0:6b244485c156 946
unix_guru 0:6b244485c156 947 *) Portable Network Graphics (PNG) Specification (Second Edition):
unix_guru 0:6b244485c156 948 http://www.w3.org/TR/2003/REC-PNG-20031110
unix_guru 0:6b244485c156 949 *) RFC 1950 ZLIB Compressed Data Format version 3.3:
unix_guru 0:6b244485c156 950 http://www.gzip.org/zlib/rfc-zlib.html
unix_guru 0:6b244485c156 951 *) RFC 1951 DEFLATE Compressed Data Format Specification ver 1.3:
unix_guru 0:6b244485c156 952 http://www.gzip.org/zlib/rfc-deflate.html
unix_guru 0:6b244485c156 953
unix_guru 0:6b244485c156 954 The most recent version of LodePNG can currently be found at
unix_guru 0:6b244485c156 955 http://lodev.org/lodepng/
unix_guru 0:6b244485c156 956
unix_guru 0:6b244485c156 957 LodePNG works both in C (ISO C90) and C++, with a C++ wrapper that adds
unix_guru 0:6b244485c156 958 extra functionality.
unix_guru 0:6b244485c156 959
unix_guru 0:6b244485c156 960 LodePNG exists out of two files:
unix_guru 0:6b244485c156 961 -lodepng.h: the header file for both C and C++
unix_guru 0:6b244485c156 962 -lodepng.c(pp): give it the name lodepng.c or lodepng.cpp (or .cc) depending on your usage
unix_guru 0:6b244485c156 963
unix_guru 0:6b244485c156 964 If you want to start using LodePNG right away without reading this doc, get the
unix_guru 0:6b244485c156 965 examples from the LodePNG website to see how to use it in code, or check the
unix_guru 0:6b244485c156 966 smaller examples in chapter 13 here.
unix_guru 0:6b244485c156 967
unix_guru 0:6b244485c156 968 LodePNG is simple but only supports the basic requirements. To achieve
unix_guru 0:6b244485c156 969 simplicity, the following design choices were made: There are no dependencies
unix_guru 0:6b244485c156 970 on any external library. There are functions to decode and encode a PNG with
unix_guru 0:6b244485c156 971 a single function call, and extended versions of these functions taking a
unix_guru 0:6b244485c156 972 LodePNGState struct allowing to specify or get more information. By default
unix_guru 0:6b244485c156 973 the colors of the raw image are always RGB or RGBA, no matter what color type
unix_guru 0:6b244485c156 974 the PNG file uses. To read and write files, there are simple functions to
unix_guru 0:6b244485c156 975 convert the files to/from buffers in memory.
unix_guru 0:6b244485c156 976
unix_guru 0:6b244485c156 977 This all makes LodePNG suitable for loading textures in games, demos and small
unix_guru 0:6b244485c156 978 programs, ... It's less suitable for full fledged image editors, loading PNGs
unix_guru 0:6b244485c156 979 over network (it requires all the image data to be available before decoding can
unix_guru 0:6b244485c156 980 begin), life-critical systems, ...
unix_guru 0:6b244485c156 981
unix_guru 0:6b244485c156 982 1.1. supported features
unix_guru 0:6b244485c156 983 -----------------------
unix_guru 0:6b244485c156 984
unix_guru 0:6b244485c156 985 The following features are supported by the decoder:
unix_guru 0:6b244485c156 986
unix_guru 0:6b244485c156 987 *) decoding of PNGs with any color type, bit depth and interlace mode, to a 24- or 32-bit color raw image,
unix_guru 0:6b244485c156 988 or the same color type as the PNG
unix_guru 0:6b244485c156 989 *) encoding of PNGs, from any raw image to 24- or 32-bit color, or the same color type as the raw image
unix_guru 0:6b244485c156 990 *) Adam7 interlace and deinterlace for any color type
unix_guru 0:6b244485c156 991 *) loading the image from harddisk or decoding it from a buffer from other sources than harddisk
unix_guru 0:6b244485c156 992 *) support for alpha channels, including RGBA color model, translucent palettes and color keying
unix_guru 0:6b244485c156 993 *) zlib decompression (inflate)
unix_guru 0:6b244485c156 994 *) zlib compression (deflate)
unix_guru 0:6b244485c156 995 *) CRC32 and ADLER32 checksums
unix_guru 0:6b244485c156 996 *) handling of unknown chunks, allowing making a PNG editor that stores custom and unknown chunks.
unix_guru 0:6b244485c156 997 *) the following chunks are supported (generated/interpreted) by both encoder and decoder:
unix_guru 0:6b244485c156 998 IHDR: header information
unix_guru 0:6b244485c156 999 PLTE: color palette
unix_guru 0:6b244485c156 1000 IDAT: pixel data
unix_guru 0:6b244485c156 1001 IEND: the final chunk
unix_guru 0:6b244485c156 1002 tRNS: transparency for palettized images
unix_guru 0:6b244485c156 1003 tEXt: textual information
unix_guru 0:6b244485c156 1004 zTXt: compressed textual information
unix_guru 0:6b244485c156 1005 iTXt: international textual information
unix_guru 0:6b244485c156 1006 bKGD: suggested background color
unix_guru 0:6b244485c156 1007 pHYs: physical dimensions
unix_guru 0:6b244485c156 1008 tIME: modification time
unix_guru 0:6b244485c156 1009
unix_guru 0:6b244485c156 1010 1.2. features not supported
unix_guru 0:6b244485c156 1011 ---------------------------
unix_guru 0:6b244485c156 1012
unix_guru 0:6b244485c156 1013 The following features are _not_ supported:
unix_guru 0:6b244485c156 1014
unix_guru 0:6b244485c156 1015 *) some features needed to make a conformant PNG-Editor might be still missing.
unix_guru 0:6b244485c156 1016 *) partial loading/stream processing. All data must be available and is processed in one call.
unix_guru 0:6b244485c156 1017 *) The following public chunks are not supported but treated as unknown chunks by LodePNG
unix_guru 0:6b244485c156 1018 cHRM, gAMA, iCCP, sRGB, sBIT, hIST, sPLT
unix_guru 0:6b244485c156 1019 Some of these are not supported on purpose: LodePNG wants to provide the RGB values
unix_guru 0:6b244485c156 1020 stored in the pixels, not values modified by system dependent gamma or color models.
unix_guru 0:6b244485c156 1021
unix_guru 0:6b244485c156 1022
unix_guru 0:6b244485c156 1023 2. C and C++ version
unix_guru 0:6b244485c156 1024 --------------------
unix_guru 0:6b244485c156 1025
unix_guru 0:6b244485c156 1026 The C version uses buffers allocated with alloc that you need to free()
unix_guru 0:6b244485c156 1027 yourself. You need to use init and cleanup functions for each struct whenever
unix_guru 0:6b244485c156 1028 using a struct from the C version to avoid exploits and memory leaks.
unix_guru 0:6b244485c156 1029
unix_guru 0:6b244485c156 1030 The C++ version has extra functions with std::vectors in the interface and the
unix_guru 0:6b244485c156 1031 lodepng::State class which is a LodePNGState with constructor and destructor.
unix_guru 0:6b244485c156 1032
unix_guru 0:6b244485c156 1033 These files work without modification for both C and C++ compilers because all
unix_guru 0:6b244485c156 1034 the additional C++ code is in "#ifdef __cplusplus" blocks that make C-compilers
unix_guru 0:6b244485c156 1035 ignore it, and the C code is made to compile both with strict ISO C90 and C++.
unix_guru 0:6b244485c156 1036
unix_guru 0:6b244485c156 1037 To use the C++ version, you need to rename the source file to lodepng.cpp
unix_guru 0:6b244485c156 1038 (instead of lodepng.c), and compile it with a C++ compiler.
unix_guru 0:6b244485c156 1039
unix_guru 0:6b244485c156 1040 To use the C version, you need to rename the source file to lodepng.c (instead
unix_guru 0:6b244485c156 1041 of lodepng.cpp), and compile it with a C compiler.
unix_guru 0:6b244485c156 1042
unix_guru 0:6b244485c156 1043
unix_guru 0:6b244485c156 1044 3. Security
unix_guru 0:6b244485c156 1045 -----------
unix_guru 0:6b244485c156 1046
unix_guru 0:6b244485c156 1047 Even if carefully designed, it's always possible that LodePNG contains possible
unix_guru 0:6b244485c156 1048 exploits. If you discover one, please let me know, and it will be fixed.
unix_guru 0:6b244485c156 1049
unix_guru 0:6b244485c156 1050 When using LodePNG, care has to be taken with the C version of LodePNG, as well
unix_guru 0:6b244485c156 1051 as the C-style structs when working with C++. The following conventions are used
unix_guru 0:6b244485c156 1052 for all C-style structs:
unix_guru 0:6b244485c156 1053
unix_guru 0:6b244485c156 1054 -if a struct has a corresponding init function, always call the init function when making a new one
unix_guru 0:6b244485c156 1055 -if a struct has a corresponding cleanup function, call it before the struct disappears to avoid memory leaks
unix_guru 0:6b244485c156 1056 -if a struct has a corresponding copy function, use the copy function instead of "=".
unix_guru 0:6b244485c156 1057 The destination must also be inited already.
unix_guru 0:6b244485c156 1058
unix_guru 0:6b244485c156 1059
unix_guru 0:6b244485c156 1060 4. Decoding
unix_guru 0:6b244485c156 1061 -----------
unix_guru 0:6b244485c156 1062
unix_guru 0:6b244485c156 1063 Decoding converts a PNG compressed image to a raw pixel buffer.
unix_guru 0:6b244485c156 1064
unix_guru 0:6b244485c156 1065 Most documentation on using the decoder is at its declarations in the header
unix_guru 0:6b244485c156 1066 above. For C, simple decoding can be done with functions such as
unix_guru 0:6b244485c156 1067 lodepng_decode32, and more advanced decoding can be done with the struct
unix_guru 0:6b244485c156 1068 LodePNGState and lodepng_decode. For C++, all decoding can be done with the
unix_guru 0:6b244485c156 1069 various lodepng::decode functions, and lodepng::State can be used for advanced
unix_guru 0:6b244485c156 1070 features.
unix_guru 0:6b244485c156 1071
unix_guru 0:6b244485c156 1072 When using the LodePNGState, it uses the following fields for decoding:
unix_guru 0:6b244485c156 1073 *) LodePNGInfo info_png: it stores extra information about the PNG (the input) in here
unix_guru 0:6b244485c156 1074 *) LodePNGColorMode info_raw: here you can say what color mode of the raw image (the output) you want to get
unix_guru 0:6b244485c156 1075 *) LodePNGDecoderSettings decoder: you can specify a few extra settings for the decoder to use
unix_guru 0:6b244485c156 1076
unix_guru 0:6b244485c156 1077 LodePNGInfo info_png
unix_guru 0:6b244485c156 1078 --------------------
unix_guru 0:6b244485c156 1079
unix_guru 0:6b244485c156 1080 After decoding, this contains extra information of the PNG image, except the actual
unix_guru 0:6b244485c156 1081 pixels, width and height because these are already gotten directly from the decoder
unix_guru 0:6b244485c156 1082 functions.
unix_guru 0:6b244485c156 1083
unix_guru 0:6b244485c156 1084 It contains for example the original color type of the PNG image, text comments,
unix_guru 0:6b244485c156 1085 suggested background color, etc... More details about the LodePNGInfo struct are
unix_guru 0:6b244485c156 1086 at its declaration documentation.
unix_guru 0:6b244485c156 1087
unix_guru 0:6b244485c156 1088 LodePNGColorMode info_raw
unix_guru 0:6b244485c156 1089 -------------------------
unix_guru 0:6b244485c156 1090
unix_guru 0:6b244485c156 1091 When decoding, here you can specify which color type you want
unix_guru 0:6b244485c156 1092 the resulting raw image to be. If this is different from the colortype of the
unix_guru 0:6b244485c156 1093 PNG, then the decoder will automatically convert the result. This conversion
unix_guru 0:6b244485c156 1094 always works, except if you want it to convert a color PNG to greyscale or to
unix_guru 0:6b244485c156 1095 a palette with missing colors.
unix_guru 0:6b244485c156 1096
unix_guru 0:6b244485c156 1097 By default, 32-bit color is used for the result.
unix_guru 0:6b244485c156 1098
unix_guru 0:6b244485c156 1099 LodePNGDecoderSettings decoder
unix_guru 0:6b244485c156 1100 ------------------------------
unix_guru 0:6b244485c156 1101
unix_guru 0:6b244485c156 1102 The settings can be used to ignore the errors created by invalid CRC and Adler32
unix_guru 0:6b244485c156 1103 chunks, and to disable the decoding of tEXt chunks.
unix_guru 0:6b244485c156 1104
unix_guru 0:6b244485c156 1105 There's also a setting color_convert, true by default. If false, no conversion
unix_guru 0:6b244485c156 1106 is done, the resulting data will be as it was in the PNG (after decompression)
unix_guru 0:6b244485c156 1107 and you'll have to puzzle the colors of the pixels together yourself using the
unix_guru 0:6b244485c156 1108 color type information in the LodePNGInfo.
unix_guru 0:6b244485c156 1109
unix_guru 0:6b244485c156 1110
unix_guru 0:6b244485c156 1111 5. Encoding
unix_guru 0:6b244485c156 1112 -----------
unix_guru 0:6b244485c156 1113
unix_guru 0:6b244485c156 1114 Encoding converts a raw pixel buffer to a PNG compressed image.
unix_guru 0:6b244485c156 1115
unix_guru 0:6b244485c156 1116 Most documentation on using the encoder is at its declarations in the header
unix_guru 0:6b244485c156 1117 above. For C, simple encoding can be done with functions such as
unix_guru 0:6b244485c156 1118 lodepng_encode32, and more advanced decoding can be done with the struct
unix_guru 0:6b244485c156 1119 LodePNGState and lodepng_encode. For C++, all encoding can be done with the
unix_guru 0:6b244485c156 1120 various lodepng::encode functions, and lodepng::State can be used for advanced
unix_guru 0:6b244485c156 1121 features.
unix_guru 0:6b244485c156 1122
unix_guru 0:6b244485c156 1123 Like the decoder, the encoder can also give errors. However it gives less errors
unix_guru 0:6b244485c156 1124 since the encoder input is trusted, the decoder input (a PNG image that could
unix_guru 0:6b244485c156 1125 be forged by anyone) is not trusted.
unix_guru 0:6b244485c156 1126
unix_guru 0:6b244485c156 1127 When using the LodePNGState, it uses the following fields for encoding:
unix_guru 0:6b244485c156 1128 *) LodePNGInfo info_png: here you specify how you want the PNG (the output) to be.
unix_guru 0:6b244485c156 1129 *) LodePNGColorMode info_raw: here you say what color type of the raw image (the input) has
unix_guru 0:6b244485c156 1130 *) LodePNGEncoderSettings encoder: you can specify a few settings for the encoder to use
unix_guru 0:6b244485c156 1131
unix_guru 0:6b244485c156 1132 LodePNGInfo info_png
unix_guru 0:6b244485c156 1133 --------------------
unix_guru 0:6b244485c156 1134
unix_guru 0:6b244485c156 1135 When encoding, you use this the opposite way as when decoding: for encoding,
unix_guru 0:6b244485c156 1136 you fill in the values you want the PNG to have before encoding. By default it's
unix_guru 0:6b244485c156 1137 not needed to specify a color type for the PNG since it's automatically chosen,
unix_guru 0:6b244485c156 1138 but it's possible to choose it yourself given the right settings.
unix_guru 0:6b244485c156 1139
unix_guru 0:6b244485c156 1140 The encoder will not always exactly match the LodePNGInfo struct you give,
unix_guru 0:6b244485c156 1141 it tries as close as possible. Some things are ignored by the encoder. The
unix_guru 0:6b244485c156 1142 encoder uses, for example, the following settings from it when applicable:
unix_guru 0:6b244485c156 1143 colortype and bitdepth, text chunks, time chunk, the color key, the palette, the
unix_guru 0:6b244485c156 1144 background color, the interlace method, unknown chunks, ...
unix_guru 0:6b244485c156 1145
unix_guru 0:6b244485c156 1146 When encoding to a PNG with colortype 3, the encoder will generate a PLTE chunk.
unix_guru 0:6b244485c156 1147 If the palette contains any colors for which the alpha channel is not 255 (so
unix_guru 0:6b244485c156 1148 there are translucent colors in the palette), it'll add a tRNS chunk.
unix_guru 0:6b244485c156 1149
unix_guru 0:6b244485c156 1150 LodePNGColorMode info_raw
unix_guru 0:6b244485c156 1151 -------------------------
unix_guru 0:6b244485c156 1152
unix_guru 0:6b244485c156 1153 You specify the color type of the raw image that you give to the input here,
unix_guru 0:6b244485c156 1154 including a possible transparent color key and palette you happen to be using in
unix_guru 0:6b244485c156 1155 your raw image data.
unix_guru 0:6b244485c156 1156
unix_guru 0:6b244485c156 1157 By default, 32-bit color is assumed, meaning your input has to be in RGBA
unix_guru 0:6b244485c156 1158 format with 4 bytes (unsigned chars) per pixel.
unix_guru 0:6b244485c156 1159
unix_guru 0:6b244485c156 1160 LodePNGEncoderSettings encoder
unix_guru 0:6b244485c156 1161 ------------------------------
unix_guru 0:6b244485c156 1162
unix_guru 0:6b244485c156 1163 The following settings are supported (some are in sub-structs):
unix_guru 0:6b244485c156 1164 *) auto_convert: when this option is enabled, the encoder will
unix_guru 0:6b244485c156 1165 automatically choose the smallest possible color mode (including color key) that
unix_guru 0:6b244485c156 1166 can encode the colors of all pixels without information loss.
unix_guru 0:6b244485c156 1167 *) btype: the block type for LZ77. 0 = uncompressed, 1 = fixed huffman tree,
unix_guru 0:6b244485c156 1168 2 = dynamic huffman tree (best compression). Should be 2 for proper
unix_guru 0:6b244485c156 1169 compression.
unix_guru 0:6b244485c156 1170 *) use_lz77: whether or not to use LZ77 for compressed block types. Should be
unix_guru 0:6b244485c156 1171 true for proper compression.
unix_guru 0:6b244485c156 1172 *) windowsize: the window size used by the LZ77 encoder (1 - 32768). Has value
unix_guru 0:6b244485c156 1173 2048 by default, but can be set to 32768 for better, but slow, compression.
unix_guru 0:6b244485c156 1174 *) force_palette: if colortype is 2 or 6, you can make the encoder write a PLTE
unix_guru 0:6b244485c156 1175 chunk if force_palette is true. This can used as suggested palette to convert
unix_guru 0:6b244485c156 1176 to by viewers that don't support more than 256 colors (if those still exist)
unix_guru 0:6b244485c156 1177 *) add_id: add text chunk "Encoder: LodePNG <version>" to the image.
unix_guru 0:6b244485c156 1178 *) text_compression: default 1. If 1, it'll store texts as zTXt instead of tEXt chunks.
unix_guru 0:6b244485c156 1179 zTXt chunks use zlib compression on the text. This gives a smaller result on
unix_guru 0:6b244485c156 1180 large texts but a larger result on small texts (such as a single program name).
unix_guru 0:6b244485c156 1181 It's all tEXt or all zTXt though, there's no separate setting per text yet.
unix_guru 0:6b244485c156 1182
unix_guru 0:6b244485c156 1183
unix_guru 0:6b244485c156 1184 6. color conversions
unix_guru 0:6b244485c156 1185 --------------------
unix_guru 0:6b244485c156 1186
unix_guru 0:6b244485c156 1187 An important thing to note about LodePNG, is that the color type of the PNG, and
unix_guru 0:6b244485c156 1188 the color type of the raw image, are completely independent. By default, when
unix_guru 0:6b244485c156 1189 you decode a PNG, you get the result as a raw image in the color type you want,
unix_guru 0:6b244485c156 1190 no matter whether the PNG was encoded with a palette, greyscale or RGBA color.
unix_guru 0:6b244485c156 1191 And if you encode an image, by default LodePNG will automatically choose the PNG
unix_guru 0:6b244485c156 1192 color type that gives good compression based on the values of colors and amount
unix_guru 0:6b244485c156 1193 of colors in the image. It can be configured to let you control it instead as
unix_guru 0:6b244485c156 1194 well, though.
unix_guru 0:6b244485c156 1195
unix_guru 0:6b244485c156 1196 To be able to do this, LodePNG does conversions from one color mode to another.
unix_guru 0:6b244485c156 1197 It can convert from almost any color type to any other color type, except the
unix_guru 0:6b244485c156 1198 following conversions: RGB to greyscale is not supported, and converting to a
unix_guru 0:6b244485c156 1199 palette when the palette doesn't have a required color is not supported. This is
unix_guru 0:6b244485c156 1200 not supported on purpose: this is information loss which requires a color
unix_guru 0:6b244485c156 1201 reduction algorithm that is beyong the scope of a PNG encoder (yes, RGB to grey
unix_guru 0:6b244485c156 1202 is easy, but there are multiple ways if you want to give some channels more
unix_guru 0:6b244485c156 1203 weight).
unix_guru 0:6b244485c156 1204
unix_guru 0:6b244485c156 1205 By default, when decoding, you get the raw image in 32-bit RGBA or 24-bit RGB
unix_guru 0:6b244485c156 1206 color, no matter what color type the PNG has. And by default when encoding,
unix_guru 0:6b244485c156 1207 LodePNG automatically picks the best color model for the output PNG, and expects
unix_guru 0:6b244485c156 1208 the input image to be 32-bit RGBA or 24-bit RGB. So, unless you want to control
unix_guru 0:6b244485c156 1209 the color format of the images yourself, you can skip this chapter.
unix_guru 0:6b244485c156 1210
unix_guru 0:6b244485c156 1211 6.1. PNG color types
unix_guru 0:6b244485c156 1212 --------------------
unix_guru 0:6b244485c156 1213
unix_guru 0:6b244485c156 1214 A PNG image can have many color types, ranging from 1-bit color to 64-bit color,
unix_guru 0:6b244485c156 1215 as well as palettized color modes. After the zlib decompression and unfiltering
unix_guru 0:6b244485c156 1216 in the PNG image is done, the raw pixel data will have that color type and thus
unix_guru 0:6b244485c156 1217 a certain amount of bits per pixel. If you want the output raw image after
unix_guru 0:6b244485c156 1218 decoding to have another color type, a conversion is done by LodePNG.
unix_guru 0:6b244485c156 1219
unix_guru 0:6b244485c156 1220 The PNG specification gives the following color types:
unix_guru 0:6b244485c156 1221
unix_guru 0:6b244485c156 1222 0: greyscale, bit depths 1, 2, 4, 8, 16
unix_guru 0:6b244485c156 1223 2: RGB, bit depths 8 and 16
unix_guru 0:6b244485c156 1224 3: palette, bit depths 1, 2, 4 and 8
unix_guru 0:6b244485c156 1225 4: greyscale with alpha, bit depths 8 and 16
unix_guru 0:6b244485c156 1226 6: RGBA, bit depths 8 and 16
unix_guru 0:6b244485c156 1227
unix_guru 0:6b244485c156 1228 Bit depth is the amount of bits per pixel per color channel. So the total amount
unix_guru 0:6b244485c156 1229 of bits per pixel is: amount of channels * bitdepth.
unix_guru 0:6b244485c156 1230
unix_guru 0:6b244485c156 1231 6.2. color conversions
unix_guru 0:6b244485c156 1232 ----------------------
unix_guru 0:6b244485c156 1233
unix_guru 0:6b244485c156 1234 As explained in the sections about the encoder and decoder, you can specify
unix_guru 0:6b244485c156 1235 color types and bit depths in info_png and info_raw to change the default
unix_guru 0:6b244485c156 1236 behaviour.
unix_guru 0:6b244485c156 1237
unix_guru 0:6b244485c156 1238 If, when decoding, you want the raw image to be something else than the default,
unix_guru 0:6b244485c156 1239 you need to set the color type and bit depth you want in the LodePNGColorMode,
unix_guru 0:6b244485c156 1240 or the parameters colortype and bitdepth of the simple decoding function.
unix_guru 0:6b244485c156 1241
unix_guru 0:6b244485c156 1242 If, when encoding, you use another color type than the default in the raw input
unix_guru 0:6b244485c156 1243 image, you need to specify its color type and bit depth in the LodePNGColorMode
unix_guru 0:6b244485c156 1244 of the raw image, or use the parameters colortype and bitdepth of the simple
unix_guru 0:6b244485c156 1245 encoding function.
unix_guru 0:6b244485c156 1246
unix_guru 0:6b244485c156 1247 If, when encoding, you don't want LodePNG to choose the output PNG color type
unix_guru 0:6b244485c156 1248 but control it yourself, you need to set auto_convert in the encoder settings
unix_guru 0:6b244485c156 1249 to false, and specify the color type you want in the LodePNGInfo of the
unix_guru 0:6b244485c156 1250 encoder (including palette: it can generate a palette if auto_convert is true,
unix_guru 0:6b244485c156 1251 otherwise not).
unix_guru 0:6b244485c156 1252
unix_guru 0:6b244485c156 1253 If the input and output color type differ (whether user chosen or auto chosen),
unix_guru 0:6b244485c156 1254 LodePNG will do a color conversion, which follows the rules below, and may
unix_guru 0:6b244485c156 1255 sometimes result in an error.
unix_guru 0:6b244485c156 1256
unix_guru 0:6b244485c156 1257 To avoid some confusion:
unix_guru 0:6b244485c156 1258 -the decoder converts from PNG to raw image
unix_guru 0:6b244485c156 1259 -the encoder converts from raw image to PNG
unix_guru 0:6b244485c156 1260 -the colortype and bitdepth in LodePNGColorMode info_raw, are those of the raw image
unix_guru 0:6b244485c156 1261 -the colortype and bitdepth in the color field of LodePNGInfo info_png, are those of the PNG
unix_guru 0:6b244485c156 1262 -when encoding, the color type in LodePNGInfo is ignored if auto_convert
unix_guru 0:6b244485c156 1263 is enabled, it is automatically generated instead
unix_guru 0:6b244485c156 1264 -when decoding, the color type in LodePNGInfo is set by the decoder to that of the original
unix_guru 0:6b244485c156 1265 PNG image, but it can be ignored since the raw image has the color type you requested instead
unix_guru 0:6b244485c156 1266 -if the color type of the LodePNGColorMode and PNG image aren't the same, a conversion
unix_guru 0:6b244485c156 1267 between the color types is done if the color types are supported. If it is not
unix_guru 0:6b244485c156 1268 supported, an error is returned. If the types are the same, no conversion is done.
unix_guru 0:6b244485c156 1269 -even though some conversions aren't supported, LodePNG supports loading PNGs from any
unix_guru 0:6b244485c156 1270 colortype and saving PNGs to any colortype, sometimes it just requires preparing
unix_guru 0:6b244485c156 1271 the raw image correctly before encoding.
unix_guru 0:6b244485c156 1272 -both encoder and decoder use the same color converter.
unix_guru 0:6b244485c156 1273
unix_guru 0:6b244485c156 1274 Non supported color conversions:
unix_guru 0:6b244485c156 1275 -color to greyscale: no error is thrown, but the result will look ugly because
unix_guru 0:6b244485c156 1276 only the red channel is taken
unix_guru 0:6b244485c156 1277 -anything to palette when that palette does not have that color in it: in this
unix_guru 0:6b244485c156 1278 case an error is thrown
unix_guru 0:6b244485c156 1279
unix_guru 0:6b244485c156 1280 Supported color conversions:
unix_guru 0:6b244485c156 1281 -anything to 8-bit RGB, 8-bit RGBA, 16-bit RGB, 16-bit RGBA
unix_guru 0:6b244485c156 1282 -any grey or grey+alpha, to grey or grey+alpha
unix_guru 0:6b244485c156 1283 -anything to a palette, as long as the palette has the requested colors in it
unix_guru 0:6b244485c156 1284 -removing alpha channel
unix_guru 0:6b244485c156 1285 -higher to smaller bitdepth, and vice versa
unix_guru 0:6b244485c156 1286
unix_guru 0:6b244485c156 1287 If you want no color conversion to be done (e.g. for speed or control):
unix_guru 0:6b244485c156 1288 -In the encoder, you can make it save a PNG with any color type by giving the
unix_guru 0:6b244485c156 1289 raw color mode and LodePNGInfo the same color mode, and setting auto_convert to
unix_guru 0:6b244485c156 1290 false.
unix_guru 0:6b244485c156 1291 -In the decoder, you can make it store the pixel data in the same color type
unix_guru 0:6b244485c156 1292 as the PNG has, by setting the color_convert setting to false. Settings in
unix_guru 0:6b244485c156 1293 info_raw are then ignored.
unix_guru 0:6b244485c156 1294
unix_guru 0:6b244485c156 1295 The function lodepng_convert does the color conversion. It is available in the
unix_guru 0:6b244485c156 1296 interface but normally isn't needed since the encoder and decoder already call
unix_guru 0:6b244485c156 1297 it.
unix_guru 0:6b244485c156 1298
unix_guru 0:6b244485c156 1299 6.3. padding bits
unix_guru 0:6b244485c156 1300 -----------------
unix_guru 0:6b244485c156 1301
unix_guru 0:6b244485c156 1302 In the PNG file format, if a less than 8-bit per pixel color type is used and the scanlines
unix_guru 0:6b244485c156 1303 have a bit amount that isn't a multiple of 8, then padding bits are used so that each
unix_guru 0:6b244485c156 1304 scanline starts at a fresh byte. But that is NOT true for the LodePNG raw input and output.
unix_guru 0:6b244485c156 1305 The raw input image you give to the encoder, and the raw output image you get from the decoder
unix_guru 0:6b244485c156 1306 will NOT have these padding bits, e.g. in the case of a 1-bit image with a width
unix_guru 0:6b244485c156 1307 of 7 pixels, the first pixel of the second scanline will the the 8th bit of the first byte,
unix_guru 0:6b244485c156 1308 not the first bit of a new byte.
unix_guru 0:6b244485c156 1309
unix_guru 0:6b244485c156 1310 6.4. A note about 16-bits per channel and endianness
unix_guru 0:6b244485c156 1311 ----------------------------------------------------
unix_guru 0:6b244485c156 1312
unix_guru 0:6b244485c156 1313 LodePNG uses unsigned char arrays for 16-bit per channel colors too, just like
unix_guru 0:6b244485c156 1314 for any other color format. The 16-bit values are stored in big endian (most
unix_guru 0:6b244485c156 1315 significant byte first) in these arrays. This is the opposite order of the
unix_guru 0:6b244485c156 1316 little endian used by x86 CPU's.
unix_guru 0:6b244485c156 1317
unix_guru 0:6b244485c156 1318 LodePNG always uses big endian because the PNG file format does so internally.
unix_guru 0:6b244485c156 1319 Conversions to other formats than PNG uses internally are not supported by
unix_guru 0:6b244485c156 1320 LodePNG on purpose, there are myriads of formats, including endianness of 16-bit
unix_guru 0:6b244485c156 1321 colors, the order in which you store R, G, B and A, and so on. Supporting and
unix_guru 0:6b244485c156 1322 converting to/from all that is outside the scope of LodePNG.
unix_guru 0:6b244485c156 1323
unix_guru 0:6b244485c156 1324 This may mean that, depending on your use case, you may want to convert the big
unix_guru 0:6b244485c156 1325 endian output of LodePNG to little endian with a for loop. This is certainly not
unix_guru 0:6b244485c156 1326 always needed, many applications and libraries support big endian 16-bit colors
unix_guru 0:6b244485c156 1327 anyway, but it means you cannot simply cast the unsigned char* buffer to an
unix_guru 0:6b244485c156 1328 unsigned short* buffer on x86 CPUs.
unix_guru 0:6b244485c156 1329
unix_guru 0:6b244485c156 1330
unix_guru 0:6b244485c156 1331 7. error values
unix_guru 0:6b244485c156 1332 ---------------
unix_guru 0:6b244485c156 1333
unix_guru 0:6b244485c156 1334 All functions in LodePNG that return an error code, return 0 if everything went
unix_guru 0:6b244485c156 1335 OK, or a non-zero code if there was an error.
unix_guru 0:6b244485c156 1336
unix_guru 0:6b244485c156 1337 The meaning of the LodePNG error values can be retrieved with the function
unix_guru 0:6b244485c156 1338 lodepng_error_text: given the numerical error code, it returns a description
unix_guru 0:6b244485c156 1339 of the error in English as a string.
unix_guru 0:6b244485c156 1340
unix_guru 0:6b244485c156 1341 Check the implementation of lodepng_error_text to see the meaning of each code.
unix_guru 0:6b244485c156 1342
unix_guru 0:6b244485c156 1343
unix_guru 0:6b244485c156 1344 8. chunks and PNG editing
unix_guru 0:6b244485c156 1345 -------------------------
unix_guru 0:6b244485c156 1346
unix_guru 0:6b244485c156 1347 If you want to add extra chunks to a PNG you encode, or use LodePNG for a PNG
unix_guru 0:6b244485c156 1348 editor that should follow the rules about handling of unknown chunks, or if your
unix_guru 0:6b244485c156 1349 program is able to read other types of chunks than the ones handled by LodePNG,
unix_guru 0:6b244485c156 1350 then that's possible with the chunk functions of LodePNG.
unix_guru 0:6b244485c156 1351
unix_guru 0:6b244485c156 1352 A PNG chunk has the following layout:
unix_guru 0:6b244485c156 1353
unix_guru 0:6b244485c156 1354 4 bytes length
unix_guru 0:6b244485c156 1355 4 bytes type name
unix_guru 0:6b244485c156 1356 length bytes data
unix_guru 0:6b244485c156 1357 4 bytes CRC
unix_guru 0:6b244485c156 1358
unix_guru 0:6b244485c156 1359 8.1. iterating through chunks
unix_guru 0:6b244485c156 1360 -----------------------------
unix_guru 0:6b244485c156 1361
unix_guru 0:6b244485c156 1362 If you have a buffer containing the PNG image data, then the first chunk (the
unix_guru 0:6b244485c156 1363 IHDR chunk) starts at byte number 8 of that buffer. The first 8 bytes are the
unix_guru 0:6b244485c156 1364 signature of the PNG and are not part of a chunk. But if you start at byte 8
unix_guru 0:6b244485c156 1365 then you have a chunk, and can check the following things of it.
unix_guru 0:6b244485c156 1366
unix_guru 0:6b244485c156 1367 NOTE: none of these functions check for memory buffer boundaries. To avoid
unix_guru 0:6b244485c156 1368 exploits, always make sure the buffer contains all the data of the chunks.
unix_guru 0:6b244485c156 1369 When using lodepng_chunk_next, make sure the returned value is within the
unix_guru 0:6b244485c156 1370 allocated memory.
unix_guru 0:6b244485c156 1371
unix_guru 0:6b244485c156 1372 unsigned lodepng_chunk_length(const unsigned char* chunk):
unix_guru 0:6b244485c156 1373
unix_guru 0:6b244485c156 1374 Get the length of the chunk's data. The total chunk length is this length + 12.
unix_guru 0:6b244485c156 1375
unix_guru 0:6b244485c156 1376 void lodepng_chunk_type(char type[5], const unsigned char* chunk):
unix_guru 0:6b244485c156 1377 unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type):
unix_guru 0:6b244485c156 1378
unix_guru 0:6b244485c156 1379 Get the type of the chunk or compare if it's a certain type
unix_guru 0:6b244485c156 1380
unix_guru 0:6b244485c156 1381 unsigned char lodepng_chunk_critical(const unsigned char* chunk):
unix_guru 0:6b244485c156 1382 unsigned char lodepng_chunk_private(const unsigned char* chunk):
unix_guru 0:6b244485c156 1383 unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk):
unix_guru 0:6b244485c156 1384
unix_guru 0:6b244485c156 1385 Check if the chunk is critical in the PNG standard (only IHDR, PLTE, IDAT and IEND are).
unix_guru 0:6b244485c156 1386 Check if the chunk is private (public chunks are part of the standard, private ones not).
unix_guru 0:6b244485c156 1387 Check if the chunk is safe to copy. If it's not, then, when modifying data in a critical
unix_guru 0:6b244485c156 1388 chunk, unsafe to copy chunks of the old image may NOT be saved in the new one if your
unix_guru 0:6b244485c156 1389 program doesn't handle that type of unknown chunk.
unix_guru 0:6b244485c156 1390
unix_guru 0:6b244485c156 1391 unsigned char* lodepng_chunk_data(unsigned char* chunk):
unix_guru 0:6b244485c156 1392 const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk):
unix_guru 0:6b244485c156 1393
unix_guru 0:6b244485c156 1394 Get a pointer to the start of the data of the chunk.
unix_guru 0:6b244485c156 1395
unix_guru 0:6b244485c156 1396 unsigned lodepng_chunk_check_crc(const unsigned char* chunk):
unix_guru 0:6b244485c156 1397 void lodepng_chunk_generate_crc(unsigned char* chunk):
unix_guru 0:6b244485c156 1398
unix_guru 0:6b244485c156 1399 Check if the crc is correct or generate a correct one.
unix_guru 0:6b244485c156 1400
unix_guru 0:6b244485c156 1401 unsigned char* lodepng_chunk_next(unsigned char* chunk):
unix_guru 0:6b244485c156 1402 const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk):
unix_guru 0:6b244485c156 1403
unix_guru 0:6b244485c156 1404 Iterate to the next chunk. This works if you have a buffer with consecutive chunks. Note that these
unix_guru 0:6b244485c156 1405 functions do no boundary checking of the allocated data whatsoever, so make sure there is enough
unix_guru 0:6b244485c156 1406 data available in the buffer to be able to go to the next chunk.
unix_guru 0:6b244485c156 1407
unix_guru 0:6b244485c156 1408 unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk):
unix_guru 0:6b244485c156 1409 unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length,
unix_guru 0:6b244485c156 1410 const char* type, const unsigned char* data):
unix_guru 0:6b244485c156 1411
unix_guru 0:6b244485c156 1412 These functions are used to create new chunks that are appended to the data in *out that has
unix_guru 0:6b244485c156 1413 length *outlength. The append function appends an existing chunk to the new data. The create
unix_guru 0:6b244485c156 1414 function creates a new chunk with the given parameters and appends it. Type is the 4-letter
unix_guru 0:6b244485c156 1415 name of the chunk.
unix_guru 0:6b244485c156 1416
unix_guru 0:6b244485c156 1417 8.2. chunks in info_png
unix_guru 0:6b244485c156 1418 -----------------------
unix_guru 0:6b244485c156 1419
unix_guru 0:6b244485c156 1420 The LodePNGInfo struct contains fields with the unknown chunk in it. It has 3
unix_guru 0:6b244485c156 1421 buffers (each with size) to contain 3 types of unknown chunks:
unix_guru 0:6b244485c156 1422 the ones that come before the PLTE chunk, the ones that come between the PLTE
unix_guru 0:6b244485c156 1423 and the IDAT chunks, and the ones that come after the IDAT chunks.
unix_guru 0:6b244485c156 1424 It's necessary to make the distionction between these 3 cases because the PNG
unix_guru 0:6b244485c156 1425 standard forces to keep the ordering of unknown chunks compared to the critical
unix_guru 0:6b244485c156 1426 chunks, but does not force any other ordering rules.
unix_guru 0:6b244485c156 1427
unix_guru 0:6b244485c156 1428 info_png.unknown_chunks_data[0] is the chunks before PLTE
unix_guru 0:6b244485c156 1429 info_png.unknown_chunks_data[1] is the chunks after PLTE, before IDAT
unix_guru 0:6b244485c156 1430 info_png.unknown_chunks_data[2] is the chunks after IDAT
unix_guru 0:6b244485c156 1431
unix_guru 0:6b244485c156 1432 The chunks in these 3 buffers can be iterated through and read by using the same
unix_guru 0:6b244485c156 1433 way described in the previous subchapter.
unix_guru 0:6b244485c156 1434
unix_guru 0:6b244485c156 1435 When using the decoder to decode a PNG, you can make it store all unknown chunks
unix_guru 0:6b244485c156 1436 if you set the option settings.remember_unknown_chunks to 1. By default, this
unix_guru 0:6b244485c156 1437 option is off (0).
unix_guru 0:6b244485c156 1438
unix_guru 0:6b244485c156 1439 The encoder will always encode unknown chunks that are stored in the info_png.
unix_guru 0:6b244485c156 1440 If you need it to add a particular chunk that isn't known by LodePNG, you can
unix_guru 0:6b244485c156 1441 use lodepng_chunk_append or lodepng_chunk_create to the chunk data in
unix_guru 0:6b244485c156 1442 info_png.unknown_chunks_data[x].
unix_guru 0:6b244485c156 1443
unix_guru 0:6b244485c156 1444 Chunks that are known by LodePNG should not be added in that way. E.g. to make
unix_guru 0:6b244485c156 1445 LodePNG add a bKGD chunk, set background_defined to true and add the correct
unix_guru 0:6b244485c156 1446 parameters there instead.
unix_guru 0:6b244485c156 1447
unix_guru 0:6b244485c156 1448
unix_guru 0:6b244485c156 1449 9. compiler support
unix_guru 0:6b244485c156 1450 -------------------
unix_guru 0:6b244485c156 1451
unix_guru 0:6b244485c156 1452 No libraries other than the current standard C library are needed to compile
unix_guru 0:6b244485c156 1453 LodePNG. For the C++ version, only the standard C++ library is needed on top.
unix_guru 0:6b244485c156 1454 Add the files lodepng.c(pp) and lodepng.h to your project, include
unix_guru 0:6b244485c156 1455 lodepng.h where needed, and your program can read/write PNG files.
unix_guru 0:6b244485c156 1456
unix_guru 0:6b244485c156 1457 It is compatible with C90 and up, and C++03 and up.
unix_guru 0:6b244485c156 1458
unix_guru 0:6b244485c156 1459 If performance is important, use optimization when compiling! For both the
unix_guru 0:6b244485c156 1460 encoder and decoder, this makes a large difference.
unix_guru 0:6b244485c156 1461
unix_guru 0:6b244485c156 1462 Make sure that LodePNG is compiled with the same compiler of the same version
unix_guru 0:6b244485c156 1463 and with the same settings as the rest of the program, or the interfaces with
unix_guru 0:6b244485c156 1464 std::vectors and std::strings in C++ can be incompatible.
unix_guru 0:6b244485c156 1465
unix_guru 0:6b244485c156 1466 CHAR_BITS must be 8 or higher, because LodePNG uses unsigned chars for octets.
unix_guru 0:6b244485c156 1467
unix_guru 0:6b244485c156 1468 *) gcc and g++
unix_guru 0:6b244485c156 1469
unix_guru 0:6b244485c156 1470 LodePNG is developed in gcc so this compiler is natively supported. It gives no
unix_guru 0:6b244485c156 1471 warnings with compiler options "-Wall -Wextra -pedantic -ansi", with gcc and g++
unix_guru 0:6b244485c156 1472 version 4.7.1 on Linux, 32-bit and 64-bit.
unix_guru 0:6b244485c156 1473
unix_guru 0:6b244485c156 1474 *) Clang
unix_guru 0:6b244485c156 1475
unix_guru 0:6b244485c156 1476 Fully supported and warning-free.
unix_guru 0:6b244485c156 1477
unix_guru 0:6b244485c156 1478 *) Mingw
unix_guru 0:6b244485c156 1479
unix_guru 0:6b244485c156 1480 The Mingw compiler (a port of gcc for Windows) should be fully supported by
unix_guru 0:6b244485c156 1481 LodePNG.
unix_guru 0:6b244485c156 1482
unix_guru 0:6b244485c156 1483 *) Visual Studio and Visual C++ Express Edition
unix_guru 0:6b244485c156 1484
unix_guru 0:6b244485c156 1485 LodePNG should be warning-free with warning level W4. Two warnings were disabled
unix_guru 0:6b244485c156 1486 with pragmas though: warning 4244 about implicit conversions, and warning 4996
unix_guru 0:6b244485c156 1487 where it wants to use a non-standard function fopen_s instead of the standard C
unix_guru 0:6b244485c156 1488 fopen.
unix_guru 0:6b244485c156 1489
unix_guru 0:6b244485c156 1490 Visual Studio may want "stdafx.h" files to be included in each source file and
unix_guru 0:6b244485c156 1491 give an error "unexpected end of file while looking for precompiled header".
unix_guru 0:6b244485c156 1492 This is not standard C++ and will not be added to the stock LodePNG. You can
unix_guru 0:6b244485c156 1493 disable it for lodepng.cpp only by right clicking it, Properties, C/C++,
unix_guru 0:6b244485c156 1494 Precompiled Headers, and set it to Not Using Precompiled Headers there.
unix_guru 0:6b244485c156 1495
unix_guru 0:6b244485c156 1496 NOTE: Modern versions of VS should be fully supported, but old versions, e.g.
unix_guru 0:6b244485c156 1497 VS6, are not guaranteed to work.
unix_guru 0:6b244485c156 1498
unix_guru 0:6b244485c156 1499 *) Compilers on Macintosh
unix_guru 0:6b244485c156 1500
unix_guru 0:6b244485c156 1501 LodePNG has been reported to work both with gcc and LLVM for Macintosh, both for
unix_guru 0:6b244485c156 1502 C and C++.
unix_guru 0:6b244485c156 1503
unix_guru 0:6b244485c156 1504 *) Other Compilers
unix_guru 0:6b244485c156 1505
unix_guru 0:6b244485c156 1506 If you encounter problems on any compilers, feel free to let me know and I may
unix_guru 0:6b244485c156 1507 try to fix it if the compiler is modern and standards complient.
unix_guru 0:6b244485c156 1508
unix_guru 0:6b244485c156 1509
unix_guru 0:6b244485c156 1510 10. examples
unix_guru 0:6b244485c156 1511 ------------
unix_guru 0:6b244485c156 1512
unix_guru 0:6b244485c156 1513 This decoder example shows the most basic usage of LodePNG. More complex
unix_guru 0:6b244485c156 1514 examples can be found on the LodePNG website.
unix_guru 0:6b244485c156 1515
unix_guru 0:6b244485c156 1516 10.1. decoder C++ example
unix_guru 0:6b244485c156 1517 -------------------------
unix_guru 0:6b244485c156 1518
unix_guru 0:6b244485c156 1519 #include "lodepng.h"
unix_guru 0:6b244485c156 1520 #include <iostream>
unix_guru 0:6b244485c156 1521
unix_guru 0:6b244485c156 1522 int main(int argc, char *argv[])
unix_guru 0:6b244485c156 1523 {
unix_guru 0:6b244485c156 1524 const char* filename = argc > 1 ? argv[1] : "test.png";
unix_guru 0:6b244485c156 1525
unix_guru 0:6b244485c156 1526 //load and decode
unix_guru 0:6b244485c156 1527 std::vector<unsigned char> image;
unix_guru 0:6b244485c156 1528 unsigned width, height;
unix_guru 0:6b244485c156 1529 unsigned error = lodepng::decode(image, width, height, filename);
unix_guru 0:6b244485c156 1530
unix_guru 0:6b244485c156 1531 //if there's an error, display it
unix_guru 0:6b244485c156 1532 if(error) std::cout << "decoder error " << error << ": " << lodepng_error_text(error) << std::endl;
unix_guru 0:6b244485c156 1533
unix_guru 0:6b244485c156 1534 //the pixels are now in the vector "image", 4 bytes per pixel, ordered RGBARGBA..., use it as texture, draw it, ...
unix_guru 0:6b244485c156 1535 }
unix_guru 0:6b244485c156 1536
unix_guru 0:6b244485c156 1537 10.2. decoder C example
unix_guru 0:6b244485c156 1538 -----------------------
unix_guru 0:6b244485c156 1539
unix_guru 0:6b244485c156 1540 #include "lodepng.h"
unix_guru 0:6b244485c156 1541
unix_guru 0:6b244485c156 1542 int main(int argc, char *argv[])
unix_guru 0:6b244485c156 1543 {
unix_guru 0:6b244485c156 1544 unsigned error;
unix_guru 0:6b244485c156 1545 unsigned char* image;
unix_guru 0:6b244485c156 1546 size_t width, height;
unix_guru 0:6b244485c156 1547 const char* filename = argc > 1 ? argv[1] : "test.png";
unix_guru 0:6b244485c156 1548
unix_guru 0:6b244485c156 1549 error = lodepng_decode32_file(&image, &width, &height, filename);
unix_guru 0:6b244485c156 1550
unix_guru 0:6b244485c156 1551 if(error) printf("decoder error %u: %s\n", error, lodepng_error_text(error));
unix_guru 0:6b244485c156 1552
unix_guru 0:6b244485c156 1553 / * use image here * /
unix_guru 0:6b244485c156 1554
unix_guru 0:6b244485c156 1555 free(image);
unix_guru 0:6b244485c156 1556 return 0;
unix_guru 0:6b244485c156 1557 }
unix_guru 0:6b244485c156 1558
unix_guru 0:6b244485c156 1559 11. state settings reference
unix_guru 0:6b244485c156 1560 ----------------------------
unix_guru 0:6b244485c156 1561
unix_guru 0:6b244485c156 1562 A quick reference of some settings to set on the LodePNGState
unix_guru 0:6b244485c156 1563
unix_guru 0:6b244485c156 1564 For decoding:
unix_guru 0:6b244485c156 1565
unix_guru 0:6b244485c156 1566 state.decoder.zlibsettings.ignore_adler32: ignore ADLER32 checksums
unix_guru 0:6b244485c156 1567 state.decoder.zlibsettings.custom_...: use custom inflate function
unix_guru 0:6b244485c156 1568 state.decoder.ignore_crc: ignore CRC checksums
unix_guru 0:6b244485c156 1569 state.decoder.color_convert: convert internal PNG color to chosen one
unix_guru 0:6b244485c156 1570 state.decoder.read_text_chunks: whether to read in text metadata chunks
unix_guru 0:6b244485c156 1571 state.decoder.remember_unknown_chunks: whether to read in unknown chunks
unix_guru 0:6b244485c156 1572 state.info_raw.colortype: desired color type for decoded image
unix_guru 0:6b244485c156 1573 state.info_raw.bitdepth: desired bit depth for decoded image
unix_guru 0:6b244485c156 1574 state.info_raw....: more color settings, see struct LodePNGColorMode
unix_guru 0:6b244485c156 1575 state.info_png....: no settings for decoder but ouput, see struct LodePNGInfo
unix_guru 0:6b244485c156 1576
unix_guru 0:6b244485c156 1577 For encoding:
unix_guru 0:6b244485c156 1578
unix_guru 0:6b244485c156 1579 state.encoder.zlibsettings.btype: disable compression by setting it to 0
unix_guru 0:6b244485c156 1580 state.encoder.zlibsettings.use_lz77: use LZ77 in compression
unix_guru 0:6b244485c156 1581 state.encoder.zlibsettings.windowsize: tweak LZ77 windowsize
unix_guru 0:6b244485c156 1582 state.encoder.zlibsettings.minmatch: tweak min LZ77 length to match
unix_guru 0:6b244485c156 1583 state.encoder.zlibsettings.nicematch: tweak LZ77 match where to stop searching
unix_guru 0:6b244485c156 1584 state.encoder.zlibsettings.lazymatching: try one more LZ77 matching
unix_guru 0:6b244485c156 1585 state.encoder.zlibsettings.custom_...: use custom deflate function
unix_guru 0:6b244485c156 1586 state.encoder.auto_convert: choose optimal PNG color type, if 0 uses info_png
unix_guru 0:6b244485c156 1587 state.encoder.filter_palette_zero: PNG filter strategy for palette
unix_guru 0:6b244485c156 1588 state.encoder.filter_strategy: PNG filter strategy to encode with
unix_guru 0:6b244485c156 1589 state.encoder.force_palette: add palette even if not encoding to one
unix_guru 0:6b244485c156 1590 state.encoder.add_id: add LodePNG identifier and version as a text chunk
unix_guru 0:6b244485c156 1591 state.encoder.text_compression: use compressed text chunks for metadata
unix_guru 0:6b244485c156 1592 state.info_raw.colortype: color type of raw input image you provide
unix_guru 0:6b244485c156 1593 state.info_raw.bitdepth: bit depth of raw input image you provide
unix_guru 0:6b244485c156 1594 state.info_raw: more color settings, see struct LodePNGColorMode
unix_guru 0:6b244485c156 1595 state.info_png.color.colortype: desired color type if auto_convert is false
unix_guru 0:6b244485c156 1596 state.info_png.color.bitdepth: desired bit depth if auto_convert is false
unix_guru 0:6b244485c156 1597 state.info_png.color....: more color settings, see struct LodePNGColorMode
unix_guru 0:6b244485c156 1598 state.info_png....: more PNG related settings, see struct LodePNGInfo
unix_guru 0:6b244485c156 1599
unix_guru 0:6b244485c156 1600
unix_guru 0:6b244485c156 1601 12. changes
unix_guru 0:6b244485c156 1602 -----------
unix_guru 0:6b244485c156 1603
unix_guru 0:6b244485c156 1604 The version number of LodePNG is the date of the change given in the format
unix_guru 0:6b244485c156 1605 yyyymmdd.
unix_guru 0:6b244485c156 1606
unix_guru 0:6b244485c156 1607 Some changes aren't backwards compatible. Those are indicated with a (!)
unix_guru 0:6b244485c156 1608 symbol.
unix_guru 0:6b244485c156 1609
unix_guru 0:6b244485c156 1610 *) 08 dec 2015: Made load_file function return error if file can't be opened.
unix_guru 0:6b244485c156 1611 *) 24 okt 2015: Bugfix with decoding to palette output.
unix_guru 0:6b244485c156 1612 *) 18 apr 2015: Boundary PM instead of just package-merge for faster encoding.
unix_guru 0:6b244485c156 1613 *) 23 aug 2014: Reduced needless memory usage of decoder.
unix_guru 0:6b244485c156 1614 *) 28 jun 2014: Removed fix_png setting, always support palette OOB for
unix_guru 0:6b244485c156 1615 simplicity. Made ColorProfile public.
unix_guru 0:6b244485c156 1616 *) 09 jun 2014: Faster encoder by fixing hash bug and more zeros optimization.
unix_guru 0:6b244485c156 1617 *) 22 dec 2013: Power of two windowsize required for optimization.
unix_guru 0:6b244485c156 1618 *) 15 apr 2013: Fixed bug with LAC_ALPHA and color key.
unix_guru 0:6b244485c156 1619 *) 25 mar 2013: Added an optional feature to ignore some PNG errors (fix_png).
unix_guru 0:6b244485c156 1620 *) 11 mar 2013 (!): Bugfix with custom free. Changed from "my" to "lodepng_"
unix_guru 0:6b244485c156 1621 prefix for the custom allocators and made it possible with a new #define to
unix_guru 0:6b244485c156 1622 use custom ones in your project without needing to change lodepng's code.
unix_guru 0:6b244485c156 1623 *) 28 jan 2013: Bugfix with color key.
unix_guru 0:6b244485c156 1624 *) 27 okt 2012: Tweaks in text chunk keyword length error handling.
unix_guru 0:6b244485c156 1625 *) 8 okt 2012 (!): Added new filter strategy (entropy) and new auto color mode.
unix_guru 0:6b244485c156 1626 (no palette). Better deflate tree encoding. New compression tweak settings.
unix_guru 0:6b244485c156 1627 Faster color conversions while decoding. Some internal cleanups.
unix_guru 0:6b244485c156 1628 *) 23 sep 2012: Reduced warnings in Visual Studio a little bit.
unix_guru 0:6b244485c156 1629 *) 1 sep 2012 (!): Removed #define's for giving custom (de)compression functions
unix_guru 0:6b244485c156 1630 and made it work with function pointers instead.
unix_guru 0:6b244485c156 1631 *) 23 jun 2012: Added more filter strategies. Made it easier to use custom alloc
unix_guru 0:6b244485c156 1632 and free functions and toggle #defines from compiler flags. Small fixes.
unix_guru 0:6b244485c156 1633 *) 6 may 2012 (!): Made plugging in custom zlib/deflate functions more flexible.
unix_guru 0:6b244485c156 1634 *) 22 apr 2012 (!): Made interface more consistent, renaming a lot. Removed
unix_guru 0:6b244485c156 1635 redundant C++ codec classes. Reduced amount of structs. Everything changed,
unix_guru 0:6b244485c156 1636 but it is cleaner now imho and functionality remains the same. Also fixed
unix_guru 0:6b244485c156 1637 several bugs and shrunk the implementation code. Made new samples.
unix_guru 0:6b244485c156 1638 *) 6 nov 2011 (!): By default, the encoder now automatically chooses the best
unix_guru 0:6b244485c156 1639 PNG color model and bit depth, based on the amount and type of colors of the
unix_guru 0:6b244485c156 1640 raw image. For this, autoLeaveOutAlphaChannel replaced by auto_choose_color.
unix_guru 0:6b244485c156 1641 *) 9 okt 2011: simpler hash chain implementation for the encoder.
unix_guru 0:6b244485c156 1642 *) 8 sep 2011: lz77 encoder lazy matching instead of greedy matching.
unix_guru 0:6b244485c156 1643 *) 23 aug 2011: tweaked the zlib compression parameters after benchmarking.
unix_guru 0:6b244485c156 1644 A bug with the PNG filtertype heuristic was fixed, so that it chooses much
unix_guru 0:6b244485c156 1645 better ones (it's quite significant). A setting to do an experimental, slow,
unix_guru 0:6b244485c156 1646 brute force search for PNG filter types is added.
unix_guru 0:6b244485c156 1647 *) 17 aug 2011 (!): changed some C zlib related function names.
unix_guru 0:6b244485c156 1648 *) 16 aug 2011: made the code less wide (max 120 characters per line).
unix_guru 0:6b244485c156 1649 *) 17 apr 2011: code cleanup. Bugfixes. Convert low to 16-bit per sample colors.
unix_guru 0:6b244485c156 1650 *) 21 feb 2011: fixed compiling for C90. Fixed compiling with sections disabled.
unix_guru 0:6b244485c156 1651 *) 11 dec 2010: encoding is made faster, based on suggestion by Peter Eastman
unix_guru 0:6b244485c156 1652 to optimize long sequences of zeros.
unix_guru 0:6b244485c156 1653 *) 13 nov 2010: added LodePNG_InfoColor_hasPaletteAlpha and
unix_guru 0:6b244485c156 1654 LodePNG_InfoColor_canHaveAlpha functions for convenience.
unix_guru 0:6b244485c156 1655 *) 7 nov 2010: added LodePNG_error_text function to get error code description.
unix_guru 0:6b244485c156 1656 *) 30 okt 2010: made decoding slightly faster
unix_guru 0:6b244485c156 1657 *) 26 okt 2010: (!) changed some C function and struct names (more consistent).
unix_guru 0:6b244485c156 1658 Reorganized the documentation and the declaration order in the header.
unix_guru 0:6b244485c156 1659 *) 08 aug 2010: only changed some comments and external samples.
unix_guru 0:6b244485c156 1660 *) 05 jul 2010: fixed bug thanks to warnings in the new gcc version.
unix_guru 0:6b244485c156 1661 *) 14 mar 2010: fixed bug where too much memory was allocated for char buffers.
unix_guru 0:6b244485c156 1662 *) 02 sep 2008: fixed bug where it could create empty tree that linux apps could
unix_guru 0:6b244485c156 1663 read by ignoring the problem but windows apps couldn't.
unix_guru 0:6b244485c156 1664 *) 06 jun 2008: added more error checks for out of memory cases.
unix_guru 0:6b244485c156 1665 *) 26 apr 2008: added a few more checks here and there to ensure more safety.
unix_guru 0:6b244485c156 1666 *) 06 mar 2008: crash with encoding of strings fixed
unix_guru 0:6b244485c156 1667 *) 02 feb 2008: support for international text chunks added (iTXt)
unix_guru 0:6b244485c156 1668 *) 23 jan 2008: small cleanups, and #defines to divide code in sections
unix_guru 0:6b244485c156 1669 *) 20 jan 2008: support for unknown chunks allowing using LodePNG for an editor.
unix_guru 0:6b244485c156 1670 *) 18 jan 2008: support for tIME and pHYs chunks added to encoder and decoder.
unix_guru 0:6b244485c156 1671 *) 17 jan 2008: ability to encode and decode compressed zTXt chunks added
unix_guru 0:6b244485c156 1672 Also various fixes, such as in the deflate and the padding bits code.
unix_guru 0:6b244485c156 1673 *) 13 jan 2008: Added ability to encode Adam7-interlaced images. Improved
unix_guru 0:6b244485c156 1674 filtering code of encoder.
unix_guru 0:6b244485c156 1675 *) 07 jan 2008: (!) changed LodePNG to use ISO C90 instead of C++. A
unix_guru 0:6b244485c156 1676 C++ wrapper around this provides an interface almost identical to before.
unix_guru 0:6b244485c156 1677 Having LodePNG be pure ISO C90 makes it more portable. The C and C++ code
unix_guru 0:6b244485c156 1678 are together in these files but it works both for C and C++ compilers.
unix_guru 0:6b244485c156 1679 *) 29 dec 2007: (!) changed most integer types to unsigned int + other tweaks
unix_guru 0:6b244485c156 1680 *) 30 aug 2007: bug fixed which makes this Borland C++ compatible
unix_guru 0:6b244485c156 1681 *) 09 aug 2007: some VS2005 warnings removed again
unix_guru 0:6b244485c156 1682 *) 21 jul 2007: deflate code placed in new namespace separate from zlib code
unix_guru 0:6b244485c156 1683 *) 08 jun 2007: fixed bug with 2- and 4-bit color, and small interlaced images
unix_guru 0:6b244485c156 1684 *) 04 jun 2007: improved support for Visual Studio 2005: crash with accessing
unix_guru 0:6b244485c156 1685 invalid std::vector element [0] fixed, and level 3 and 4 warnings removed
unix_guru 0:6b244485c156 1686 *) 02 jun 2007: made the encoder add a tag with version by default
unix_guru 0:6b244485c156 1687 *) 27 may 2007: zlib and png code separated (but still in the same file),
unix_guru 0:6b244485c156 1688 simple encoder/decoder functions added for more simple usage cases
unix_guru 0:6b244485c156 1689 *) 19 may 2007: minor fixes, some code cleaning, new error added (error 69),
unix_guru 0:6b244485c156 1690 moved some examples from here to lodepng_examples.cpp
unix_guru 0:6b244485c156 1691 *) 12 may 2007: palette decoding bug fixed
unix_guru 0:6b244485c156 1692 *) 24 apr 2007: changed the license from BSD to the zlib license
unix_guru 0:6b244485c156 1693 *) 11 mar 2007: very simple addition: ability to encode bKGD chunks.
unix_guru 0:6b244485c156 1694 *) 04 mar 2007: (!) tEXt chunk related fixes, and support for encoding
unix_guru 0:6b244485c156 1695 palettized PNG images. Plus little interface change with palette and texts.
unix_guru 0:6b244485c156 1696 *) 03 mar 2007: Made it encode dynamic Huffman shorter with repeat codes.
unix_guru 0:6b244485c156 1697 Fixed a bug where the end code of a block had length 0 in the Huffman tree.
unix_guru 0:6b244485c156 1698 *) 26 feb 2007: Huffman compression with dynamic trees (BTYPE 2) now implemented
unix_guru 0:6b244485c156 1699 and supported by the encoder, resulting in smaller PNGs at the output.
unix_guru 0:6b244485c156 1700 *) 27 jan 2007: Made the Adler-32 test faster so that a timewaste is gone.
unix_guru 0:6b244485c156 1701 *) 24 jan 2007: gave encoder an error interface. Added color conversion from any
unix_guru 0:6b244485c156 1702 greyscale type to 8-bit greyscale with or without alpha.
unix_guru 0:6b244485c156 1703 *) 21 jan 2007: (!) Totally changed the interface. It allows more color types
unix_guru 0:6b244485c156 1704 to convert to and is more uniform. See the manual for how it works now.
unix_guru 0:6b244485c156 1705 *) 07 jan 2007: Some cleanup & fixes, and a few changes over the last days:
unix_guru 0:6b244485c156 1706 encode/decode custom tEXt chunks, separate classes for zlib & deflate, and
unix_guru 0:6b244485c156 1707 at last made the decoder give errors for incorrect Adler32 or Crc.
unix_guru 0:6b244485c156 1708 *) 01 jan 2007: Fixed bug with encoding PNGs with less than 8 bits per channel.
unix_guru 0:6b244485c156 1709 *) 29 dec 2006: Added support for encoding images without alpha channel, and
unix_guru 0:6b244485c156 1710 cleaned out code as well as making certain parts faster.
unix_guru 0:6b244485c156 1711 *) 28 dec 2006: Added "Settings" to the encoder.
unix_guru 0:6b244485c156 1712 *) 26 dec 2006: The encoder now does LZ77 encoding and produces much smaller files now.
unix_guru 0:6b244485c156 1713 Removed some code duplication in the decoder. Fixed little bug in an example.
unix_guru 0:6b244485c156 1714 *) 09 dec 2006: (!) Placed output parameters of public functions as first parameter.
unix_guru 0:6b244485c156 1715 Fixed a bug of the decoder with 16-bit per color.
unix_guru 0:6b244485c156 1716 *) 15 okt 2006: Changed documentation structure
unix_guru 0:6b244485c156 1717 *) 09 okt 2006: Encoder class added. It encodes a valid PNG image from the
unix_guru 0:6b244485c156 1718 given image buffer, however for now it's not compressed.
unix_guru 0:6b244485c156 1719 *) 08 sep 2006: (!) Changed to interface with a Decoder class
unix_guru 0:6b244485c156 1720 *) 30 jul 2006: (!) LodePNG_InfoPng , width and height are now retrieved in different
unix_guru 0:6b244485c156 1721 way. Renamed decodePNG to decodePNGGeneric.
unix_guru 0:6b244485c156 1722 *) 29 jul 2006: (!) Changed the interface: image info is now returned as a
unix_guru 0:6b244485c156 1723 struct of type LodePNG::LodePNG_Info, instead of a vector, which was a bit clumsy.
unix_guru 0:6b244485c156 1724 *) 28 jul 2006: Cleaned the code and added new error checks.
unix_guru 0:6b244485c156 1725 Corrected terminology "deflate" into "inflate".
unix_guru 0:6b244485c156 1726 *) 23 jun 2006: Added SDL example in the documentation in the header, this
unix_guru 0:6b244485c156 1727 example allows easy debugging by displaying the PNG and its transparency.
unix_guru 0:6b244485c156 1728 *) 22 jun 2006: (!) Changed way to obtain error value. Added
unix_guru 0:6b244485c156 1729 loadFile function for convenience. Made decodePNG32 faster.
unix_guru 0:6b244485c156 1730 *) 21 jun 2006: (!) Changed type of info vector to unsigned.
unix_guru 0:6b244485c156 1731 Changed position of palette in info vector. Fixed an important bug that
unix_guru 0:6b244485c156 1732 happened on PNGs with an uncompressed block.
unix_guru 0:6b244485c156 1733 *) 16 jun 2006: Internally changed unsigned into unsigned where
unix_guru 0:6b244485c156 1734 needed, and performed some optimizations.
unix_guru 0:6b244485c156 1735 *) 07 jun 2006: (!) Renamed functions to decodePNG and placed them
unix_guru 0:6b244485c156 1736 in LodePNG namespace. Changed the order of the parameters. Rewrote the
unix_guru 0:6b244485c156 1737 documentation in the header. Renamed files to lodepng.cpp and lodepng.h
unix_guru 0:6b244485c156 1738 *) 22 apr 2006: Optimized and improved some code
unix_guru 0:6b244485c156 1739 *) 07 sep 2005: (!) Changed to std::vector interface
unix_guru 0:6b244485c156 1740 *) 12 aug 2005: Initial release (C++, decoder only)
unix_guru 0:6b244485c156 1741
unix_guru 0:6b244485c156 1742
unix_guru 0:6b244485c156 1743 13. contact information
unix_guru 0:6b244485c156 1744 -----------------------
unix_guru 0:6b244485c156 1745
unix_guru 0:6b244485c156 1746 Feel free to contact me with suggestions, problems, comments, ... concerning
unix_guru 0:6b244485c156 1747 LodePNG. If you encounter a PNG image that doesn't work properly with this
unix_guru 0:6b244485c156 1748 decoder, feel free to send it and I'll use it to find and fix the problem.
unix_guru 0:6b244485c156 1749
unix_guru 0:6b244485c156 1750 My email address is (puzzle the account and domain together with an @ symbol):
unix_guru 0:6b244485c156 1751 Domain: gmail dot com.
unix_guru 0:6b244485c156 1752 Account: lode dot vandevenne.
unix_guru 0:6b244485c156 1753
unix_guru 0:6b244485c156 1754
unix_guru 0:6b244485c156 1755 Copyright (c) 2005-2016 Lode Vandevenne
unix_guru 0:6b244485c156 1756 */
unix_guru 0:6b244485c156 1757