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