/* This is not the place to learn how to use libpng. The file libpng-manual.txt *describeshowtouselibpng,andthefileexample.csummarizesit *withsomecodeonwhichtobuild.Thisfileisusefulforlooking *attheactualfunctiondefinitionsandstructurecomponents.Ifthat *filehasbeenstrippedfromyourcopyoflibpng,youcanfinditat *<http://www.libpng.org/pub/png/libpng-manual.txt> * *IfyoujustneedtoreadaPNGfileanddon'twanttoreadthedocumentation *skiptotheendofthisfileandreadthesectionentitled'simplifiedAPI'.
*/
/* Version information for png.h - this should match the version in png.c */ #define PNG_LIBPNG_VER_STRING "1.6.58" #define PNG_HEADER_VERSION_STRING " libpng version " PNG_LIBPNG_VER_STRING "\n"
/* The versions of shared library builds should stay in sync, going forward */ #define PNG_LIBPNG_VER_SHAREDLIB 16 #define PNG_LIBPNG_VER_SONUM PNG_LIBPNG_VER_SHAREDLIB /* [Deprecated] */ #define PNG_LIBPNG_VER_DLLNUM PNG_LIBPNG_VER_SHAREDLIB /* [Deprecated] */
/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */ #define PNG_LIBPNG_VER_MAJOR 1 #define PNG_LIBPNG_VER_MINOR 6 #define PNG_LIBPNG_VER_RELEASE 58
/* This should be zero for a public release, or non-zero for a *developmentversion.
*/ #define PNG_LIBPNG_VER_BUILD 0
/* Release-Specific Flags */ #define PNG_LIBPNG_BUILD_PATCH 8/* Can be OR'ed with
PNG_LIBPNG_BUILD_STABLE only */ #define PNG_LIBPNG_BUILD_PRIVATE 16/* Cannot be OR'ed with
PNG_LIBPNG_BUILD_SPECIAL */ #define PNG_LIBPNG_BUILD_SPECIAL 32/* Cannot be OR'ed with
PNG_LIBPNG_BUILD_PRIVATE */
/* Careful here. At one time, Guy wanted to use 082, but that *wouldbeoctal.Wemustnotincludeleadingzeros. *Versions0.7through1.0.0wereintherange0to100here *(onlyversion1.0.0wasmis-numbered100insteadof10000). *Fromversion1.0.1itis: *XXYYZZ,whereXX=major,YY=minor,ZZ=release
*/ #define PNG_LIBPNG_VER 10658/* 1.6.58 */
/* Library configuration: these options cannot be changed after *thelibraryhasbeenbuilt.
*/ #ifndef PNGLCONF_H /* If pnglibconf.h is missing, you can *copyscripts/pnglibconf.h.prebuilttopnglibconf.h
*/ # include "pnglibconf.h" #endif
/* This triggers a compiler error in png.c, if png.c and png.h *donotagreeupontheversionnumber.
*/ typedefchar *png_libpng_version_1_6_58;
/* Basic control structions. Read libpng-manual.txt or libpng.3 for more info. * *png_structisthecacheofinformationusedwhilereadingorwritingasingle *PNGfile.Oneoftheseisalwaysrequired,althoughthesimplifiedAPI *(below)hidesthecreationanddestructionofit.
*/ typedefstruct png_struct_def png_struct; typedefconst png_struct * png_const_structp; typedef png_struct * png_structp; typedef png_struct * * png_structpp;
/* png_info contains information read from or to be written to a PNG file. One *ormoreofthesemustexistwhilereadingorcreatingaPNGfile.The *informationisnotusedbylibpngduringreadbutisusedtocontrolwhat *getswrittenwhenaPNGfileiscreated."png_get_"functioncallsread *informationduringreadand"png_set_"functionscallswriteinformation *whencreatingaPNG. *beenmovedintoaseparateheaderfilethatisnotaccessibleto *applications.Readlibpng-manual.txtorlibpng.3formoreinfo.
*/ typedefstruct png_info_def png_info; typedef png_info * png_infop; typedefconst png_info * png_const_infop; typedef png_info * * png_infopp;
/* Three color definitions. The order of the red, green, and blue, (and the *exactsize)isnotimportant,althoughthesizeofthefieldsneedto *bepng_byteorpng_uint_16(asdefinedbelow).
*/ typedefstruct png_color_struct
{
png_byte red;
png_byte green;
png_byte blue;
} png_color; typedef png_color * png_colorp; typedefconst png_color * png_const_colorp; typedef png_color * * png_colorpp;
typedefstruct png_color_16_struct
{
png_byte index; /* used for palette files */
png_uint_16 red; /* for use in red green blue files */
png_uint_16 green;
png_uint_16 blue;
png_uint_16 gray; /* for use in grayscale files */
} png_color_16; typedef png_color_16 * png_color_16p; typedefconst png_color_16 * png_const_color_16p; typedef png_color_16 * * png_color_16pp;
typedefstruct png_color_8_struct
{
png_byte red; /* for use in red green blue files */
png_byte green;
png_byte blue;
png_byte gray; /* for use in grayscale files */
png_byte alpha; /* for alpha channel files */
} png_color_8; typedef png_color_8 * png_color_8p; typedefconst png_color_8 * png_const_color_8p; typedef png_color_8 * * png_color_8pp;
/* When the depth of the sPLT palette is 8 bits, the color and alpha samples *occupytheLSBoftheirrespectivemembers,andtheMSBofeachmember *iszero-filled.Thefrequencymemberalwaysoccupiesthefull16bits.
*/
#ifdef PNG_TEXT_SUPPORTED /* png_text holds the contents of a text/ztxt/itxt chunk in a PNG file, *andwhetherthatcontentsiscompressedornot.The"key"field *pointstoaregularzero-terminatedCstring.The"text"fieldscanbea *regularCstring,anemptystring,oraNULLpointer. *However,thestructurereturnedbypng_get_text()willalwayscontain *the"text"fieldasaregularzero-terminatedCstring(possibly *empty),neveraNULLpointer,soitcanbesafelyusedinprintf()and *otherstring-handlingfunctions.Notethatthe"itxt_length","lang",and *"lang_key"membersofthestructureonlyexistwhenthelibraryisbuilt *withiTXtchunksupport.Priortolibpng-1.4.0thelibrarywasbuiltby *defaultwithoutiTXtsupport.AlsonotethatwheniTXt*is*supported, *the"lang"and"lang_key"fieldscontainNULLpointerswhenthe *"compression"fieldcontains*PNG_TEXT_COMPRESSION_NONEor *PNG_TEXT_COMPRESSION_zTXt.Notethatthe"compressionvalue"isnotthe *sameaswhatappearsinthePNGtEXt/zTXt/iTXtchunk's"compressionflag" *whichisalways0or1,orits"compressionmethod"whichisalways0.
*/ typedefstruct png_text_struct
{ int compression; /* compression value: -1:tEXt,none 0:zTXt,deflate 1:iTXt,none
2: iTXt, deflate */
png_charp key; /* keyword, 1-79 character description of "text" */
png_charp text; /* comment, may be an empty string (ie "")
or a NULL pointer */
size_t text_length; /* length of the text string */
size_t itxt_length; /* length of the itxt string */
png_charp lang; /* language code, 0-79 characters
or a NULL pointer */
png_charp lang_key; /* keyword translated UTF-8 string, 0 or more
chars or a NULL pointer */
} png_text; typedef png_text * png_textp; typedefconst png_text * png_const_textp; typedef png_text * * png_textpp; #endif
/* Supported compression types for text in PNG files (tEXt, and zTXt).
* The values of the PNG_TEXT_COMPRESSION_ defines should NOT be changed. */ #define PNG_TEXT_COMPRESSION_NONE_WR -3 #define PNG_TEXT_COMPRESSION_zTXt_WR -2 #define PNG_TEXT_COMPRESSION_NONE -1 #define PNG_TEXT_COMPRESSION_zTXt 0 #define PNG_ITXT_COMPRESSION_NONE 1 #define PNG_ITXT_COMPRESSION_zTXt 2 #define PNG_TEXT_COMPRESSION_LAST 3/* Not a valid value */
/* png_time is a way to hold the time in an machine independent way. *Twoconversionsareprovided,bothfromtime_tandstructtm.There *isnoportablewaytoconverttoeitherofthesestructures,asfar *asIknow.Ifyouknowofaportableway,sendittome.Asaside *note-PNGhasalwaysbeenYear2000compliant!
*/ typedefstruct png_time_struct
{
png_uint_16 year; /* full year, as in, 1995 */
png_byte month; /* month of year, 1 - 12 */
png_byte day; /* day of month, 1 - 31 */
png_byte hour; /* hour of day, 0 - 23 */
png_byte minute; /* minute of hour, 0 - 59 */
png_byte second; /* second of minute, 0 - 60 (for leap seconds) */
} png_time; typedef png_time * png_timep; typedefconst png_time * png_const_timep; typedef png_time * * png_timepp;
#ifdefined(PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED) ||\ defined(PNG_USER_CHUNKS_SUPPORTED) /* png_unknown_chunk is a structure to hold queued chunks for which there is *nospecificsupport.Theideaisthatwecanusethistoqueue *upprivatechunksforoutputeventhoughthelibrarydoesn'tactually *knowabouttheirsemantics. * *Thedatainthestructureissetbylibpngonreadandusedonwrite.
*/ typedefstruct png_unknown_chunk_t
{
png_byte name[5]; /* Textual chunk name with '\0' terminator */
png_byte *data; /* Data, should not be modified on read! */
size_t size;
/* On write 'location' must be set using the flag values listed below. *Noticethatonreaditissetbylibpnghoweverthevaluesstoredhave *morebitssetthanarelistedbelow.Alwaystreatthevalueasa *bitmask.Onwritesetonlyonebit-settingmultiplebitsmaycausethe *chunktobewritteninmultipleplaces.
*/
png_byte location; /* mode of operation at read time */
}
png_unknown_chunk;
/* Flag values for the unknown chunk location byte. */ #define PNG_HAVE_IHDR 0x01 #define PNG_HAVE_PLTE 0x02 #define PNG_AFTER_IDAT 0x08
/* Maximum positive integer used in PNG is (2^31)-1 */ #define PNG_UINT_31_MAX ((png_uint_32)0x7fffffffL) #define PNG_UINT_32_MAX ((png_uint_32)(-1)) #define PNG_SIZE_MAX ((size_t)(-1))
/* These are constants for fixed point values encoded in the *PNGspecificationmanner(x100000)
*/ #define PNG_FP_1 100000 #define PNG_FP_HALF 50000 #define PNG_FP_MAX ((png_fixed_point)0x7fffffffL) #define PNG_FP_MIN (-PNG_FP_MAX)
/* These describe the color_type field in png_info. */ /* color type masks */ #define PNG_COLOR_MASK_PALETTE 1 #define PNG_COLOR_MASK_COLOR 2 #define PNG_COLOR_MASK_ALPHA 4
/* color types. Note that not all combinations are legal */ #define PNG_COLOR_TYPE_GRAY 0 #define PNG_COLOR_TYPE_PALETTE (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_PALETTE) #define PNG_COLOR_TYPE_RGB (PNG_COLOR_MASK_COLOR) #define PNG_COLOR_TYPE_RGB_ALPHA (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_ALPHA) #define PNG_COLOR_TYPE_GRAY_ALPHA (PNG_COLOR_MASK_ALPHA) /* aliases */ #define PNG_COLOR_TYPE_RGBA PNG_COLOR_TYPE_RGB_ALPHA #define PNG_COLOR_TYPE_GA PNG_COLOR_TYPE_GRAY_ALPHA
/* This is for compression type. PNG 1.0-1.2 only define the single type. */ #define PNG_COMPRESSION_TYPE_BASE 0/* Deflate method 8, 32K window */ #define PNG_COMPRESSION_TYPE_DEFAULT PNG_COMPRESSION_TYPE_BASE
/* This is for filter type. PNG 1.0-1.2 only define the single type. */ #define PNG_FILTER_TYPE_BASE 0/* Single row per-byte filtering */ #define PNG_INTRAPIXEL_DIFFERENCING 64/* Used only in MNG datastreams */ #define PNG_FILTER_TYPE_DEFAULT PNG_FILTER_TYPE_BASE
/* These are for the interlacing type. These values should NOT be changed. */ #define PNG_INTERLACE_NONE 0/* Non-interlaced image */ #define PNG_INTERLACE_ADAM7 1/* Adam7 interlacing */ #define PNG_INTERLACE_LAST 2/* Not a valid value */
/* These are for the oFFs chunk. These values should NOT be changed. */ #define PNG_OFFSET_PIXEL 0/* Offset in pixels */ #define PNG_OFFSET_MICROMETER 1/* Offset in micrometers (1/10^6 meter) */ #define PNG_OFFSET_LAST 2/* Not a valid value */
/* These are for the pCAL chunk. These values should NOT be changed. */ #define PNG_EQUATION_LINEAR 0/* Linear transformation */ #define PNG_EQUATION_BASE_E 1/* Exponential base e transform */ #define PNG_EQUATION_ARBITRARY 2/* Arbitrary base exponential transform */ #define PNG_EQUATION_HYPERBOLIC 3/* Hyperbolic sine transformation */ #define PNG_EQUATION_LAST 4/* Not a valid value */
/* These are for the sCAL chunk. These values should NOT be changed. */ #define PNG_SCALE_UNKNOWN 0/* unknown unit (image scale) */ #define PNG_SCALE_METER 1/* meters per pixel */ #define PNG_SCALE_RADIAN 2/* radians per pixel */ #define PNG_SCALE_LAST 3/* Not a valid value */
/* These are for the pHYs chunk. These values should NOT be changed. */ #define PNG_RESOLUTION_UNKNOWN 0/* pixels/unknown unit (aspect ratio) */ #define PNG_RESOLUTION_METER 1/* pixels/meter */ #define PNG_RESOLUTION_LAST 2/* Not a valid value */
/* These are for the sRGB chunk. These values should NOT be changed. */ #define PNG_sRGB_INTENT_PERCEPTUAL 0 #define PNG_sRGB_INTENT_RELATIVE 1 #define PNG_sRGB_INTENT_SATURATION 2 #define PNG_sRGB_INTENT_ABSOLUTE 3 #define PNG_sRGB_INTENT_LAST 4/* Not a valid value */
/* This is for text chunks */ #define PNG_KEYWORD_MAX_LENGTH 79
/* Maximum number of entries in PLTE/sPLT/tRNS arrays */ #define PNG_MAX_PALETTE_LENGTH 256
/* This is used for the transformation routines, as some of them *changethesevaluesfortherow.Italsoshouldenableusing *theroutinesforotherpurposes.
*/ typedefstruct png_row_info_struct
{
png_uint_32 width; /* width of row */
size_t rowbytes; /* number of bytes in row */
png_byte color_type; /* color type of row */
png_byte bit_depth; /* bit depth of row */
png_byte channels; /* number of channels (1, 2, 3, or 4) */
png_byte pixel_depth; /* bits per pixel (depth * channels) */
} png_row_info;
#ifdef PNG_SETJMP_SUPPORTED /* This must match the function definition in <setjmp.h>, and the application *mustincludethisbeforepng.htoobtainthedefinitionofjmp_buf.The *functionisrequiredtobePNG_NORETURN,butthisisnotchecked.Ifthe *functiondoesreturntheapplicationwillcrashviaanabort()orsimilar *systemlevelcall. * *Ifyougetawarningherewhilebuildingthelibraryyoumayneedtomake *changestoensurethatpnglibconf.hrecordsthecallingconventionusedby *yourcompiler.Thismaybeverydifficult-tryusingadifferentcompiler *tobuildthelibrary!
*/
PNG_FUNCTION(void, (PNGCAPI *png_longjmp_ptr), (jmp_buf, int), typedef); #endif
/* Transform masks for the high-level interface */ #define PNG_TRANSFORM_IDENTITY 0x0000 /* read and write */ #define PNG_TRANSFORM_STRIP_16 0x0001 /* read only */ #define PNG_TRANSFORM_STRIP_ALPHA 0x0002 /* read only */ #define PNG_TRANSFORM_PACKING 0x0004 /* read and write */ #define PNG_TRANSFORM_PACKSWAP 0x0008 /* read and write */ #define PNG_TRANSFORM_EXPAND 0x0010 /* read only */ #define PNG_TRANSFORM_INVERT_MONO 0x0020 /* read and write */ #define PNG_TRANSFORM_SHIFT 0x0040 /* read and write */ #define PNG_TRANSFORM_BGR 0x0080 /* read and write */ #define PNG_TRANSFORM_SWAP_ALPHA 0x0100 /* read and write */ #define PNG_TRANSFORM_SWAP_ENDIAN 0x0200 /* read and write */ #define PNG_TRANSFORM_INVERT_ALPHA 0x0400 /* read and write */ #define PNG_TRANSFORM_STRIP_FILLER 0x0800 /* write only */ /* Added to libpng-1.2.34 */ #define PNG_TRANSFORM_STRIP_FILLER_BEFORE PNG_TRANSFORM_STRIP_FILLER #define PNG_TRANSFORM_STRIP_FILLER_AFTER 0x1000 /* write only */ /* Added to libpng-1.4.0 */ #define PNG_TRANSFORM_GRAY_TO_RGB 0x2000 /* read only */ /* Added to libpng-1.5.4 */ #define PNG_TRANSFORM_EXPAND_16 0x4000 /* read only */ #if ~0U > 0xffffU /* or else this might break on a 16-bit machine */ #define PNG_TRANSFORM_SCALE_16 0x8000 /* read only */ #endif
/* Flags for MNG supported features */ #define PNG_FLAG_MNG_EMPTY_PLTE 0x01 #define PNG_FLAG_MNG_FILTER_64 0x04 #define PNG_ALL_MNG_FEATURES 0x05
/* NOTE: prior to 1.5 these functions had no 'API' style declaration, *thisallowedthezlibdefaultfunctionstobeusedonWindows *platforms.In1.5thezlibdefaultmalloc(whichjustcallsmallocand *ignoresthefirstargument)shouldbecompletelycompatiblewiththe *following.
*/ typedef PNG_CALLBACK(png_voidp, *png_malloc_ptr,
(png_structp, png_alloc_size_t)); typedef PNG_CALLBACK(void, *png_free_ptr,
(png_structp, png_voidp));
/* Returns the version number of the library */
PNG_EXPORT(1, png_uint_32, png_access_version_number,
(void));
/* Tell lib we have already handled the first <num_bytes> magic bytes. *Handlingmorethan8bytesfromthebeginningofthefileisanerror.
*/
PNG_EXPORT(2, void, png_set_sig_bytes,
(png_structrp png_ptr, int num_bytes));
/* Check sig[start] through sig[start + num_to_check - 1] to see if it's a *PNGfile.Returnszeroifthesuppliedbytesmatchthe8-bytePNG *signature,andnon-zerootherwise.Havingnum_to_check==0or *start>7willalwaysfail(i.e.returnnon-zero).
*/
PNG_EXPORT(3, int, png_sig_cmp,
(png_const_bytep sig, size_t start, size_t num_to_check));
/* Simple signature checking function. This is the same as calling *png_check_sig(sig,n):=(png_sig_cmp(sig,0,n)==0).
*/ #define png_check_sig(sig, n) (png_sig_cmp((sig), 0, (n)) == 0) /* DEPRECATED */
/* Allocate and initialize png_ptr struct for reading, and any other memory. */
PNG_EXPORTA(4, png_structp, png_create_read_struct,
(png_const_charp user_png_ver,
png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warn_fn),
PNG_ALLOCATED);
/* Allocate and initialize png_ptr struct for writing, and any other memory */
PNG_EXPORTA(5, png_structp, png_create_write_struct,
(png_const_charp user_png_ver,
png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warn_fn),
PNG_ALLOCATED);
/* Moved from pngconf.h in 1.4.0 and modified to ensure setjmp/longjmp *matchup.
*/ #ifdef PNG_SETJMP_SUPPORTED /* This function returns the jmp_buf built in to *png_ptr. It must be *suppliedwithanappropriate'longjmp'functiontouseonthatjmp_buf *unlessthedefaulterrorfunctionisoverriddeninwhichcaseNULLis *acceptable.Thesizeofthejmp_bufischeckedagainsttheactualsize *allocatedbythelibrary-thecallwillreturnNULLonamismatch *indicatinganABImismatch.
*/
PNG_EXPORT(8, jmp_buf*, png_set_longjmp_fn,
(png_structrp png_ptr, png_longjmp_ptr longjmp_fn, size_t jmp_buf_size)); # define png_jmpbuf(png_ptr) \
(*png_set_longjmp_fn((png_ptr), longjmp, (sizeof (jmp_buf)))) #else # define png_jmpbuf(png_ptr) \
(LIBPNG_WAS_COMPILED_WITH__PNG_NO_SETJMP) #endif /* This function should be used by libpng applications in place of *longjmp(png_ptr->jmpbuf,val).Iflongjmp_fn()hasbeenset,it *willuseit;otherwiseitwillcallPNG_ABORT().Thisfunctionwas *addedinlibpng-1.5.0.
*/
PNG_EXPORTA(9, void, png_longjmp,
(png_const_structrp png_ptr, int val),
PNG_NORETURN);
/* Write the start of a PNG chunk - length and chunk name. */
PNG_EXPORT(15, void, png_write_chunk_start,
(png_structrp png_ptr,
png_const_bytep chunk_name, png_uint_32 length));
/* Write the data of a PNG chunk started with png_write_chunk_start(). */
PNG_EXPORT(16, void, png_write_chunk_data,
(png_structrp png_ptr,
png_const_bytep data, size_t length));
/* Finish a chunk started with png_write_chunk_start() (includes CRC). */
PNG_EXPORT(17, void, png_write_chunk_end,
(png_structrp png_ptr));
/* Allocate and initialize the info structure */
PNG_EXPORTA(18, png_infop, png_create_info_struct,
(png_const_structrp png_ptr),
PNG_ALLOCATED);
/* DEPRECATED: this function allowed init structures to be created using the *defaultallocationmethod(typicallymalloc).Useisdeprecatedin1.6.0and *theAPIwillberemovedinthefuture.
*/
PNG_EXPORTA(19, void, png_info_init_3,
(png_infopp info_ptr, size_t png_info_struct_size),
PNG_DEPRECATED);
/* Writes all the PNG information before the image. */
PNG_EXPORT(20, void, png_write_info_before_PLTE,
(png_structrp png_ptr, png_const_inforp info_ptr));
PNG_EXPORT(21, void, png_write_info,
(png_structrp png_ptr, png_const_inforp info_ptr));
#ifdef PNG_SEQUENTIAL_READ_SUPPORTED /* Read the information before the actual image data. */
PNG_EXPORT(22, void, png_read_info,
(png_structrp png_ptr, png_inforp info_ptr)); #endif
#ifdef PNG_TIME_RFC1123_SUPPORTED /* Convert to a US string format: there is no localization support in this *routine.Theoriginalimplementationuseda29characterbufferin *png_struct,thiswillberemovedinfutureversions.
*/ #if PNG_LIBPNG_VER < 10700 /* To do: remove this from libpng17 (and from libpng17/png.c and pngstruct.h) */
PNG_EXPORTA(23, png_const_charp, png_convert_to_rfc1123,
(png_structrp png_ptr, png_const_timep ptime),
PNG_DEPRECATED); #endif
PNG_EXPORT(241, int, png_convert_to_rfc1123_buffer,
(char out[29], png_const_timep ptime)); #endif
#ifdef PNG_CONVERT_tIME_SUPPORTED /* Convert from a struct tm to png_time */
PNG_EXPORT(24, void, png_convert_from_struct_tm,
(png_timep ptime, conststruct tm * ttime));
/* Convert from time_t to png_time. Uses gmtime() */
PNG_EXPORT(25, void, png_convert_from_time_t,
(png_timep ptime, time_t ttime)); #endif/* CONVERT_tIME */
#ifdef PNG_READ_EXPAND_SUPPORTED /* Expand data to 24-bit RGB, or 8-bit grayscale, with alpha if available. */
PNG_EXPORT(26, void, png_set_expand,
(png_structrp png_ptr));
PNG_EXPORT(27, void, png_set_expand_gray_1_2_4_to_8,
(png_structrp png_ptr));
PNG_EXPORT(28, void, png_set_palette_to_rgb,
(png_structrp png_ptr));
PNG_EXPORT(29, void, png_set_tRNS_to_alpha,
(png_structrp png_ptr)); #endif
#ifdef PNG_READ_EXPAND_16_SUPPORTED /* Expand to 16-bit channels, forces conversion of palette to RGB and expansion *ofatRNSchunkifpresent.
*/
PNG_EXPORT(221, void, png_set_expand_16,
(png_structrp png_ptr)); #endif
#ifdefined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) /* Use blue, green, red order for pixels. */
PNG_EXPORT(30, void, png_set_bgr,
(png_structrp png_ptr)); #endif
#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED /* Expand the grayscale to 24-bit RGB if necessary. */
PNG_EXPORT(31, void, png_set_gray_to_rgb,
(png_structrp png_ptr)); #endif
#ifdef PNG_READ_ALPHA_MODE_SUPPORTED /* How the alpha channel is interpreted - this affects how the color channels *ofaPNGfilearereturnedtothecallingapplicationwhenanalphachannel, *oratRNSchunkinapalettefile,ispresent. * *ThishasnoeffectonthewaypixelsarewrittenintoaPNGoutput *datastream.ThecolorsamplesinaPNGdatastreamareneverpremultiplied *withthealphasamples. * *ThedefaultistoreturndataaccordingtothePNGspecification:thealpha *channelisalinearmeasureofthecontributionofthepixeltothe *correspondingcompositedpixel,andthecolorchannelsareunassociated *(notpremultiplied).Thegammaencodedcolorchannelsmustbescaled *accordingtothecontributionandtodothisitisnecessarytoundo *theencoding,scalethecolorvalues,performthecompositionandre-encode *thevalues.Thisisthe'PNG'mode. * *Thealternativeisto'associate'thealphawiththecolorinformationby *storingcolorchannelvaluesthathavebeenscaledbythealpha. *image.Thesearethe'STANDARD','ASSOCIATED'or'PREMULTIPLIED'modes *(thelatterbeingthetwocommonnamesforassociatedalphacolorchannels). * *Forthe'OPTIMIZED'mode,apixelistreatedasopaqueonlyifthealpha *valueisequaltothemaximumvalue. * *Thefinalchoiceistogammaencodethealphachannelaswell.Thisis *brokenbecause,inpractice,noimplementationthatusesthischoice *correctlyundoestheencodingbeforehandlingalphacomposition.Usethis *choiceonlyifotherseriouserrorsinthesoftwareorhardwareyouuse *mandateit;thetypicalseriouserrorisfordarkhalostoappeararound *opaqueareasofthecompositedPNGimagebecauseofarithmeticoverflow. * *TheAPIfunctionpng_set_alpha_modespecifieswhichofthesechoicestouse *withanenumerated'mode'valueandthegammaoftherequiredoutput:
*/ #define PNG_ALPHA_PNG 0/* according to the PNG standard */ #define PNG_ALPHA_STANDARD 1/* according to Porter/Duff */ #define PNG_ALPHA_ASSOCIATED 1/* as above; this is the normal practice */ #define PNG_ALPHA_PREMULTIPLIED 1/* as above */ #define PNG_ALPHA_OPTIMIZED 2/* 'PNG' for opaque pixels, else 'STANDARD' */ #define PNG_ALPHA_BROKEN 3/* the alpha channel is gamma encoded */
PNG_FP_EXPORT(227, void, png_set_alpha_mode,
(png_structrp png_ptr, int mode, double output_gamma))
PNG_FIXED_EXPORT(228, void, png_set_alpha_mode_fixed,
(png_structrp png_ptr, int mode, png_fixed_point output_gamma)) #endif
#ifdefined(PNG_GAMMA_SUPPORTED) || defined(PNG_READ_ALPHA_MODE_SUPPORTED) /* The output_gamma value is a screen gamma in libpng terminology: it expresses *howtodecodetheoutputvalues,nothowtheyareencoded.
*/ #define PNG_DEFAULT_sRGB -1/* sRGB gamma and color space */ #define PNG_GAMMA_MAC_18 -2/* Old Mac '1.8' gamma and color space */ #define PNG_GAMMA_sRGB 220000/* Television standards--matches sRGB gamma */ #define PNG_GAMMA_LINEAR PNG_FP_1 /* Linear */ #endif
#ifdefined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) /* Add a filler byte to 8-bit or 16-bit Gray or 24-bit or 48-bit RGB images. */
PNG_EXPORT(39, void, png_set_filler,
(png_structrp png_ptr, png_uint_32 filler, int flags)); /* The values of the PNG_FILLER_ defines should NOT be changed */ # define PNG_FILLER_BEFORE 0 # define PNG_FILLER_AFTER 1 /* Add an alpha byte to 8-bit or 16-bit Gray or 24-bit or 48-bit RGB images. */
PNG_EXPORT(40, void, png_set_add_alpha,
(png_structrp png_ptr, png_uint_32 filler, int flags)); #endif/* READ_FILLER || WRITE_FILLER */
#ifdefined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED) /* Use 1 byte per pixel in 1, 2, or 4-bit depth files. */
PNG_EXPORT(42, void, png_set_packing,
(png_structrp png_ptr)); #endif
#ifdefined(PNG_READ_PACKSWAP_SUPPORTED) || \ defined(PNG_WRITE_PACKSWAP_SUPPORTED) /* Swap packing order of pixels in bytes. */
PNG_EXPORT(43, void, png_set_packswap,
(png_structrp png_ptr)); #endif
#ifdefined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) /* Converts files to legal bit depths. */
PNG_EXPORT(44, void, png_set_shift,
(png_structrp png_ptr, png_const_color_8p true_bits)); #endif
#ifdefined(PNG_READ_INTERLACING_SUPPORTED) || \ defined(PNG_WRITE_INTERLACING_SUPPORTED) /* Have the code handle the interlacing. Returns the number of passes. *MUSTbecalledbeforepng_read_update_infoorpng_start_read_image, *otherwiseitwillnothavethedesiredeffect.Notethatitisstill *necessarytocallpng_read_roworpng_read_rowspng_get_image_height *timesforeachpass.
*/
PNG_EXPORT(45, int, png_set_interlace_handling,
(png_structrp png_ptr)); #endif
#ifdef PNG_READ_BACKGROUND_SUPPORTED /* Handle alpha and tRNS by replacing with a background color. Prior to *libpng-1.5.4thisAPImustnotbecalledbeforethePNGfileheaderhasbeen *read.Doingsowillresultinunexpectedbehaviorandpossiblewarningsor *errorsifthePNGfilecontainsabKGDchunk.
*/
PNG_FP_EXPORT(47, void, png_set_background,
(png_structrp png_ptr,
png_const_color_16p background_color, int background_gamma_code, int need_expand, double background_gamma))
PNG_FIXED_EXPORT(215, void, png_set_background_fixed,
(png_structrp png_ptr,
png_const_color_16p background_color, int background_gamma_code, int need_expand, png_fixed_point background_gamma)) #endif #ifdef PNG_READ_BACKGROUND_SUPPORTED # define PNG_BACKGROUND_GAMMA_UNKNOWN 0 # define PNG_BACKGROUND_GAMMA_SCREEN 1 # define PNG_BACKGROUND_GAMMA_FILE 2 # define PNG_BACKGROUND_GAMMA_UNIQUE 3 #endif
#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED /* Scale a 16-bit depth file down to 8-bit, accurately. */
PNG_EXPORT(229, void, png_set_scale_16,
(png_structrp png_ptr)); #endif
#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED #define PNG_READ_16_TO_8_SUPPORTED /* Name prior to 1.5.4 */ /* Strip the second byte of information from a 16-bit depth file. */
PNG_EXPORT(48, void, png_set_strip_16,
(png_structrp png_ptr)); #endif
#ifdef PNG_READ_QUANTIZE_SUPPORTED /* Turn on quantizing, and reduce the palette to the number of colors *available.
*/
PNG_EXPORT(49, void, png_set_quantize,
(png_structrp png_ptr,
png_colorp palette, int num_palette, int maximum_colors,
png_const_uint_16p histogram, int full_quantize)); #endif
#ifdef PNG_READ_GAMMA_SUPPORTED /* The threshold on gamma processing is configurable but hard-wired into the *library.Thefollowingisthefloatingpointvariant.
*/ #define PNG_GAMMA_THRESHOLD (PNG_GAMMA_THRESHOLD_FIXED*.00001)
#ifdef PNG_WRITE_FLUSH_SUPPORTED /* Set how many lines between output flushes - 0 for no flushing */
PNG_EXPORT(51, void, png_set_flush,
(png_structrp png_ptr, int nrows)); /* Flush the current PNG output buffer */
PNG_EXPORT(52, void, png_write_flush,
(png_structrp png_ptr)); #endif
/* Optional call to update the users info structure */
PNG_EXPORT(54, void, png_read_update_info,
(png_structrp png_ptr, png_inforp info_ptr));
#ifdef PNG_SEQUENTIAL_READ_SUPPORTED /* Read one or more rows of image data. */
PNG_EXPORT(55, void, png_read_rows,
(png_structrp png_ptr, png_bytepp row,
png_bytepp display_row, png_uint_32 num_rows)); #endif
#ifdef PNG_SEQUENTIAL_READ_SUPPORTED /* Read a row of data. */
PNG_EXPORT(56, void, png_read_row,
(png_structrp png_ptr, png_bytep row, png_bytep display_row)); #endif
#ifdef PNG_SEQUENTIAL_READ_SUPPORTED /* Read the whole image into memory at once. */
PNG_EXPORT(57, void, png_read_image,
(png_structrp png_ptr, png_bytepp image)); #endif
/* Write a row of image data */
PNG_EXPORT(58, void, png_write_row,
(png_structrp png_ptr, png_const_bytep row));
/* Write a few rows of image data: (*row) is not written; however, the type *isdeclaredaswriteabletomaintaincompatibilitywithpreviousversions *oflibpngandtoallowthe'display_row'arrayfromread_rowstobepassed *unchangedtowrite_rows.
*/
PNG_EXPORT(59, void, png_write_rows,
(png_structrp png_ptr, png_bytepp row, png_uint_32 num_rows));
/* Write the image data */
PNG_EXPORT(60, void, png_write_image,
(png_structrp png_ptr, png_bytepp image));
/* Write the end of the PNG file. */
PNG_EXPORT(61, void, png_write_end,
(png_structrp png_ptr, png_inforp info_ptr));
#ifdef PNG_SEQUENTIAL_READ_SUPPORTED /* Read the end of the PNG file. */
PNG_EXPORT(62, void, png_read_end,
(png_structrp png_ptr, png_inforp info_ptr)); #endif
/* Free any memory associated with the png_info_struct */
PNG_EXPORT(63, void, png_destroy_info_struct,
(png_const_structrp png_ptr, png_infopp info_ptr_ptr));
/* Free any memory associated with the png_struct and the png_info_structs */
PNG_EXPORT(64, void, png_destroy_read_struct,
(png_structpp png_ptr_ptr,
png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr));
/* Free any memory associated with the png_struct and the png_info_structs */
PNG_EXPORT(65, void, png_destroy_write_struct,
(png_structpp png_ptr_ptr, png_infopp info_ptr_ptr));
/* Set the libpng method of handling chunk CRC errors */
PNG_EXPORT(66, void, png_set_crc_action,
(png_structrp png_ptr, int crit_action, int ancil_action));
/* Values for png_set_crc_action() say how to handle CRC errors in *ancillaryandcriticalchunks,andwhethertousethedatacontained *therein.Notethatitisimpossibleto"discard"datainacritical *chunk.Forversionspriorto0.90,theactionwasalwayserror/quit, *whereasinversion0.90andlater,theactionforCRCerrorsinancillary *chunksiswarn/discard.ThesevaluesshouldNOTbechanged. * *valueaction:criticalaction:ancillary
*/ #define PNG_CRC_DEFAULT 0/* error/quit warn/discard data */ #define PNG_CRC_ERROR_QUIT 1/* error/quit error/quit */ #define PNG_CRC_WARN_DISCARD 2/* (INVALID) warn/discard data */ #define PNG_CRC_WARN_USE 3/* warn/use data warn/use data */ #define PNG_CRC_QUIET_USE 4/* quiet/use data quiet/use data */ #define PNG_CRC_NO_CHANGE 5/* use current value use current value */
#ifdef PNG_WRITE_SUPPORTED /* These functions give the user control over the scan-line filtering in *libpngandthecompressionmethodsusedbyzlib.Thesefunctionsare *mainlyusefulfortesting,asthedefaultsshouldworkwithmostusers. *Thoseuserswhoaretightonmemoryorwantfasterperformanceatthe *expenseofcompressioncanmodifythem.Seethecompressionlibrary *headerfile(zlib.h)foranexplanationofthecompressionfunctions.
*/
/* Set the filtering method(s) used by libpng. Currently, the only valid *valuefor"method"is0.
*/
PNG_EXPORT(67, void, png_set_filter,
(png_structrp png_ptr, int method, int filters)); #endif/* WRITE */
/* Flags for png_set_filter() to say which filters to use. The flags *arechosensothattheydon'tconflictwithrealfiltertypes *below,incasetheyaresuppliedinsteadofthe#definedconstants. *ThesevaluesshouldNOTbechanged.
*/ #define PNG_NO_FILTERS 0x00 #define PNG_FILTER_NONE 0x08 #define PNG_FILTER_SUB 0x10 #define PNG_FILTER_UP 0x20 #define PNG_FILTER_AVG 0x40 #define PNG_FILTER_PAETH 0x80 #define PNG_FAST_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP) #define PNG_ALL_FILTERS (PNG_FAST_FILTERS | PNG_FILTER_AVG | PNG_FILTER_PAETH)
#ifdef PNG_WRITE_SUPPORTED #ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED /* DEPRECATED */
PNG_FP_EXPORT(68, void, png_set_filter_heuristics,
(png_structrp png_ptr, int heuristic_method, int num_weights,
png_const_doublep filter_weights,
png_const_doublep filter_costs))
PNG_FIXED_EXPORT(209, void, png_set_filter_heuristics_fixed,
(png_structrp png_ptr, int heuristic_method, int num_weights,
png_const_fixed_point_p filter_weights,
png_const_fixed_point_p filter_costs)) #endif/* WRITE_WEIGHTED_FILTER */
/* The following are no longer used and will be removed from libpng-1.7: */ #define PNG_FILTER_HEURISTIC_DEFAULT 0/* Currently "UNWEIGHTED" */ #define PNG_FILTER_HEURISTIC_UNWEIGHTED 1/* Used by libpng < 0.95 */ #define PNG_FILTER_HEURISTIC_WEIGHTED 2/* Experimental feature */ #define PNG_FILTER_HEURISTIC_LAST 3/* Not a valid value */
/* Set the library compression level. Currently, valid values range from *0-9,correspondingdirectlytothezlibcompressionlevels0-9 *(0-nocompression,9-"maximal"compression).Notethattestshave *shownthatzlibcompressionlevels3-6usuallyperformaswellaslevel9 *forPNGimages,anddoconsiderablyfewercalculations.Inthefuture, *thesevaluesmaynotcorresponddirectlytothezlibcompressionlevels.
*/ #ifdef PNG_WRITE_CUSTOMIZE_COMPRESSION_SUPPORTED
PNG_EXPORT(69, void, png_set_compression_level,
(png_structrp png_ptr, int level));
PNG_EXPORT(70, void, png_set_compression_mem_level,
(png_structrp png_ptr, int mem_level));
PNG_EXPORT(71, void, png_set_compression_strategy,
(png_structrp png_ptr, int strategy));
/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a *smallervalueofwindow_bitsifitcandososafely.
*/
PNG_EXPORT(72, void, png_set_compression_window_bits,
(png_structrp png_ptr, int window_bits));
PNG_EXPORT(73, void, png_set_compression_method,
(png_structrp png_ptr, int method)); #endif/* WRITE_CUSTOMIZE_COMPRESSION */
#ifdef PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED /* Also set zlib parameters for compressing non-IDAT chunks */
PNG_EXPORT(222, void, png_set_text_compression_level,
(png_structrp png_ptr, int level));
PNG_EXPORT(223, void, png_set_text_compression_mem_level,
(png_structrp png_ptr, int mem_level));
PNG_EXPORT(224, void, png_set_text_compression_strategy,
(png_structrp png_ptr, int strategy));
/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a *smallervalueofwindow_bitsifitcandososafely.
*/
PNG_EXPORT(225, void, png_set_text_compression_window_bits,
(png_structrp png_ptr, int window_bits));
/* These next functions are called for input/output, memory, and error *handling.Theyareinthefilepngrio.c,pngwio.c,andpngerror.c, *andcallstandardCI/Oroutinessuchasfread(),fwrite(),and *fprintf().ThesefunctionscanbemadetouseotherI/Oroutines *atruntimeforthoseapplicationsthatneedtohandleI/Oina *differentmannerbycallingpng_set_???_fn().Seelibpng-manual.txtfor *moreinformation.
*/
#ifdef PNG_STDIO_SUPPORTED /* Initialize the input/output for the PNG file to the default functions. */
PNG_EXPORT(74, void, png_init_io,
(png_structrp png_ptr, FILE *fp)); #endif
/* Replace the (error and abort), and warning functions with user *suppliedfunctions.Ifnomessagesaretobeprintedyoumuststill *writeandusereplacementfunctions.Thereplacementerror_fnshould *stilldoalongjmptothelastsetjmplocationifyouareusingthis *methodoferrorhandling.Iferror_fnorwarning_fnisNULL,the *defaultfunctionwillbeused.
*/
/* Return the user pointer associated with the error functions */
PNG_EXPORT(76, png_voidp, png_get_error_ptr,
(png_const_structrp png_ptr));
/* Replace the default data output functions with a user supplied one(s). *Ifbufferedoutputisnotused,thenoutput_flush_fncanbesettoNULL. *IfPNG_WRITE_FLUSH_SUPPORTEDisnotdefinedatlibpngcompiletime *output_flush_fnwillbeignored(andthuscanbeNULL). *ItisprobablyamistaketouseNULLforoutput_flush_fnif *write_data_fnisnotalsoNULLunlessyouhavebuiltlibpngwith *PNG_WRITE_FLUSH_SUPPORTEDundefined,becauseinthiscaselibpng's *defaultflushfunction,whichusesthestandard*FILEstructure,will *beused.
*/
PNG_EXPORT(77, void, png_set_write_fn,
(png_structrp png_ptr,
png_voidp io_ptr,
png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn));
/* Replace the default data input function with a user supplied one. */
PNG_EXPORT(78, void, png_set_read_fn,
(png_structrp png_ptr,
png_voidp io_ptr, png_rw_ptr read_data_fn));
/* Return the user pointer associated with the I/O functions */
PNG_EXPORT(79, png_voidp, png_get_io_ptr,
(png_const_structrp png_ptr));
#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED
PNG_EXPORT(86, void, png_set_user_transform_info,
(png_structrp png_ptr,
png_voidp user_transform_ptr, int user_transform_depth, int user_transform_channels)); /* Return the user pointer associated with the user transform functions */
PNG_EXPORT(87, png_voidp, png_get_user_transform_ptr,
(png_const_structrp png_ptr)); #endif
#ifdef PNG_USER_TRANSFORM_INFO_SUPPORTED /* Return information about the row currently being processed. Note that these *APIsdonotfailbutwillreturnunexpectedresultsifcalledoutsideauser *transformcallback.Alsonotethatwhentransforminganinterlacedimagethe *rownumberistherownumberwithinthesub-imageoftheinterlacepass,so *thevaluewillincreasetotheheightofthesub-image(notthefullimage) *thenresetto0forthenextpass. * *UsePNG_ROW_FROM_PASS_ROW(row,pass)andPNG_COL_FROM_PASS_COL(col,pass)to *findtheoutputpixel(x,y)givenaninterlacedsub-imagepixel *(row,col,pass).(Seebelowforthesemacros.)
*/
PNG_EXPORT(217, png_uint_32, png_get_current_row_number,
(png_const_structrp));
PNG_EXPORT(218, png_byte, png_get_current_pass_number,
(png_const_structrp)); #endif
#ifdef PNG_READ_USER_CHUNKS_SUPPORTED /* This callback is called only for *unknown* chunks. If *PNG_HANDLE_AS_UNKNOWN_SUPPORTEDissetthenitispossibletosetknown *chunkstobetreatedasunknown,howeverinthiscasethecallbackmustdo *anyprocessingrequiredbythechunk(e.g.bycallingtheappropriate *png_set_APIs.) * *Thereisnowritesupport-onwrite,bydefault,allthechunksinthe *'unknown'listarewritteninthespecifiedposition. * *Theintegerreturnfromthecallbackfunctionisinterpretedthus: * *negative:Anerroroccurred;png_chunk_errorwillbecalled. *zero:Thechunkwasnothandled,thechunkwillbesaved.Acritical *chunkwillcauseanerroratthispointunlessitistobesaved. *positive:Thechunkwashandled,libpngwillignore/discardit. * *See"INTERACTIONWITHUSERCHUNKCALLBACKS"belowforimportantnotesabout *howthisbehaviorwillchangeinlibpng1.7
*/
PNG_EXPORT(88, void, png_set_read_user_chunk_fn,
(png_structrp png_ptr,
png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn)); #endif
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED /* Sets the function callbacks for the push reader, and a pointer to a *user-definedstructureavailabletothecallbackfunctions.
*/
PNG_EXPORT(90, void, png_set_progressive_read_fn,
(png_structrp png_ptr,
png_voidp progressive_ptr, png_progressive_info_ptr info_fn,
png_progressive_row_ptr row_fn, png_progressive_end_ptr end_fn));
/* Returns the user pointer associated with the push read functions */
PNG_EXPORT(91, png_voidp, png_get_progressive_ptr,
(png_const_structrp png_ptr));
/* Function to be called when data becomes available */
PNG_EXPORT(92, void, png_process_data,
(png_structrp png_ptr,
png_inforp info_ptr, png_bytep buffer, size_t buffer_size));
/* A function which may be called *only* within png_process_data to stop the *processingofanymoredata.Thefunctionreturnsthenumberofbytes *remaining,excludinganythatlibpnghascachedinternally.Asubsequent *calltopng_process_datamustsupplythesebytesagain.Iftheargument *'save'issettotruetheroutinewillfirstsaveallthependingdataand *willalwaysreturn0.
*/
PNG_EXPORT(219, size_t, png_process_data_pause,
(png_structrp, int save));
/* A function which may be called *only* outside (after) a call to *png_process_data.Itreturnsthenumberofbytesofdatatoskipinthe *input.Normallyitwillreturn0,butifitreturnsanon-zerovaluethe *applicationmustskipthannumberofbytesofinputdataandpassthe *followingdatatothenextcalltopng_process_data.
*/
PNG_EXPORT(220, png_uint_32, png_process_data_skip,
(png_structrp));
/* Function that combines rows. 'new_row' is a flag that should come from *thecallbackandbenon-NULLifanythingneedstobedone;thelibrary *storesitsownversionofthenewdatainternallyandignoresthepassed *invalue.
*/
PNG_EXPORT(93, void, png_progressive_combine_row,
(png_const_structrp png_ptr,
png_bytep old_row, png_const_bytep new_row)); #endif/* PROGRESSIVE_READ */
/* Added at libpng version 1.2.4 */
PNG_EXPORTA(96, png_voidp, png_malloc_warn,
(png_const_structrp png_ptr, png_alloc_size_t size),
PNG_ALLOCATED);
/* Frees a pointer allocated by png_malloc() */
PNG_EXPORT(97, void, png_free,
(png_const_structrp png_ptr, png_voidp ptr));
/* Free data that was allocated internally */
PNG_EXPORT(98, void, png_free_data,
(png_const_structrp png_ptr, png_inforp info_ptr,
png_uint_32 free_me, int num));
/* Reassign the responsibility for freeing existing data, whether allocated *bylibpngorbytheapplication;thisworksonthepng_infostructurepassed *in,withoutchangingthestateforotherpng_infostructures.
*/
PNG_EXPORT(99, void, png_data_freer,
(png_const_structrp png_ptr, png_inforp info_ptr, int freer, png_uint_32 mask));
/* The same, but the chunk name is prepended to the error string. */
PNG_EXPORTA(103, void, png_chunk_error,
(png_const_structrp png_ptr, png_const_charp error_message),
PNG_NORETURN);
#ifdef PNG_WARNINGS_SUPPORTED /* Non-fatal error in libpng. Can continue, but may have a problem. */
PNG_EXPORT(105, void, png_warning,
(png_const_structrp png_ptr, png_const_charp warning_message));
/* Non-fatal error in libpng, chunk name is prepended to message. */
PNG_EXPORT(106, void, png_chunk_warning,
(png_const_structrp png_ptr, png_const_charp warning_message)); #else # define png_warning(s1,s2) ((void)(s1)) # define png_chunk_warning(s1,s2) ((void)(s1)) #endif
#ifdef PNG_BENIGN_ERRORS_SUPPORTED /* Benign error in libpng. Can continue, but may have a problem.
* User can choose whether to handle as a fatal error or as a warning. */
PNG_EXPORT(107, void, png_benign_error,
(png_const_structrp png_ptr, png_const_charp warning_message));
#ifdef PNG_READ_SUPPORTED /* Same, chunk name is prepended to message (only during read) */
PNG_EXPORT(108, void, png_chunk_benign_error,
(png_const_structrp png_ptr, png_const_charp warning_message)); #endif
/* The png_set_<chunk> functions are for storing values in the png_info_struct. *Similarly,thepng_get_<chunk>callsareusedtoreadvaluesfromthe *png_info_struct,eitherstoringtheparametersinthepassedvariables,or *settingpointersintothepng_info_structwherethedataisstored.The *png_get_<chunk>functionsreturnanon-zerovalueifthedatawasavailable *ininfo_ptr,orreturnzeroanddonotchangeanyoftheparametersifthe *datawasnotavailable. * *Thesefunctionsshouldbeusedinsteadofdirectlyaccessingpng_info *toavoidproblemswithfuturechangesinthesizeandinternallayoutof *png_info_struct.
*/ /* Returns "flag" if chunk data is valid in info_ptr. */
PNG_EXPORT(110, png_uint_32, png_get_valid,
(png_const_structrp png_ptr, png_const_inforp info_ptr, png_uint_32 flag));
/* Returns number of bytes needed to hold a transformed row. */
PNG_EXPORT(111, size_t, png_get_rowbytes,
(png_const_structrp png_ptr, png_const_inforp info_ptr));
#ifdef PNG_INFO_IMAGE_SUPPORTED /* Returns row_pointers, which is an array of pointers to scanlines that was *returnedfrompng_read_png().
*/
PNG_EXPORT(112, png_bytepp, png_get_rows,
(png_const_structrp png_ptr, png_const_inforp info_ptr));
/* Set row_pointers, which is an array of pointers to scanlines for use *bypng_write_png().
*/
PNG_EXPORT(113, void, png_set_rows,
(png_const_structrp png_ptr, png_inforp info_ptr, png_bytepp row_pointers)); #endif
/* Returns number of color channels in image. */
PNG_EXPORT(114, png_byte, png_get_channels,
(png_const_structrp png_ptr, png_const_inforp info_ptr));
PNG_EXPORT(143, png_uint_32, png_get_IHDR,
(png_const_structrp png_ptr, png_const_inforp info_ptr,
png_uint_32 *width, png_uint_32 *height, int *bit_depth, int *color_type, int *interlace_method, int *compression_method, int *filter_method));
PNG_EXPORT(144, void, png_set_IHDR,
(png_const_structrp png_ptr, png_inforp info_ptr,
png_uint_32 width, png_uint_32 height, int bit_depth, int color_type, int interlace_method, int compression_method, int filter_method));
#ifdef PNG_mDCV_SUPPORTED
PNG_FP_EXPORT(256, png_uint_32, png_get_mDCV,
(png_const_structrp png_ptr, png_const_inforp info_ptr, /* The chromaticities of the mastering display. As cHRM, but independent of *theencodingendpointsincHRM,orcICP,oriCCP.Thesevalueswill *alwaysbeintherange0to1.3107.
*/ double *white_x, double *white_y, double *red_x, double *red_y, double *green_x, double *green_y, double *blue_x, double *blue_y, /* Mastering display luminance in cd/m2 (nits). */ double *mastering_display_maximum_luminance, double *mastering_display_minimum_luminance))
#ifdef PNG_mDCV_SUPPORTED
PNG_FP_EXPORT(258, void, png_set_mDCV,
(png_const_structrp png_ptr, png_inforp info_ptr, /* The chromaticities of the mastering display. As cHRM, but independent of *theencodingendpointsincHRM,orcICP,oriCCP.
*/ double white_x, double white_y, double red_x, double red_y, double green_x, double green_y, double blue_x, double blue_y, /* Mastering display luminance in cd/m2 (nits). */ double mastering_display_maximum_luminance, double mastering_display_minimum_luminance))
PNG_FIXED_EXPORT(259, void, png_set_mDCV_fixed,
(png_const_structrp png_ptr, png_inforp info_ptr, /* The admissible range of these values is not the full range of a PNG *fixedpointvalue.Negativevaluescannotbeencodedandthemaximum
* value is about 1.3 */
png_fixed_point int_white_x, png_fixed_point int_white_y,
png_fixed_point int_red_x, png_fixed_point int_red_y,
png_fixed_point int_green_x, png_fixed_point int_green_y,
png_fixed_point int_blue_x, png_fixed_point int_blue_y, /* These are PNG unsigned 4 byte values: 31-bit unsigned values. The MSB *mustbezero.
*/
png_uint_32 mastering_display_maximum_luminance_scaled_by_10000,
png_uint_32 mastering_display_minimum_luminance_scaled_by_10000)) #endif
#ifdef PNG_TEXT_SUPPORTED /* png_get_text also returns the number of text chunks in *num_text */
PNG_EXPORT(162, int, png_get_text,
(png_const_structrp png_ptr, png_inforp info_ptr,
png_textp *text_ptr, int *num_text)); #endif
/* Note while png_set_text() will accept a structure whose text, *language,andtranslatedkeywordsareNULLpointers,thestructure *returnedbypng_get_textwillalwayscontainregular *zero-terminatedCstrings.Theymightbeemptystringsbut *theywillneverbeNULLpointers.
*/
/* The "keep" PNG_HANDLE_CHUNK_ parameter for the specified chunk is returned; *theresultisthereforetrue(non-zero)ifspecialhandlingisrequired, *falseforthedefaulthandling.
*/
PNG_EXPORT(173, int, png_handle_as_unknown,
(png_const_structrp png_ptr, png_const_bytep chunk_name)); #endif/* SET_UNKNOWN_CHUNKS */
#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
PNG_EXPORT(174, void, png_set_unknown_chunks,
(png_const_structrp png_ptr, png_inforp info_ptr,
png_const_unknown_chunkp unknowns, int num_unknowns)); /* NOTE: prior to 1.6.0 this routine set the 'location' field of the added *unknownstothelocationcurrentlystoredinthepng_struct.Thisis *invariablythewrongvalueonwrite.TofixthiscallthefollowingAPI *foreachchunkinthelistwiththecorrectlocation.Ifyouknowyour *codewon'tbecompiledonearlierversionsyoucanrelyon *png_set_unknown_chunks(write-ptr,png_get_unknown_chunks(read-ptr))doing *thecorrectthing.
*/
PNG_EXPORT(175, void, png_set_unknown_chunk_location,
(png_const_structrp png_ptr, png_inforp info_ptr, int chunk, int location));
/* Png_free_data() will turn off the "valid" flag for anything it frees. *Ifyouneedtoturnitoffforachunkthatyourapplicationhasfreed, *youcanusepng_set_invalid(png_ptr,info_ptr,PNG_INFO_CHNK);
*/
PNG_EXPORT(177, void, png_set_invalid,
(png_const_structrp png_ptr, png_inforp info_ptr, int mask));
#ifdef PNG_INFO_IMAGE_SUPPORTED /* The "params" pointer is currently not used and is for future expansion. */ #ifdef PNG_SEQUENTIAL_READ_SUPPORTED
PNG_EXPORT(178, void, png_read_png,
(png_structrp png_ptr, png_inforp info_ptr, int transforms, png_voidp params)); #endif #ifdef PNG_WRITE_SUPPORTED
PNG_EXPORT(179, void, png_write_png,
(png_structrp png_ptr, png_inforp info_ptr, int transforms, png_voidp params)); #endif #endif
/* For use in png_set_keep_unknown, added to version 1.2.6 */ #define PNG_HANDLE_CHUNK_AS_DEFAULT 0 #define PNG_HANDLE_CHUNK_NEVER 1 #define PNG_HANDLE_CHUNK_IF_SAFE 2 #define PNG_HANDLE_CHUNK_ALWAYS 3 #define PNG_HANDLE_CHUNK_LAST 4
/* Strip the prepended error numbers ("#nnn ") from error and warning *messagesbeforepassingthemtotheerrororwarninghandler.
*/ #ifdef PNG_ERROR_NUMBERS_SUPPORTED
PNG_EXPORT(185, void, png_set_strip_error_numbers,
(png_structrp png_ptr, png_uint_32 strip_mode)); #endif
/* The flags returned by png_get_io_state() are the following: */ # define PNG_IO_NONE 0x0000 /* no I/O at this moment */ # define PNG_IO_READING 0x0001 /* currently reading */ # define PNG_IO_WRITING 0x0002 /* currently writing */ # define PNG_IO_SIGNATURE 0x0010 /* currently at the file signature */ # define PNG_IO_CHUNK_HDR 0x0020 /* currently at the chunk header */ # define PNG_IO_CHUNK_DATA 0x0040 /* currently at the chunk data */ # define PNG_IO_CHUNK_CRC 0x0080 /* currently at the chunk crc */ # define PNG_IO_MASK_OP 0x000f /* current operation: reading/writing */ # define PNG_IO_MASK_LOC 0x00f0 /* current location: sig/hdr/data/crc */ #endif/* IO_STATE */
/* Interlace support. The following macros are always defined so that if *libpnginterlacehandlingisturnedoffthemacrosmaybeusedtohandle *interlacedimageswithintheapplication.
*/ #define PNG_INTERLACE_ADAM7_PASSES 7
/* Two macros to return the first row and first column of the original, *full,imagewhichappearsinagivenpass.'pass'isintherange0 *to6andtheresultisintherange0to7.
*/ #define PNG_PASS_START_ROW(pass) (((1&~(pass))<<(3-((pass)>>1)))&7) #define PNG_PASS_START_COL(pass) (((1& (pass))<<(3-(((pass)+1)>>1)))&7)
/* A macro to return the offset between pixels in the output row for a pair of *pixelsintheinput-effectivelytheinverseofthe'COL_SHIFT'macrothat *follows.NotethatROW_OFFSETistheoffsetfromonerowtothenextwhereas *COL_OFFSETisfromonecolumntothenext,withinarow.
*/ #define PNG_PASS_ROW_OFFSET(pass) ((pass)>2?(8>>(((pass)-1)>>1)):8) #define PNG_PASS_COL_OFFSET(pass) (1<<((7-(pass))>>1))
/* Two macros to help evaluate the number of rows or columns in each *pass.Thisisexpressedasashift-effectivelylog2ofthenumberor *rowsorcolumnsineach8x8tileoftheoriginalimage.
*/ #define PNG_PASS_ROW_SHIFT(pass) ((pass)>2?(8-(pass))>>1:3) #define PNG_PASS_COL_SHIFT(pass) ((pass)>1?(7-(pass))>>1:3)
/* Hence two macros to determine the number of rows or columns in a given *passofanimagegivenitsheightorwidth.Infactthesemacrosmay *returnnon-zeroeventhoughthesub-imageisempty,becausetheother *dimensionmaybeemptyforasmallimage.
*/ #define PNG_PASS_ROWS(height, pass) (((height)+(((1<<PNG_PASS_ROW_SHIFT(pass))\
-1)-PNG_PASS_START_ROW(pass)))>>PNG_PASS_ROW_SHIFT(pass)) #define PNG_PASS_COLS(width, pass) (((width)+(((1<<PNG_PASS_COL_SHIFT(pass))\
-1)-PNG_PASS_START_COL(pass)))>>PNG_PASS_COL_SHIFT(pass))
/* For the reader row callbacks (both progressive and sequential) it is *necessarytofindtherowintheoutputimagegivenarowinaninterlaced *image,sotwomoremacros:
*/ #define PNG_ROW_FROM_PASS_ROW(y_in, pass) \
(((y_in)<<PNG_PASS_ROW_SHIFT(pass))+PNG_PASS_START_ROW(pass)) #define PNG_COL_FROM_PASS_COL(x_in, pass) \
(((x_in)<<PNG_PASS_COL_SHIFT(pass))+PNG_PASS_START_COL(pass))
/* Two macros which return a boolean (0 or 1) saying whether the given row *orcolumnisinaparticularpass.Theseuseacommonutilitymacrothat *returnsamaskforagivenpass-theoffset'off'selectstherowor *columnversion.Themaskhastheappropriatebitsetforeachcolumnin *thetile.
*/ #define PNG_PASS_MASK(pass,off) ( \
((0x110145AF>>(((7-(off))-(pass))<<2)) & 0xF) | \
((0x01145AF0>>(((7-(off))-(pass))<<2)) & 0xF0))
#ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED /* With these routines we avoid an integer divide, which will be slower on *mostmachines.However,itdoestakemoreoperationsthanthecorresponding *dividemethod,soitmaybesloweronafewRISCsystems.Therearetwo *shifts(by8or16bits)andanaddition,versusasingleintegerdivide. * *NotethattheroundingfactorsareNOTsupposedtobethesame!128and *32768arecorrectfortheNODIVcode;127and32767arecorrectforthe *standardmethod. * *[OptimizedcodebyGregRoelofsandMarkAdler...blameusforbugs.:-)]
*/
/* fg and bg should be in `gamma 1.0' space; alpha is the opacity */
PNG_EXPORT(204, png_uint_32, png_get_uint_31,
(png_const_structrp png_ptr, png_const_bytep buf)); /* No png_get_int_16 -- may be added if there's a real need for it. */
/* Place a 32-bit number into a buffer in PNG byte order (big-endian). */ #ifdef PNG_WRITE_INT_FUNCTIONS_SUPPORTED
PNG_EXPORT(205, void, png_save_uint_32,
(png_bytep buf, png_uint_32 i)); #endif #ifdef PNG_SAVE_INT_32_SUPPORTED
PNG_EXPORT(206, void, png_save_int_32,
(png_bytep buf, png_int_32 i)); #endif
/* Place a 16-bit number into a buffer in PNG byte order. *Theparameterisdeclaredunsignedint,notpng_uint_16, *justtoavoidpotentialproblemsonpre-ANSICcompilers.
*/ #ifdef PNG_WRITE_INT_FUNCTIONS_SUPPORTED
PNG_EXPORT(207, void, png_save_uint_16,
(png_bytep buf, unsignedint i)); /* No png_save_int_16 -- may be added if there's a real need for it. */ #endif
#ifdef PNG_USE_READ_MACROS /* Inline macros to do direct reads of bytes from the input buffer. *Thepng_get_int_32()routineassumesweareusingtwo'scomplement *formatfornegativevalues,whichisalmostcertainlytrue.
*/ # define PNG_get_uint_32(buf) \
(((png_uint_32)(*(buf)) << 24) + \
((png_uint_32)(*((buf) + 1)) << 16) + \
((png_uint_32)(*((buf) + 2)) << 8) + \
((png_uint_32)(*((buf) + 3))))
/* From libpng-1.4.0 until 1.4.4, the png_get_uint_16 macro (but not the *function)incorrectlyreturnedavalueoftypepng_uint_32.
*/ # define PNG_get_uint_16(buf) \
((png_uint_16) \
(((unsignedint)(*(buf)) << 8) + \
((unsignedint)(*((buf) + 1)))))
typedefstruct png_control *png_controlp; typedefstruct
{
png_controlp opaque; /* Initialize to NULL, free with png_image_free */
png_uint_32 version; /* Set to PNG_IMAGE_VERSION */
png_uint_32 width; /* Image width in pixels (columns) */
png_uint_32 height; /* Image height in pixels (rows) */
png_uint_32 format; /* Image format as defined below */
png_uint_32 flags; /* A bit mask containing informational flags */
png_uint_32 colormap_entries; /* Number of entries in the color-map */
/* In the event of an error or warning the following field will be set to a *non-zerovalueandthe'message'fieldwillcontaina'\0'terminated *stringwiththelibpngerrororwarningmessage.Ifbothwarningsand *anerrorwereencountered,onlytheerrorisrecorded.Ifthere *aremultiplewarnings,onlythefirstoneisrecorded. * *Theupper30bitsofthisvaluearereserved,thelowtwobitscontain *avalueasfollows:
*/ # define PNG_IMAGE_WARNING 1 # define PNG_IMAGE_ERROR 2 /* *Theresultisatwo-bitcodesuchthatavaluemorethan1indicates *afailureintheAPIjustcalled: * *0-nowarningorerror *1-warning *2-error *3-errorprecededbywarning
*/ # define PNG_IMAGE_FAILED(png_cntrl) ((((png_cntrl).warning_or_error)&0x03)>1)
png_uint_32 warning_or_error;
char message[64];
} png_image, *png_imagep;
/* The samples of the image have one to four channels whose components have *originalvaluesintherange0to1.0: * *1:Asinglegrayorluminancechannel(G). *2:Agray/luminancechannelandanalphachannel(GA). *3:Threered,green,bluecolorchannels(RGB). *4:Threecolorchannelsandanalphachannel(RGBA). * *Thecomponentsareencodedinoneoftwoways: * *a)Asasmallinteger,value0..255,containedinasinglebyte.Forthe *alphachanneltheoriginalvalueissimplyvalue/255.Forthecoloror *luminancechannelsthevalueisencodedaccordingtothesRGBspecification *andmatchesthe8-bitformatexpectedbytypicaldisplaydevices. * *Thecolor/graychannelsarenotscaled(pre-multiplied)bythealpha *channelandaresuitableforpassingtocolormanagementsoftware. * *b)Asavalueintherange0..65535,containedina2-byteinteger.All *channelscanbeconvertedtotheoriginalvaluebydividingby65535;all *channelsarelinear.ColorchannelsusetheRGBencoding(RGBend-points)of *thesRGBspecification.Thisencodingisidentifiedbythe *PNG_FORMAT_FLAG_LINEARflagbelow. * *WhenthesimplifiedAPIneedstoconvertbetweensRGBandlinearcolorspaces, *theactualsRGBtransfercurvedefinedinthesRGBspecification(seethe *articleat<https://en.wikipedia.org/wiki/SRGB>) is used, not the gamma=1/2.2 *approximationusedelsewhereinlibpng. * *Whenanalphachannelispresentitisexpectedtodenotepixelcoverage *ofthecolororluminancechannelsandisreturnedasanassociatedalpha *channel:thecolor/graychannelsarescaled(pre-multiplied)bythealpha *value. * *Thesamplesareeithercontaineddirectlyintheimagedata,between1and8 *bytesperpixelaccordingtotheencoding,orareheldinacolor-mapindexed *bybytesintheimagedata.Inthecaseofacolor-mapthecolor-mapentries *areindividualsamples,encodedasabove,andtheimagedatahasonebyteper *pixeltoselecttherelevantsamplefromthecolor-map.
*/
/* Then the linear 2-byte formats. When naming these "Y" is used to *indicatealuminance(gray)channel.
*/ #define PNG_FORMAT_LINEAR_Y PNG_FORMAT_FLAG_LINEAR #define PNG_FORMAT_LINEAR_Y_ALPHA (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_ALPHA) #define PNG_FORMAT_LINEAR_RGB (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_COLOR) #define PNG_FORMAT_LINEAR_RGB_ALPHA \
(PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_ALPHA)
/* With color-mapped formats the image data is one byte for each pixel, the byte *isanindexintothecolor-mapwhichisformattedasabove.Toobtaina *color-mappedformatitissufficientjusttoaddthePNG_FOMAT_FLAG_COLORMAP *tooneoftheabovedefinitions,oryoucanuseoneofthedefinitionsbelow.
*/ #define PNG_FORMAT_RGB_COLORMAP (PNG_FORMAT_RGB|PNG_FORMAT_FLAG_COLORMAP) #define PNG_FORMAT_BGR_COLORMAP (PNG_FORMAT_BGR|PNG_FORMAT_FLAG_COLORMAP) #define PNG_FORMAT_RGBA_COLORMAP (PNG_FORMAT_RGBA|PNG_FORMAT_FLAG_COLORMAP) #define PNG_FORMAT_ARGB_COLORMAP (PNG_FORMAT_ARGB|PNG_FORMAT_FLAG_COLORMAP) #define PNG_FORMAT_BGRA_COLORMAP (PNG_FORMAT_BGRA|PNG_FORMAT_FLAG_COLORMAP) #define PNG_FORMAT_ABGR_COLORMAP (PNG_FORMAT_ABGR|PNG_FORMAT_FLAG_COLORMAP)
/* PNG_IMAGE macros * *Theseareconveniencemacrostoderiveinformationfromapng_image *structure.ThePNG_IMAGE_SAMPLE_macrosreturnvaluesappropriatetothe *actualimagesamplevalues-eithertheentriesinthecolor-maporthe *pixelsintheimage.ThePNG_IMAGE_PIXEL_macrosreturncorrespondingvalues *forthepixelsandwillalwaysreturn1forcolor-mappedformats.The *remainingmacrosreturninformationabouttherowsintheimageandthe *completeimage. * *NOTE:Allthemacrosthattakeapng_image::formatparameterarecompiletime *constantsiftheformatparameteris,itself,aconstant.Thereforethese *macroscanbeusedinarraydeclarationsandcaselabelswhererequired. *Similarlythemacrosarealsopre-processorconstants(sizeofisnotused)so *theycanbeusedin#iftests. * *Firsttheinformationaboutthesamples.
*/ #define PNG_IMAGE_SAMPLE_CHANNELS(fmt)\
(((fmt)&(PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_ALPHA))+1) /* Return the total number of channels in a given format: 1..4 */
#define PNG_IMAGE_SAMPLE_COMPONENT_SIZE(fmt)\
((((fmt) & PNG_FORMAT_FLAG_LINEAR) >> 2)+1) /* Return the size in bytes of a single component of a pixel or color-map *entry(asappropriate)intheimage:1or2.
*/
#define PNG_IMAGE_SAMPLE_SIZE(fmt)\
(PNG_IMAGE_SAMPLE_CHANNELS(fmt) * PNG_IMAGE_SAMPLE_COMPONENT_SIZE(fmt)) /* This is the size of the sample data for one sample. If the image is *color-mappeditisthesizeofonecolor-mapentry(andimagepixelsare *onebyteinsize),otherwiseitisthesizeofoneimagepixel.
*/
#define PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(fmt)\
(PNG_IMAGE_SAMPLE_CHANNELS(fmt) * 256) /* The maximum size of the color-map required by the format expressed in a *countofcomponents.Thiscanbeusedtocompile-timeallocatea *color-map: * *png_uint_16colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(linear_fmt)]; * *png_bytecolormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(sRGB_fmt)]; * *AlternativelyusethePNG_IMAGE_COLORMAP_SIZEmacrobelowtousethe *informationfromoneofthepng_image_begin_read_APIsanddynamically *allocatetherequiredmemory.
*/
/* Corresponding information about the pixels */ #define PNG_IMAGE_PIXEL_(test,fmt)\
(((fmt)&PNG_FORMAT_FLAG_COLORMAP)?1:test(fmt))
#define PNG_IMAGE_PIXEL_CHANNELS(fmt)\
PNG_IMAGE_PIXEL_(PNG_IMAGE_SAMPLE_CHANNELS,fmt) /* The number of separate channels (components) in a pixel; 1 for a *color-mappedimage.
*/
#define PNG_IMAGE_PIXEL_COMPONENT_SIZE(fmt)\
PNG_IMAGE_PIXEL_(PNG_IMAGE_SAMPLE_COMPONENT_SIZE,fmt) /* The size, in bytes, of each component in a pixel; 1 for a color-mapped *image.
*/
#define PNG_IMAGE_PIXEL_SIZE(fmt) PNG_IMAGE_PIXEL_(PNG_IMAGE_SAMPLE_SIZE,fmt) /* The size, in bytes, of a complete pixel; 1 for a color-mapped image. */
/* Information about the whole row, or whole image */ #define PNG_IMAGE_ROW_STRIDE(image)\
(PNG_IMAGE_PIXEL_CHANNELS((image).format) * (image).width) /* Return the total number of components in a single row of the image; this *istheminimum'rowstride',theminimumcountofcomponentsbetweeneach *row.Foracolor-mappedimagethisistheminimumnumberofbytesina *row. * *WARNING:thismacrooverflowsforsomeimageswithmorethanonecomponent *andverylargeimagewidths.libpngwillrefusetoprocessanimagewhere *thismacrowouldoverflow.
*/
#define PNG_IMAGE_BUFFER_SIZE(image, row_stride)\
(PNG_IMAGE_PIXEL_COMPONENT_SIZE((image).format)*(image).height*(row_stride)) /* Return the size, in bytes, of an image buffer given a png_image and a row *stride-thenumberofcomponentstoleavespaceforineachrow. * *WARNING:thismacrooverflowsa32-bitintegerforsomelargePNGimages, *libpngwillrefusetoprocessanimagewheresuchanoverflowwouldoccur.
*/
#define PNG_IMAGE_SIZE(image)\
PNG_IMAGE_BUFFER_SIZE(image, PNG_IMAGE_ROW_STRIDE(image)) /* Return the size, in bytes, of the image in memory given just a png_image; *therowstrideistheminimumstriderequiredfortheimage.
*/
#define PNG_IMAGE_COLORMAP_SIZE(image)\
(PNG_IMAGE_SAMPLE_SIZE((image).format) * (image).colormap_entries) /* Return the size, in bytes, of the color-map of this image. If the image *formatisnotacolor-mapformatthiswillreturnasizesufficientfor *256entriesinthegivenformat;checkPNG_FORMAT_FLAG_COLORMAPif *youdon'twanttoallocateacolor-mapinthiscase.
*/
/* PNG_IMAGE_FLAG_* * *Flagscontainingadditionalinformationabouttheimageareheldinthe *'flags'fieldofpng_image.
*/ #define PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB 0x01 /* This indicates that the RGB values of the in-memory bitmap do not *correspondtothered,greenandblueend-pointsdefinedbysRGB.
*/
#define PNG_IMAGE_FLAG_FAST 0x02 /* On write emphasise speed over compression; the resultant PNG file will be *largerbutwillbeproducedsignificantlyfaster,particularforlarge *images.Donotusethisoptionforimageswhichwillbedistributed,only *useditwhenproducingintermediatefilesthatwillbereadbackin *repeatedly.Foratypical24-bitimagetheoptionwilldoubletheread *speedatthecostofincreasingtheimagesizeby25%,howeverformany *morecompressibleimagesthePNGfilecanbe10timeslargerwithonlya *slightspeedgain.
*/
#define PNG_IMAGE_FLAG_16BIT_sRGB 0x04 /* On read if the image is a 16-bit per component image and there is no gAMA *orsRGBchunkassumethatthecomponentsaresRGBencoded.Noticethat *imagesoutputbythesimplifiedAPIalwayshavegammainformation;setting *thisflagonlyaffectstheinterpretationof16-bitimagesfroman *externalsource.Itisrecommendedthattheapplicationexposethisflag *totheuser;theusercannormallyeasilyrecognizethedifferencebetween *linearandsRGBencoding.Thisflaghasnoeffectonwrite-thedata *passedtothewriteAPIsmusthavethecorrectencoding(asdefined *above.) * *Iftheflagisnotset(thedefault)input16-bitpercomponentdatais *assumedtobelinear. * *NOTE:theflagcanonlybesetafterthepng_image_begin_read_call, *becausethatcallinitializesthe'flags'field.
*/
#ifdef PNG_SIMPLIFIED_READ_SUPPORTED /* READ APIs *--------- * *Thepng_imagepassedtothereadAPIsmusthavebeeninitializedbysetting *thepng_controlpfield'opaque'toNULL(or,safer,memsetthewholething.)
*/ #ifdef PNG_STDIO_SUPPORTED
PNG_EXPORT(234, int, png_image_begin_read_from_file,
(png_imagep image, constchar *file_name)); /* The named file is opened for read and the image header is filled in *fromthePNGheaderinthefile.
*/
PNG_EXPORT(235, int, png_image_begin_read_from_stdio,
(png_imagep image, FILE *file)); /* The PNG header is read from the stdio FILE object. */ #endif/* STDIO */
PNG_EXPORT(236, int, png_image_begin_read_from_memory,
(png_imagep image, png_const_voidp memory, size_t size)); /* The PNG header is read from the given memory buffer. */
PNG_EXPORT(237, int, png_image_finish_read,
(png_imagep image,
png_const_colorp background, void *buffer, png_int_32 row_stride, void *colormap)); /* Finish reading the image into the supplied buffer and clean up the *png_imagestructure. * *row_strideisthestep,inbyteor2-byteunitsasappropriate, *betweenadjacentrows.Apositivestrideindicatesthatthetop-mostrow *isfirstinthebuffer-thenormaltop-downarrangement.Anegative *strideindicatesthatthebottom-mostrowisfirstinthebuffer. * *backgroundneedonlybesuppliedifanalphachannelmustberemovedfrom *apng_byteformatandtheremovalistobedonebycompositingonasolid *color;otherwiseitmaybeNULLandanycompositionwillbedonedirectly *ontothebuffer.ThevalueisansRGBcolortouseforthebackground, *forgrayscaleoutputthegreenchannelisused. * *backgroundmustbesuppliedwhenanalphachannelmustberemovedfroma *singlebytecolor-mappedoutputformat,inotherwordsif: * *1)Theoriginalformatfrompng_image_begin_read_from_*had *PNG_FORMAT_FLAG_ALPHAset. *2)Theformatsetbytheapplicationdoesnot. *3)TheformatsetbytheapplicationhasPNG_FORMAT_FLAG_COLORMAPsetand *PNG_FORMAT_FLAG_LINEAR*not*set. * *Forlinearoutputremovingthealphachannelisalwaysdonebycompositing *onblackandbackgroundisignored. * *colormapmustbesuppliedwhenPNG_FORMAT_FLAG_COLORMAPisset.Itmust *beatleastthesize(inbytes)returnedbyPNG_IMAGE_COLORMAP_SIZE. *image->colormap_entrieswillbeupdatedtotheactualnumberofentries *writtentothecolormap;thismaybelessthantheoriginalvalue.
*/
PNG_EXPORT(238, void, png_image_free,
(png_imagep image)); /* Free any data allocated by libpng in image->opaque, setting the pointer to *NULL.Maybecalledatanytimeafterthestructureisinitialized.
*/ #endif/* SIMPLIFIED_READ */
#ifdef PNG_SIMPLIFIED_WRITE_SUPPORTED /* WRITE APIS *---------- *Forwriteyoumustinitializeapng_imagestructuretodescribetheimageto *bewritten.Todothisusememsettosetthewholestructureto0then *initializefieldsdescribingyourimage. * *version:mustbesettoPNG_IMAGE_VERSION *opaque:mustbeinitializedtoNULL *width:imagewidthinpixels *height:imageheightinrows *format:theformatofthedata(imageandcolor-map)youwishtowrite *flags:setto0unlessoneofthedefinedflagsapplies;set *PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGBforcolorformatimageswheretheRGB *valuesdonotcorrespondtothecolorsinsRGB. *colormap_entries:settothenumberofentriesinthecolor-map(0to256)
*/ #ifdef PNG_SIMPLIFIED_WRITE_STDIO_SUPPORTED
PNG_EXPORT(239, int, png_image_write_to_file,
(png_imagep image, constchar *file, int convert_to_8bit, constvoid *buffer,
png_int_32 row_stride, constvoid *colormap)); /* Write the image to the named file. */
PNG_EXPORT(240, int, png_image_write_to_stdio,
(png_imagep image,
FILE *file, int convert_to_8_bit, constvoid *buffer,
png_int_32 row_stride, constvoid *colormap)); /* Write the image to the given FILE object. */ #endif/* SIMPLIFIED_WRITE_STDIO */
/* With all write APIs if image is in one of the linear formats with 16-bit *datathensettingconvert_to_8_bitwillcausetheoutputtobean8-bitPNG *gammaencodedaccordingtothesRGBspecification,otherwisea16-bitlinear *encodedPNGfileiswritten. * *Withcolor-mappeddataformatsthecolormapparameterpointtoacolor-map *withatleastimage->colormap_entriesencodedinthespecifiedformat.If *theformatislinearthewrittenPNGcolor-mapwillbeconvertedtosRGB *regardlessoftheconvert_to_8_bitflag. * *WithallAPIsrow_strideishandledasinthereadAPIs-itisthespacing *fromonerowtothenextincomponentsizedunits(1or2bytes)andif *negativeindicatesabottom-uprowlayoutinthebuffer.Ifrow_strideis *zero,libpngwillcalculateitforyoufromtheimagewidthandnumberof *channels. * *NotethatthewriteAPIdoesnotsupportinterlacing,sub-8-bitpixelsor *mostancillarychunks.Ifyouneedtowritetextchunks(e.g.forcopyright *notices)youneedtouseoneoftheotherAPIs.
*/
PNG_EXPORT(245, int, png_image_write_to_memory,
(png_imagep image, void *memory, png_alloc_size_t * PNG_RESTRICT memory_bytes, int convert_to_8_bit, constvoid *buffer, png_int_32 row_stride, constvoid *colormap)); /* Write the image to the given memory buffer. The function both writes the *wholePNGdatastreamto*memoryandupdates*memory_byteswiththecount *ofbyteswritten. * *'memory'maybeNULL.Inthiscase*memory_bytesisnotreadhoweveron *successthenumberofbyteswhichwouldhavebeenwrittenwillstillbe *storedin*memory_bytes.Onfailure*memory_byteswillcontain0. * *If'memory'isnotNULLitmustpointtomemory[*memory_bytes]of *writeablememory. * *Ifthefunctionreturnssuccessmemory[*memory_bytes](if'memory'isnot *NULL)containsthewrittenPNGdata.*memory_byteswillalwaysbeless *thanorequaltotheoriginalvalue. * *Ifthefunctionreturnsfalseand*memory_byteswasnotchangedanerror *occurredduringwrite.If*memory_byteswaschanged,orisnot0if *'memory'wasNULL,thewritewouldhavesucceededbutforthememory *bufferbeingtoosmall.*memory_bytescontainstherequirednumberof *bytesandwillbebiggerthattheoriginalvalue.
*/
#define png_image_write_get_memory_size(image, size, convert_to_8_bit, buffer,\
row_stride, colormap)\
png_image_write_to_memory(&(image), 0, &(size), convert_to_8_bit, buffer,\
row_stride, colormap) /* Return the amount of memory in 'size' required to compress this image. *Thepng_imagestructure'image'mustbefilledinasintheabove *functionandmustnotbechangedbeforetheactualwritecall,thebuffer *andallotherparametersmustalsobeidenticaltothatinthefinal *writecall.The'size'variableneednotbeinitialized. * *NOTE:themacroreturnstrue/false,iffalseisreturned'size'willbe *settozeroandthewritefailedandprobablywillfailiftriedagain.
*/
/* You can pre-allocate the buffer by making sure it is of sufficient size *regardlessoftheamountofcompressionachieved.Thebuffersizewill *alwaysbebiggerthantheoriginalimageanditwillneverbefilled.The *followingmacrosareprovidedtoassistinallocatingthebuffer.
*/ #define PNG_IMAGE_DATA_SIZE(image) (PNG_IMAGE_SIZE(image)+(image).height) /* The number of uncompressed bytes in the PNG byte encoding of the image; *uncompressingthePNGIDATdatawillgivethisnumberofbytes. * *NOTE:whilePNG_IMAGE_SIZEcannotoverflowforanimageinmemorythis *macrocanbecauseoftheextrabytesusedinthePNGbyteencoding.You *needtoavoidthismacroifyourimagesizeapproaches2^30inwidthor *height.Thesamegoesfortheremainderofthesemacros;theyallproduce *biggernumbersthantheactualin-memoryimagesize.
*/ #ifndef PNG_ZLIB_MAX_SIZE # define PNG_ZLIB_MAX_SIZE(b) ((b)+(((b)+7U)>>3)+(((b)+63U)>>6)+11U) /* An upper bound on the number of compressed bytes given 'b' uncompressed *bytes.ThisisbasedondeflateBounds()inzlib;different *implementationsofzlibcompressionmayconceivablyproducemoredataso *ifyourzlibimplementationisnotzlibitselfredefinethismacro *appropriately.
*/ #endif
#define PNG_IMAGE_COMPRESSED_SIZE_MAX(image)\
PNG_ZLIB_MAX_SIZE((png_alloc_size_t)PNG_IMAGE_DATA_SIZE(image)) /* An upper bound on the size of the data in the PNG IDAT chunks. */
#define PNG_IMAGE_PNG_SIZE_MAX_(image, image_size)\
((8U/*sig*/+25U/*IHDR*/+16U/*gAMA*/+44U/*cHRM*/+12U/*IEND*/+\
(((image).format&PNG_FORMAT_FLAG_COLORMAP)?/*colormap: PLTE, tRNS*/\ 12U+3U*(image).colormap_entries/*PLTE data*/+\
(((image).format&PNG_FORMAT_FLAG_ALPHA)?\ 12U/*tRNS*/+(image).colormap_entries:0U):0U)+\ 12U)+(12U*((image_size)/PNG_ZBUF_SIZE))/*IDAT*/+(image_size)) /* A helper for the following macro; if your compiler cannot handle the *followingmacrousethisonewiththeresultof *PNG_IMAGE_COMPRESSED_SIZE_MAX(image)asthesecondargument(most *compilersshouldhandlethisjustfine.)
*/
#define PNG_IMAGE_PNG_SIZE_MAX(image)\
PNG_IMAGE_PNG_SIZE_MAX_(image, PNG_IMAGE_COMPRESSED_SIZE_MAX(image)) /* An upper bound on the total length of the PNG data stream for 'image'. *Theresultisoftypepng_alloc_size_t,on32-bitsystemsthismay *overfloweventhoughPNG_IMAGE_DATA_SIZEdoesnotoverflow;thewritewill *runoutofbufferspacebutreturnacorrectedsizewhichshouldwork.
*/ #endif/* SIMPLIFIED_WRITE */ /******************************************************************************* *ENDOFSIMPLIFIEDAPI
******************************************************************************/ #endif/* SIMPLIFIED_{READ|WRITE} */
/* Next option - numbers must be even */ #define PNG_OPTION_NEXT 16
/* Return values: NOTE: there are four values and 'off' is *not* zero */ #define PNG_OPTION_UNSET 0/* Unset - defaults to off */ #define PNG_OPTION_INVALID 1/* Option number out of range */ #define PNG_OPTION_OFF 2 #define PNG_OPTION_ON 3
PNG_EXPORT(244, int, png_set_option, (png_structrp png_ptr, int option, int onoff)); #endif/* SET_OPTION */
/* Maintainer: Put new public prototypes here ^, in libpng.3, in project *defs,andinscripts/symbols.def.
*/
/* The last ordinal number (this is the *last* one already used; the next *onetouseisonemorethanthis.)
*/ #ifdef PNG_EXPORT_LAST_ORDINAL #ifdef PNG_APNG_SUPPORTED
PNG_EXPORT_LAST_ORDINAL(279); #else
PNG_EXPORT_LAST_ORDINAL(259); #endif/* APNG */ #endif
#ifdef __cplusplus
} #endif
#endif/* PNG_VERSION_INFO_ONLY */ /* Do not put anything past this line */ #endif/* PNG_H */
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.205Bemerkung:
(vorverarbeitet am 2026-09-29)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.