summaryrefslogtreecommitdiff
path: root/liblodepng/lodepng.h
diff options
context:
space:
mode:
Diffstat (limited to 'liblodepng/lodepng.h')
-rw-r--r--liblodepng/lodepng.h127
1 files changed, 127 insertions, 0 deletions
diff --git a/liblodepng/lodepng.h b/liblodepng/lodepng.h
new file mode 100644
index 0000000..36d0e68
--- /dev/null
+++ b/liblodepng/lodepng.h
@@ -0,0 +1,127 @@
+/*
+LodePNG version 20080927
+
+Copyright (c) 2005-2008 Lode Vandevenne
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+
+ 3. This notice may not be removed or altered from any source
+ distribution.
+*/
+
+/** Minified version of LodePNG, with only the encoder code */
+
+#ifndef LODEPNG_H
+#define LODEPNG_H
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* LodeFlate & LodeZlib Setting structs */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+
+typedef struct LodeZlib_DeflateSettings /*deflate = compress*/
+{
+ /*LZ77 related settings*/
+ unsigned btype; /*the block type for LZ*/
+ unsigned useLZ77; /*whether or not to use LZ77*/
+ unsigned windowSize; /*the maximum is 32768*/
+} LodeZlib_DeflateSettings;
+
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* LodePNG */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+typedef struct LodePNG_InfoColor /*info about the color type of an image*/
+{
+ /*header (IHDR)*/
+ unsigned colorType; /*color type*/
+ unsigned bitDepth; /*bits per sample*/
+
+ /*palette (PLTE)*/
+ unsigned char* palette; /*palette in RGBARGBA... order*/
+ size_t palettesize; /*palette size in number of colors (amount of bytes is 4 * palettesize)*/
+
+ /*transparent color key (tRNS)*/
+ unsigned key_defined; /*is a transparent color key given?*/
+ unsigned key_r; /*red component of color key*/
+ unsigned key_g; /*green component of color key*/
+ unsigned key_b; /*blue component of color key*/
+} LodePNG_InfoColor;
+
+typedef struct LodePNG_InfoPng /*information about the PNG image, except pixels and sometimes except width and height*/
+{
+ /*header (IHDR), palette (PLTE) and transparency (tRNS)*/
+ unsigned width; /*width of the image in pixels (ignored by encoder, but filled in by decoder)*/
+ unsigned height; /*height of the image in pixels (ignored by encoder, but filled in by decoder)*/
+ unsigned compressionMethod; /*compression method of the original file*/
+ unsigned filterMethod; /*filter method of the original file*/
+ unsigned interlaceMethod; /*interlace method of the original file*/
+ LodePNG_InfoColor color; /*color type and bits, palette, transparency*/
+} LodePNG_InfoPng;
+
+typedef struct LodePNG_InfoRaw /*contains user-chosen information about the raw image data, which is independent of the PNG image*/
+{
+ LodePNG_InfoColor color;
+} LodePNG_InfoRaw;
+
+unsigned LodePNG_InfoColor_addPalette(LodePNG_InfoColor* info, unsigned char r, unsigned char g, unsigned char b, unsigned char a); /*add 1 color to the palette*/
+
+typedef struct LodePNG_EncodeSettings
+{
+ LodeZlib_DeflateSettings zlibsettings; /*settings for the zlib encoder, such as window size, ...*/
+
+ unsigned autoLeaveOutAlphaChannel; /*automatically use color type without alpha instead of given one, if given image is opaque*/
+ unsigned force_palette; /*force creating a PLTE chunk if colortype is 2 or 6 (= a suggested palette). If colortype is 3, PLTE is _always_ created.*/
+} LodePNG_EncodeSettings;
+
+void LodePNG_EncodeSettings_init(LodePNG_EncodeSettings* settings);
+
+typedef struct LodePNG_Encoder
+{
+ LodePNG_EncodeSettings settings;
+ LodePNG_InfoPng infoPng; /*the info specified by the user may not be changed by the encoder. The encoder will try to generate a PNG close to the given info.*/
+ LodePNG_InfoRaw infoRaw; /*put the properties of the input raw image in here*/
+ unsigned error;
+} LodePNG_Encoder;
+
+void LodePNG_Encoder_init(LodePNG_Encoder* encoder);
+void LodePNG_Encoder_cleanup(LodePNG_Encoder* encoder);
+void LodePNG_Encoder_copy(LodePNG_Encoder* dest, const LodePNG_Encoder* source);
+
+/*This function allocates the out buffer and stores the size in *outsize.*/
+void LodePNG_encode(LodePNG_Encoder* encoder, unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h);
+
+/*free functions allowing to load and save a file from/to harddisk*/
+/*This function allocates the out buffer and stores the size in *outsize.*/
+//unsigned LodePNG_loadFile(unsigned char** out, size_t* outsize, const char* filename);
+unsigned LodePNG_saveFile(const unsigned char* buffer, size_t buffersize, const char* filename);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+