mirror of
https://git.code.sf.net/p/libpng/code.git
synced 2025-07-10 18:04:09 +02:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4accabb590 | ||
|
|
38e6e77419 | ||
|
|
81fdf8aca1 | ||
|
|
68ea243ca3 | ||
|
|
520a764cd7 | ||
|
|
a77ef625a6 | ||
|
|
61c32d9e66 |
103
ANNOUNCE
103
ANNOUNCE
@@ -1,85 +1,36 @@
|
|||||||
|
|
||||||
Libpng 1.0.5h - December 10, 1999
|
Libpng 1.0.6f - April 14, 2000
|
||||||
|
|
||||||
This is not intended to be a public release. It will be replaced
|
This is not intended to be a public release. It will be replaced
|
||||||
within a few weeks by a public version or by another test version.
|
within a few weeks by a public version or by another test version.
|
||||||
|
|
||||||
Changes since the last public release (1.0.5):
|
Changes since the last public release (1.0.6):
|
||||||
|
|
||||||
version libpng-1.0.5a October 23, 1999
|
version 1.0.6d [April 8, 2000]
|
||||||
Added contrib/pngsuite and contrib/pngminus (Willem van Schaik)
|
Changed sprintf() to strcpy() in png_write_sCAL_s() to work without STDIO
|
||||||
Fixed a typo in the png_set_sRGB() function call in example.c (Jan Nijtmans)
|
Added data_length parameter to png_decompress_chunk() function
|
||||||
Further optimization and bugfix of pngvcrd.c
|
Revised documentation to remove reference to abandoned png_free_chnk functions
|
||||||
Revised pngset.c so that it does not allocate or free memory in the user's
|
Fixed an error in png_rgb_to_gray_fixed()
|
||||||
text_ptr structure. Instead, it makes its own copy.
|
Revised example.c, usage of png_destroy_write_struct().
|
||||||
Created separate write_end_info_struct in pngtest.c for a more severe test.
|
Renamed makefile.ibmvac3 to makefile.ibmc, added libpng.icc IBM project file
|
||||||
Added code in pngwrite.c to free info_ptr->text[i].key to stop a memory leak.
|
Added a check for info_ptr->free_me&PNG_FREE_TEXT when free'ing text in png.c
|
||||||
version libpng-1.0.5b November 23, 1999
|
Simplify png_sig_bytes() function to remove use of non-ISO-C strdup().
|
||||||
Moved PNG_FLAG_HAVE_CHUNK_HEADER, PNG_FLAG_BACKGROUND_IS_GRAY and
|
version 1.0.6f [April 14, 2000]
|
||||||
PNG_FLAG_WROTE_tIME from flags to mode.
|
Added png_data_freer() function.
|
||||||
Added png_write_info_before_PLTE() function.
|
In the code that checks for over-length tRNS chunks, added check of
|
||||||
Fixed some typecasting in contrib/gregbook/*.c
|
info_ptr->num_trans as well as png_ptr->num_trans (Matthias Benckmann)
|
||||||
Updated scripts/makevms.com and added makevms.com to contrib/gregbook
|
Minor revisions of libpng.txt/libpng.3.
|
||||||
and contrib/pngminus (Martin Zinser)
|
Check for existing data and free it if the free_me flag is set, in png_set_*()
|
||||||
version libpng-1.0.5c November 26, 1999
|
and png_handle_*().
|
||||||
Moved png_get_header_version from png.h to png.c, to accomodate ansi2knr.
|
Only define PNG_WEIGHTED_FILTERS_SUPPORTED when PNG_FLOATING_POINT_SUPPORTED
|
||||||
Removed all global arrays (according to PNG_NO_GLOBAL_ARRAYS macro), to
|
is defined.
|
||||||
accomodate making DLL's: Moved usr_png_ver from global variable to function
|
Changed several instances of PNG_NO_CONSOLE_ID to PNG_NO_STDIO in pngrutil.c
|
||||||
png_get_header_ver() in png.c. Moved png_sig to png_sig_bytes in png.c and
|
and mentioned the purposes of the two macros in libpng.txt/libpng.3.
|
||||||
eliminated use of png_sig in pngwutil.c. Moved the various png_CHNK arrays
|
|
||||||
into pngtypes.h. Eliminated use of global png_pass arrays. Declared the
|
Send comments/corrections/commendations to
|
||||||
png_CHNK and png_pass arrays to be "const". Made the global arrays
|
png-implement@ccrc.wustl.edu or to randeg@alum.rpi.edu
|
||||||
available to applications (although none are used in libpng itself) when
|
|
||||||
PNG_NO_GLOBAL_ARRAYS is not defined or when PNG_GLOBAL_ARRAYS is defined.
|
Glenn R-P
|
||||||
Removed some extraneous "-I" from contrib/pngminus/makefile.std
|
|
||||||
Changed the PNG_sRGB_INTENT macros in png.h to be consistent with PNG-1.2.
|
|
||||||
Change PNG_SRGB_INTENT to PNG_sRGB_INTENT in libpng.txt and libpng.3
|
|
||||||
version libpng-1.0.5d November 29, 1999
|
|
||||||
Add type cast (png_const_charp) two places in png.c
|
|
||||||
Eliminated pngtypes.h; use macros instead to declare PNG_CHNK arrays.
|
|
||||||
Renamed "PNG_GLOBAL_ARRAYS" to "PNG_USE_GLOBAL_ARRAYS" and made available
|
|
||||||
to applications a macro "PNG_USE_LOCAL_ARRAYS".
|
|
||||||
#ifdef out all the new declarations when PNG_USE_GLOBAL_ARRAYS is defined.
|
|
||||||
Added PNG_EXPORT_VAR macro to accommodate making DLL's.
|
|
||||||
version libpng-1.0.5e November 30, 1999
|
|
||||||
Added iCCP, iTXt, and sPLT support; added "lang" member to the png_text
|
|
||||||
structure; refactored the inflate/deflate support to make adding new chunks
|
|
||||||
with trailing compressed parts easier in the future, and added new functions
|
|
||||||
png_free_iCCP, png_free_pCAL, png_free_sPLT, png_free_text, png_get_iCCP,
|
|
||||||
png_get_spalettes, png_set_iCCP, png_set_spalettes (Eric S. Raymond).
|
|
||||||
NOTE: Applications that write text chunks MUST define png_text->lang. Before
|
|
||||||
calling png_set_text(). It must be set to NULL if you want to write tEXt or
|
|
||||||
zTXt chunks. If you want your application to be able to run with older
|
|
||||||
versions of libpng, use
|
|
||||||
|
|
||||||
#ifdef PNG_iTXt_SUPPORTED
|
|
||||||
png_text[i].lang = NULL;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
Changed png_get_oFFs() and png_set_oFFs() to use signed rather than unsigned
|
|
||||||
offsets (Eric S. Raymond).
|
|
||||||
Combined PNG_READ_cHNK_SUPPORTED and PNG_WRITE_cHNK_SUPPORTED macros into
|
|
||||||
PNG_cHNK_SUPPORTED and combined the three types of PNG_text_SUPPORTED
|
|
||||||
macros, leaving the separate macros also available.
|
|
||||||
Removed comments on #endifs at the end of many short, non-nested #if-blocks.
|
|
||||||
version libpng-1.0.5f December 6, 1999
|
|
||||||
Changed makefile.solaris to issue a warning about potential problems when
|
|
||||||
the ucb "ld" is in the path ahead of the ccs "ld".
|
|
||||||
Removed "- [date]" from the "synopsis" line in libpng.3 and libpngpf.3.
|
|
||||||
Added sCAL chunk support (Eric S. Raymond).
|
|
||||||
version libpng-1.0.5g December 7, 1999
|
|
||||||
Fixed "png_free_spallettes" typo in png.h
|
|
||||||
Added code to handle new chunks in pngpread.c
|
|
||||||
Moved PNG_CHNK string macro definitions outside of PNG_NO_EXTERN block
|
|
||||||
Added "translated_key" to png_text structure and png_write_iTXt().
|
|
||||||
Added code in pngwrite.c to work around a newly discovered zlib bug.
|
|
||||||
version 1.0.5h [December 10, 1999]
|
|
||||||
NOTE: regarding the not for version 1.0.5e, the following must also
|
|
||||||
be included in your code:
|
|
||||||
png_text[i].translated_key = NULL;
|
|
||||||
Unknown chunk handling is now supported.
|
|
||||||
Option to eliminate all floating point support was added. Some new
|
|
||||||
fixed-point functions such as png_set_gAMA_fixed() were added.
|
|
||||||
|
|
||||||
Send comments/corrections/commendations to
|
Send comments/corrections/commendations to
|
||||||
png-implement@ccrc.wustl.edu or to randeg@alum.rpi.edu
|
png-implement@ccrc.wustl.edu or to randeg@alum.rpi.edu
|
||||||
|
|||||||
146
CHANGES
146
CHANGES
@@ -517,7 +517,7 @@ version 1.0.5e [November 30, 1999]
|
|||||||
with trailing compressed parts easier in the future, and added new functions
|
with trailing compressed parts easier in the future, and added new functions
|
||||||
png_free_iCCP, png_free_pCAL, png_free_sPLT, png_free_text, png_get_iCCP,
|
png_free_iCCP, png_free_pCAL, png_free_sPLT, png_free_text, png_get_iCCP,
|
||||||
png_get_spalettes, png_set_iCCP, png_set_spalettes (Eric S. Raymond).
|
png_get_spalettes, png_set_iCCP, png_set_spalettes (Eric S. Raymond).
|
||||||
NOTE: Applications that write text chunks MUST define png_text->lang and
|
NOTE: Applications that write text chunks MUST define png_text->lang
|
||||||
before calling png_set_text(). It must be set to NULL if you want to
|
before calling png_set_text(). It must be set to NULL if you want to
|
||||||
write tEXt or zTXt chunks. If you want your application to be able to
|
write tEXt or zTXt chunks. If you want your application to be able to
|
||||||
run with older versions of libpng, use
|
run with older versions of libpng, use
|
||||||
@@ -544,9 +544,151 @@ version 1.0.5g [December 7, 1999]
|
|||||||
Added "translated_key" to png_text structure and png_write_iTXt().
|
Added "translated_key" to png_text structure and png_write_iTXt().
|
||||||
Added code in pngwrite.c to work around a newly discovered zlib bug.
|
Added code in pngwrite.c to work around a newly discovered zlib bug.
|
||||||
version 1.0.5h [December 10, 1999]
|
version 1.0.5h [December 10, 1999]
|
||||||
NOTE: regarding the not for version 1.0.5e, the following must also
|
NOTE: regarding the note for version 1.0.5e, the following must also
|
||||||
be included in your code:
|
be included in your code:
|
||||||
png_text[i].translated_key = NULL;
|
png_text[i].translated_key = NULL;
|
||||||
Unknown chunk handling is now supported.
|
Unknown chunk handling is now supported.
|
||||||
Option to eliminate all floating point support was added. Some new
|
Option to eliminate all floating point support was added. Some new
|
||||||
fixed-point functions such as png_set_gAMA_fixed() were added.
|
fixed-point functions such as png_set_gAMA_fixed() were added.
|
||||||
|
Expanded tabs and removed trailing blanks in source files.
|
||||||
|
version 1.0.5i [December 13, 1999]
|
||||||
|
Added some type casts to silence compiler warnings.
|
||||||
|
Renamed "png_free_spalette" to "png_free_spalettes" for consistency.
|
||||||
|
Removed leading blanks from a #define in pngvcrd.c
|
||||||
|
Added some parameters to the new png_set_keep_unknown_chunks() function.
|
||||||
|
Added a test for up->location != 0 in the first instance of writing
|
||||||
|
unknown chunks in pngwrite.c
|
||||||
|
Changed "num" to "i" in png_free_spalettes() and png_free_unknowns() to
|
||||||
|
prevent recursion.
|
||||||
|
Added png_free_hIST() function.
|
||||||
|
Various patches to fix bugs in the sCAL and integer cHRM processing,
|
||||||
|
and to add some convenience macros for use with sCAL.
|
||||||
|
version 1.0.5j [December 21, 1999]
|
||||||
|
Changed "unit" parameter of png_write_sCAL from png_byte to int, to work
|
||||||
|
around buggy compilers.
|
||||||
|
Added new type "png_fixed_point" for integers that hold float*100000 values
|
||||||
|
Restored backward compatibility of tEXt/zTXt chunk processing:
|
||||||
|
Restored the first four members of png_text to the same order as v.1.0.5d.
|
||||||
|
Added members "lang_key" and "itxt_length" to png_text struct. Set
|
||||||
|
text_length=0 when "text" contains iTXt data. Use the "compression"
|
||||||
|
member to distinguish among tEXt/zTXt/iTXt types. Added
|
||||||
|
PNG_ITXT_COMPRESSION_NONE (1) and PNG_ITXT_COMPRESSION_zTXt(2) macros.
|
||||||
|
The "Note" above, about backward incompatibility of libpng-1.0.5e, no
|
||||||
|
longer applies.
|
||||||
|
Fixed png_read|write_iTXt() to read|write parameters in the right order,
|
||||||
|
and to write the iTXt chunk after IDAT if it appears in the end_ptr.
|
||||||
|
Added pnggccrd.c, version of pngvcrd.c Intel assembler for gcc (Greg Roelofs)
|
||||||
|
Reversed the order of trying to write floating-point and fixed-point gAMA.
|
||||||
|
version 1.0.5k [December 27, 1999]
|
||||||
|
Added many parentheses, e.g., "if (a && b & c)" becomes "if (a && (b & c))"
|
||||||
|
Added png_handle_as_unknown() function (Glenn)
|
||||||
|
Added png_free_chunk_list() function and chunk_list and num_chunk_list members
|
||||||
|
of png_ptr.
|
||||||
|
Eliminated erroneous warnings about multiple sPLT chunks and sPLT-after-PLTE.
|
||||||
|
Fixed a libpng-1.0.5h bug in pngrutil.c that was issuing erroneous warnings
|
||||||
|
about ignoring incorrect gAMA with sRGB (gAMA was in fact not ignored)
|
||||||
|
Added png_free_tRNS(); png_set_tRNS() now malloc's its own trans array (ESR).
|
||||||
|
Define png_get_int_32 when oFFs chunk is supported as well as when pCAL is.
|
||||||
|
Changed type of proflen from png_int_32 to png_uint_32 in png_get_iCCP().
|
||||||
|
version 1.0.5l [January 1, 2000]
|
||||||
|
Added functions png_set_read_user_chunk_fn() and png_get_user_chunk_ptr()
|
||||||
|
for setting a callback function to handle unknown chunks and for
|
||||||
|
retrieving the associated user pointer (Glenn).
|
||||||
|
version 1.0.5m [January 7, 2000]
|
||||||
|
Added high-level functions png_read_png(), png_write_png(), png_free_pixels().
|
||||||
|
version 1.0.5n [January 9, 2000]
|
||||||
|
Added png_free_PLTE() function, and modified png_set_PLTE() to malloc its
|
||||||
|
own memory for info_ptr->palette. This makes it safe for the calling
|
||||||
|
application to free its copy of the palette any time after it calls
|
||||||
|
png_set_PLTE().
|
||||||
|
version 1.0.5o [January 20, 2000]
|
||||||
|
Cosmetic changes only (removed some trailing blanks and TABs)
|
||||||
|
version 1.0.5p [January 31, 2000]
|
||||||
|
Renamed pngdll.mak to makefile.bd32
|
||||||
|
Cosmetic changes in pngtest.c
|
||||||
|
version 1.0.5q [February 5, 2000]
|
||||||
|
Relocated the makefile.solaris warning about PATH problems.
|
||||||
|
Fixed pngvcrd.c bug by pushing/popping registers in mmxsupport (Bruce Oberg)
|
||||||
|
Revised makefile.gcmmx
|
||||||
|
Added PNG_SETJMP_SUPPORTED, PNG_SETJMP_NOT_SUPPORTED, and PNG_ABORT() macros
|
||||||
|
version 1.0.5r [February 7, 2000]
|
||||||
|
Removed superfluous prototype for png_get_itxt from png.h
|
||||||
|
Fixed a bug in pngrtran.c that improperly expanded the background color.
|
||||||
|
Return *num_text=0 from png_get_text() when appropriate, and fix documentation
|
||||||
|
of png_get_text() in libpng.txt/libpng.3.
|
||||||
|
version 1.0.5s [February 18, 2000]
|
||||||
|
Added "png_jmp_env()" macro to pngconf.h, to help people migrate to the
|
||||||
|
new error handler that's planned for the next libpng release, and changed
|
||||||
|
example.c, pngtest.c, and contrib programs to use this macro.
|
||||||
|
Revised some of the DLL-export macros in pngconf.h (Greg Roelofs)
|
||||||
|
Fixed a bug in png_read_png() that caused it to fail to expand some images
|
||||||
|
that it should have expanded.
|
||||||
|
Fixed some mistakes in the unused and undocumented INCH_CONVERSIONS functions
|
||||||
|
in pngget.c
|
||||||
|
Changed the allocation of palette, history, and trans arrays back to
|
||||||
|
the version 1.0.5 method (linking instead of copying) which restores
|
||||||
|
backward compatibility with version 1.0.5. Added some remarks about
|
||||||
|
that in example.c. Added "free_me" member to info_ptr and png_ptr
|
||||||
|
and added png_free_data() function.
|
||||||
|
Updated makefile.linux and makefile.gccmmx to make directories conditionally.
|
||||||
|
Made cosmetic changes to pngasmrd.h
|
||||||
|
Added png_set_rows() and png_get_rows(), for use with png_read|write_png().
|
||||||
|
Modified png_read_png() to allocate info_ptr->row_pointers only if it
|
||||||
|
hasn't already been allocated.
|
||||||
|
version 1.0.5t [March 4, 2000]
|
||||||
|
Changed png_jmp_env() migration aiding macro to png_jmpbuf().
|
||||||
|
Fixed "interlace" typo (should be "interlaced") in contrib/gregbook/read2-x.c
|
||||||
|
Fixed bug with use of PNG_BEFORE_IHDR bit in png_ptr->mode, introduced when
|
||||||
|
PNG_FLAG_HAVE_CHUNK_HEADER was moved into png_ptr->mode in version 1.0.5b
|
||||||
|
Files in contrib/gregbook were revised to use png_jmpbuf() and to select
|
||||||
|
a 24-bit visual if one is available, and to allow abbreviated options.
|
||||||
|
Files in contrib/pngminus were revised to use the png_jmpbuf() macro.
|
||||||
|
Removed spaces in makefile.linux and makefile.gcmmx, introduced in 1.0.5s
|
||||||
|
version 1.0.5u [March 5, 2000]
|
||||||
|
Simplified the code that detects old png.h in png.c and pngtest.c
|
||||||
|
Renamed png_spalette (_p, _pp) to png_sPLT_t (_tp, _tpp)
|
||||||
|
Increased precision of rgb_to_gray calculations from 8 to 15 bits and
|
||||||
|
added png_set_rgb_to_gray_fixed() function.
|
||||||
|
Added makefile.bc32 (32-bit Borland C++, C mode)
|
||||||
|
version 1.0.5v [March 11, 2000]
|
||||||
|
Added some parentheses to the png_jmpbuf macro definition.
|
||||||
|
Updated references to the zlib home page, which has moved to freesoftware.com.
|
||||||
|
Corrected bugs in documentation regarding png_read_row() and png_write_row().
|
||||||
|
Updated documentation of png_rgb_to_gray calculations in libpng.3/libpng.txt.
|
||||||
|
Renamed makefile.borland,turboc3 back to makefile.bor,tc3 as in version 1.0.3,
|
||||||
|
revised borland makefiles; added makefile.ibmvac3 and makefile.gcc (Cosmin)
|
||||||
|
version 1.0.6 [March 20, 2000]
|
||||||
|
Minor revisions of makefile.bor, libpng.txt, and gregbook/rpng2-win.c
|
||||||
|
Added makefile.sggcc (SGI IRIX with gcc)
|
||||||
|
version 1.0.6d [April 7, 2000]
|
||||||
|
Changed sprintf() to strcpy() in png_write_sCAL_s() to work without STDIO
|
||||||
|
Added data_length parameter to png_decompress_chunk() function
|
||||||
|
Revised documentation to remove reference to abandoned png_free_chnk functions
|
||||||
|
Fixed an error in png_rgb_to_gray_fixed()
|
||||||
|
Revised example.c, usage of png_destroy_write_struct().
|
||||||
|
Renamed makefile.ibmvac3 to makefile.ibmc, added libpng.icc IBM project file
|
||||||
|
Added a check for info_ptr->free_me&PNG_FREE_TEXT when free'ing text in png.c
|
||||||
|
Simplify png_sig_bytes() function to remove use of non-ISO-C strdup().
|
||||||
|
version 1.0.6e [April 9, 2000]
|
||||||
|
Added png_data_freer() function.
|
||||||
|
In the code that checks for over-length tRNS chunks, added check of
|
||||||
|
info_ptr->num_trans as well as png_ptr->num_trans (Matthias Benckmann)
|
||||||
|
Minor revisions of libpng.txt/libpng.3.
|
||||||
|
Check for existing data and free it if the free_me flag is set, in png_set_*()
|
||||||
|
and png_handle_*().
|
||||||
|
Only define PNG_WEIGHTED_FILTERS_SUPPORTED when PNG_FLOATING_POINT_SUPPORTED
|
||||||
|
is defined.
|
||||||
|
Changed several instances of PNG_NO_CONSOLE_ID to PNG_NO_STDIO in pngrutil.c
|
||||||
|
and mentioned the purposes of the two macros in libpng.txt/libpng.3.
|
||||||
|
version 1.0.6f [April 14, 2000]
|
||||||
|
Revised png_set_iCCP() and png_set_rows() to avoid prematurely freeing data.
|
||||||
|
Add checks in png_set_text() for NULL members of the input text structure.
|
||||||
|
Revised libpng.txt/libpng.3.
|
||||||
|
Removed superfluous prototype for png_set_itxt from png.h
|
||||||
|
Removed "else" from pngread.c, after png_error(), and changed "0" to "length".
|
||||||
|
Changed several png_errors about malformed ancillary chunks to png_warnings.
|
||||||
|
|
||||||
|
Send comments/corrections/commendations to
|
||||||
|
png-implement@ccrc.wustl.edu or to randeg@alum.rpi.edu
|
||||||
|
|
||||||
|
Glenn R-P
|
||||||
|
|||||||
40
INSTALL
40
INSTALL
@@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
Installing libpng version 1.0.5h - December 10, 1999
|
Installing libpng version 1.0.6f - April 14, 2000
|
||||||
|
|
||||||
Before installing libpng, you must first install zlib. zlib
|
Before installing libpng, you must first install zlib. zlib
|
||||||
can usually be found wherever you got libpng. zlib can be
|
can usually be found wherever you got libpng. zlib can be
|
||||||
@@ -10,7 +10,7 @@ zlib.h and zconf.h include files that correspond to the
|
|||||||
version of zlib that's installed.
|
version of zlib that's installed.
|
||||||
|
|
||||||
You can rename the directories that you downloaded (they
|
You can rename the directories that you downloaded (they
|
||||||
might be called "libpng-1.0.5h" or "lpng103" and "zlib-1.1.3"
|
might be called "libpng-1.0.6f" or "lpng106" and "zlib-1.1.3"
|
||||||
or "zlib113") so that you have directories called "zlib" and "libpng".
|
or "zlib113") so that you have directories called "zlib" and "libpng".
|
||||||
|
|
||||||
Your directory structure should look like this:
|
Your directory structure should look like this:
|
||||||
@@ -36,23 +36,32 @@ Your directory structure should look like this:
|
|||||||
contrib
|
contrib
|
||||||
etc.
|
etc.
|
||||||
|
|
||||||
First enter the zlib directory and follow the instructions
|
If the line endings in the files look funny, you may wish to get the other
|
||||||
in zlib/README. Then come back here and choose the
|
distribution of libpng. It is available in both tar.gz (UNIX style line
|
||||||
appropriate makefile.sys in the scripts directory.
|
endings) and zip (DOS style line endings) formats.
|
||||||
|
|
||||||
|
First enter the zlib directory and follow the instructions in zlib/README.
|
||||||
|
Then come back here and choose the appropriate makefile.sys in the scripts
|
||||||
|
directory.
|
||||||
The files that are presently available in the scripts directory
|
The files that are presently available in the scripts directory
|
||||||
include
|
include
|
||||||
|
|
||||||
descrip.mms => VMS makefile for MMS or MMK
|
makefile.std => Generic UNIX makefile (cc, creates static libpng.a)
|
||||||
makefile.std => Generic UNIX makefile
|
makefile.linux => Linux/ELF makefile (gcc, creates libpng.so.2.1.0.6f)
|
||||||
|
makefile.gcmmx => Linux/ELF makefile (gcc, creates libpng.so.2.1.0.6f,
|
||||||
|
uses assembler code tuned for Intel MMX platform)
|
||||||
|
makefile.gcc => Generic makefile (gcc, creates static libpng.a)
|
||||||
makefile.knr => Archaic UNIX Makefile that converts files with
|
makefile.knr => Archaic UNIX Makefile that converts files with
|
||||||
ansi2knr (Requires ansi2knr.c from
|
ansi2knr (Requires ansi2knr.c from
|
||||||
ftp://ftp.cs.wisc.edu/ghost)
|
ftp://ftp.cs.wisc.edu/ghost)
|
||||||
makefile.dec => DEC Alpha UNIX makefile
|
makefile.dec => DEC Alpha UNIX makefile
|
||||||
makefile.hpux => HPUX (10.20 and 11.00) makefile
|
makefile.hpux => HPUX (10.20 and 11.00) makefile
|
||||||
makefile.sgi => Silicon Graphics IRIX makefile
|
makefile.ibmc => IBM C/C++ version 3.x for Win32 and OS/2 (static)
|
||||||
|
libpng.icc => Project file for IBM VisualAge/C++ version 4.0 or later
|
||||||
|
makefile.sgi => Silicon Graphics IRIX makefile (cc, creates static lib)
|
||||||
|
makefile.sggcc => Silicon Graphics (gcc, creates libpng.so.2.1.0.6f)
|
||||||
makefile.sunos => Sun makefile
|
makefile.sunos => Sun makefile
|
||||||
makefile.solaris => Solaris 2.X makefile (gcc, creates libpng.so.2.1.0.5h)
|
makefile.solaris => Solaris 2.X makefile (gcc, creates libpng.so.2.1.0.6f)
|
||||||
makefile.linux => Linux/ELF makefile (gcc, creates libpng.so.2.1.0.5h)
|
|
||||||
makefile.sco => For SCO OSr5 ELF and Unixware 7 with Native cc
|
makefile.sco => For SCO OSr5 ELF and Unixware 7 with Native cc
|
||||||
makefile.mips => MIPS makefile
|
makefile.mips => MIPS makefile
|
||||||
makefile.acorn => Acorn makefile
|
makefile.acorn => Acorn makefile
|
||||||
@@ -61,20 +70,21 @@ include
|
|||||||
(Requires SCOPTIONS, copied from scripts/SCOPTIONS.ppc)
|
(Requires SCOPTIONS, copied from scripts/SCOPTIONS.ppc)
|
||||||
makefile.atari => Atari makefile
|
makefile.atari => Atari makefile
|
||||||
makefile.beos => BEOS makefile for X86
|
makefile.beos => BEOS makefile for X86
|
||||||
makefile.borland => Borland makefile
|
makefile.bor => Borland makefile (uses bcc)
|
||||||
build.bat => MS-DOS batch file for Borland compiler
|
makefile.bc32 => 32-bit Borland C++ (all modules compiled in C mode)
|
||||||
|
makefile.bd32 => To make a png32bd.dll with Borland C++ 4.5
|
||||||
|
makefile.tc3 => Turbo C 3.0 makefile
|
||||||
makefile.dj2 => DJGPP 2 makefile
|
makefile.dj2 => DJGPP 2 makefile
|
||||||
makefile.msc => Microsoft C makefile
|
makefile.msc => Microsoft C makefile
|
||||||
makefile.vcawin32 => makefile for Microsoft Visual C++ 5.0 and later (uses
|
makefile.vcawin32 => makefile for Microsoft Visual C++ 5.0 and later (uses
|
||||||
assembler code)
|
assembler code tuned for Intel MMX platform)
|
||||||
makefile.vcwin32 => makefile for Microsoft Visual C++ 4.0 and later (does
|
makefile.vcwin32 => makefile for Microsoft Visual C++ 4.0 and later (does
|
||||||
not use assembler code)
|
not use assembler code)
|
||||||
makefile.turboc3 => Turbo C 3.0 makefile
|
|
||||||
makefile.os2 => OS/2 Makefile (gcc and emx, requires pngos2.def)
|
makefile.os2 => OS/2 Makefile (gcc and emx, requires pngos2.def)
|
||||||
pngos2.def => OS/2 module definition file used by makefile.os2
|
pngos2.def => OS/2 module definition file used by makefile.os2
|
||||||
makefile.watcom => Watcom 10a+ Makefile, 32-bit flat memory model
|
makefile.watcom => Watcom 10a+ Makefile, 32-bit flat memory model
|
||||||
makevms.com => VMS build script
|
makevms.com => VMS build script
|
||||||
pngdll.mak => To make a png32bd.dll with Borland C++ 4.5
|
descrip.mms => VMS makefile for MMS or MMK
|
||||||
pngdef.pas => Defines for a png32bd.dll with Borland C++ 4.5
|
pngdef.pas => Defines for a png32bd.dll with Borland C++ 4.5
|
||||||
SCOPTIONS.ppc => Used with smakefile.ppc
|
SCOPTIONS.ppc => Used with smakefile.ppc
|
||||||
|
|
||||||
|
|||||||
77
KNOWNBUG
77
KNOWNBUG
@@ -1,8 +1,47 @@
|
|||||||
|
|
||||||
Known bugs and suggested enhancements in libpng-1.0.5
|
Known bugs and suggested enhancements in libpng-1.0.6
|
||||||
|
|
||||||
|
1. April 1, 2000 -- BUG
|
||||||
|
|
||||||
1. March 15, 1998 -- OPTIMIZATION -- Kevin Bracey
|
Under some circumstances old applications that make direct access to
|
||||||
|
the info_ptr->text and its members might free the same memory that
|
||||||
|
is also free'ed by libpng during the png_destroy_struct process.
|
||||||
|
|
||||||
|
Fixed in libpng-1.0.6-patch-03 and libpng-1.0.6d. The PNG_FREE_TEXT flag
|
||||||
|
bit in info_ptr->free_me is now checked to make sure libpng is responsible
|
||||||
|
for freeing the memory.
|
||||||
|
|
||||||
|
2. April 1, 2000 -- BUG
|
||||||
|
|
||||||
|
The non-ISO-C "strdup()" function is used in png.c
|
||||||
|
|
||||||
|
STATUS: The function has been simplified and no longer uses strdup()
|
||||||
|
in libpng-1.0.6-patch-03 and libpng-1.0.6d.
|
||||||
|
|
||||||
|
3. March 24, 2000 -- BUG
|
||||||
|
|
||||||
|
The png_set_rgb_to_gray_fixed() function is setting incorrect weighting
|
||||||
|
factors.
|
||||||
|
|
||||||
|
STATUS: Fixed in libpng-1.0.6-patch-02 and libpng-1.0.6d.
|
||||||
|
|
||||||
|
4. March 22, 2000 -- BUG
|
||||||
|
|
||||||
|
There are some printf() and fprintf() statements active in pngwutil.c
|
||||||
|
when PNG_NO_STDIO and PNG_sCAL_SUPPORTED are both defined.
|
||||||
|
|
||||||
|
STATUS: Fixed in libpng-1.0.6-patch-01 and libpng-1.0.6d. The strcpy()
|
||||||
|
function is used instead.
|
||||||
|
|
||||||
|
5. March 22, 2000 -- BUG
|
||||||
|
|
||||||
|
The length of the iCCP chunk data is calculated incorrectly; because
|
||||||
|
it can contain zeroes, strlen() doesn't work.
|
||||||
|
|
||||||
|
STATUS: Fixed in libpng-1.0.6-patch-01 and libpng-1.0.6d by adding a
|
||||||
|
data_length parameter to the png_decompress_chunk() function.
|
||||||
|
|
||||||
|
6. March 15, 1998 -- OPTIMIZATION -- Kevin Bracey
|
||||||
|
|
||||||
Loops need to be optimized everywhere
|
Loops need to be optimized everywhere
|
||||||
|
|
||||||
@@ -17,7 +56,7 @@ Known bugs and suggested enhancements in libpng-1.0.5
|
|||||||
libpng-1.1.0. About 160 loops will be turned around
|
libpng-1.1.0. About 160 loops will be turned around
|
||||||
in libpng-1.1.Nn, for testing.
|
in libpng-1.1.Nn, for testing.
|
||||||
|
|
||||||
2. July 4, 1998 -- ENHANCEMENT -- Glenn R-P
|
7. July 4, 1998 -- ENHANCEMENT -- Glenn R-P
|
||||||
|
|
||||||
libpng-1.0.5 and earlier transform colors to gamma=1.0 space for
|
libpng-1.0.5 and earlier transform colors to gamma=1.0 space for
|
||||||
merging with background, and then back to the image's gamma. The
|
merging with background, and then back to the image's gamma. The
|
||||||
@@ -29,39 +68,15 @@ Known bugs and suggested enhancements in libpng-1.0.5
|
|||||||
|
|
||||||
STATUS: under development.
|
STATUS: under development.
|
||||||
|
|
||||||
3. September 1999 -- ENHANCEMENT --
|
8. September 1999 -- ENHANCEMENT --
|
||||||
|
|
||||||
It should be possible to use libpng without floating-point aritmetic.
|
It should be possible to use libpng without floating-point aritmetic.
|
||||||
|
|
||||||
STATUS: Under investigation, implementation postponed until after
|
STATUS: Under investigation, implementation postponed until after
|
||||||
libpng-1.0.5. The application interface will change because replacements
|
libpng-1.0.6. The application interface will change because replacements
|
||||||
for the png_set_gAMA(), png_set_cHRM(), and corresponding png_get_()
|
for the png_set_gAMA(), png_set_cHRM(), and corresponding png_get_()
|
||||||
functions will be needed.
|
functions will be needed.
|
||||||
|
|
||||||
4. October 1999 -- BUG
|
Much of this was completed in libpng-1.0.6, but gamma compensation
|
||||||
|
is not yet done in fixed-point arithmetic.
|
||||||
|
|
||||||
pngvcrd.c is failing for interlaced PNGs that have empty passes.
|
|
||||||
|
|
||||||
STATUS: A check for "width != 0" is required in several places.
|
|
||||||
Fixed in libpng-1.0.5a/1.1.0
|
|
||||||
|
|
||||||
5. October 1999 -- BUG
|
|
||||||
|
|
||||||
Under MSVC++6.0 with debugging enabled, heap corruption was detected
|
|
||||||
while destroying the png_write_ptr.
|
|
||||||
|
|
||||||
STATUS: This was fixed by modifying png_set_text (in pngset.c) to
|
|
||||||
refrain from writing into the user's text_ptr. With this fix, however,
|
|
||||||
pngwrite.c, while destroying the info_ptr, was failing to free the
|
|
||||||
text->key strings. Fix for the latter problem is to duplicate code
|
|
||||||
from png.c.
|
|
||||||
|
|
||||||
Fixed in libpng-1.0.5a/1.1.0
|
|
||||||
|
|
||||||
6. December 1999 -- new BUG
|
|
||||||
|
|
||||||
The png_text structure was modified in libpng-1.0.5e in a manner that
|
|
||||||
is not backward compatible (the lang member was added, and the
|
|
||||||
translated_key member was added to libpng-1.0.5g)
|
|
||||||
|
|
||||||
STATUS: Will be fixed before the next public release.
|
|
||||||
|
|||||||
8
LICENSE
8
LICENSE
@@ -4,8 +4,8 @@ Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
|||||||
(libpng versions 0.5, May 1995, through 0.89c, May 1996)
|
(libpng versions 0.5, May 1995, through 0.89c, May 1996)
|
||||||
Copyright (c) 1996, 1997 Andreas Dilger
|
Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
(libpng versions 0.90, December 1996, through 0.96, May 1997)
|
(libpng versions 0.90, December 1996, through 0.96, May 1997)
|
||||||
Copyright (c) 1998, 1999 Glenn Randers-Pehrson
|
Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
(libpng versions 0.97, January 1998, through 1.0.5h, December 10, 1999)
|
(libpng versions 0.97, January 1998, through 1.0.6f, April 14, 2000)
|
||||||
|
|
||||||
For the purposes of this copyright and license, "Contributing Authors"
|
For the purposes of this copyright and license, "Contributing Authors"
|
||||||
is defined as the following set of individuals:
|
is defined as the following set of individuals:
|
||||||
@@ -63,9 +63,9 @@ boxes and the like:
|
|||||||
Also, the PNG logo (in PNG format, of course) is supplied in the
|
Also, the PNG logo (in PNG format, of course) is supplied in the
|
||||||
file "pngnow.png".
|
file "pngnow.png".
|
||||||
|
|
||||||
Libpng is OSI Certified Open Source Software. OSI Certified is a
|
Libpng is OSI Certified Open Source Software. OSI Certified Open Source is a
|
||||||
certification mark of the Open Source Initiative.
|
certification mark of the Open Source Initiative.
|
||||||
|
|
||||||
Glenn Randers-Pehrson
|
Glenn Randers-Pehrson
|
||||||
randeg@alum.rpi.edu
|
randeg@alum.rpi.edu
|
||||||
December 10, 1999
|
April 14, 2000
|
||||||
|
|||||||
44
README
44
README
@@ -1,8 +1,12 @@
|
|||||||
README for libpng 1.0.5h - December 10, 1999 (shared library 2.1)
|
README for libpng 1.0.6f - April 14, 2000 (shared library 2.1)
|
||||||
See the note about version numbers near the top of png.h
|
See the note about version numbers near the top of png.h
|
||||||
|
|
||||||
See INSTALL for instructions on how to install libpng.
|
See INSTALL for instructions on how to install libpng.
|
||||||
|
|
||||||
|
Libpng comes in two distribution formats. Get libpng-*.tar.gz if you
|
||||||
|
want UNIX-style line endings in the text files, or lpng*.zip if you want
|
||||||
|
DOS-style line endings.
|
||||||
|
|
||||||
Version 0.89 was the first official release of libpng. Don't let the
|
Version 0.89 was the first official release of libpng. Don't let the
|
||||||
fact that it's the first release fool you. The libpng library has been in
|
fact that it's the first release fool you. The libpng library has been in
|
||||||
extensive use and testing since mid-1995. By late 1997 it had
|
extensive use and testing since mid-1995. By late 1997 it had
|
||||||
@@ -125,22 +129,26 @@ gladly listen. Even if your suggestion is not used for version
|
|||||||
|
|
||||||
Files in this distribution:
|
Files in this distribution:
|
||||||
|
|
||||||
|
ANNOUNCE => Announcement of this version, with recent changes
|
||||||
CHANGES => Description of changes between libpng versions
|
CHANGES => Description of changes between libpng versions
|
||||||
|
KNOWNBUG => List of known bugs and deficiencies
|
||||||
|
LICENSE => License to use and redistribute libpng
|
||||||
README => This file
|
README => This file
|
||||||
TODO => Things not implemented in the current library
|
TODO => Things not implemented in the current library
|
||||||
build.bat => MS-DOS batch file for Borland compiler
|
Y2KINFO => Statement of Y2K compliance
|
||||||
descrip.mms => VMS project file
|
|
||||||
example.c => Example code for using libpng functions
|
example.c => Example code for using libpng functions
|
||||||
libpng.3 => manual page for libpng
|
libpng.3 => manual page for libpng (includes libpng.txt)
|
||||||
libpng.txt => Description of libpng and its functions
|
libpng.txt => Description of libpng and its functions
|
||||||
libpngpf.3 => manual page for libpng's private functions
|
libpngpf.3 => manual page for libpng's private functions
|
||||||
png.5 => manual page for the PNG format
|
png.5 => manual page for the PNG format
|
||||||
png.c => Basic interface functions common to library
|
png.c => Basic interface functions common to library
|
||||||
png.h => Library function and interface declarations
|
png.h => Library function and interface declarations
|
||||||
pngconf.h => System specific library configuration
|
pngconf.h => System specific library configuration
|
||||||
|
pngasmrd.h => Header file for assembler-coded functions
|
||||||
pngerror.c => Error/warning message I/O functions
|
pngerror.c => Error/warning message I/O functions
|
||||||
pngget.c => Functions for retrieving info from struct
|
pngget.c => Functions for retrieving info from struct
|
||||||
pngmem.c => Memory handling functions
|
pngmem.c => Memory handling functions
|
||||||
|
pngnow.png => PNG logo
|
||||||
pngpread.c => Progressive reading functions
|
pngpread.c => Progressive reading functions
|
||||||
pngread.c => Read data/helper high-level functions
|
pngread.c => Read data/helper high-level functions
|
||||||
pngrio.c => Lowest-level data read I/O functions
|
pngrio.c => Lowest-level data read I/O functions
|
||||||
@@ -162,18 +170,25 @@ Files in this distribution:
|
|||||||
pngsuite => Test images
|
pngsuite => Test images
|
||||||
scripts => Directory containing scripts for building libpng:
|
scripts => Directory containing scripts for building libpng:
|
||||||
descrip.mms => VMS makefile for MMS or MMK
|
descrip.mms => VMS makefile for MMS or MMK
|
||||||
makefile.std => Generic UNIX makefile
|
makefile.std => Generic UNIX makefile (cc, creates static libpng.a)
|
||||||
|
makefile.linux => Linux/ELF makefile
|
||||||
|
(gcc, creates libpng.so.2.1.0.6f)
|
||||||
|
makefile.gcmmx => Linux/ELF makefile (gcc, creates
|
||||||
|
libpng.so.2.1.0.6f, uses assembler code
|
||||||
|
tuned for Intel MMX platform)
|
||||||
|
makefile.gcc => Generic makefile (gcc, creates static libpng.a)
|
||||||
makefile.knr => Archaic UNIX Makefile that converts files with
|
makefile.knr => Archaic UNIX Makefile that converts files with
|
||||||
ansi2knr (Requires ansi2knr.c from
|
ansi2knr (Requires ansi2knr.c from
|
||||||
ftp://ftp.cs.wisc.edu/ghost)
|
ftp://ftp.cs.wisc.edu/ghost)
|
||||||
makefile.dec => DEC Alpha UNIX makefile
|
makefile.dec => DEC Alpha UNIX makefile
|
||||||
makefile.hpux => HPUX (10.20 and 11.00) makefile
|
makefile.hpux => HPUX (10.20 and 11.00) makefile
|
||||||
makefile.sgi => Silicon Graphics IRIX makefile
|
makefile.ibmc => IBM C/C++ version 3.x for Win32 and OS/2 (static)
|
||||||
|
libpng.icc => Project file, IBM VisualAge/C++ 4.0 or later
|
||||||
|
makefile.sgi => Silicon Graphics IRIX (cc, creates static lib)
|
||||||
|
makefile.sggcc => Silicon Graphics (gcc, creates libpng.so.2.1.0.6f)
|
||||||
makefile.sunos => Sun makefile
|
makefile.sunos => Sun makefile
|
||||||
makefile.solaris => Solaris 2.X makefile
|
makefile.solaris => Solaris 2.X makefile
|
||||||
(gcc, creates libpng.so.2.1.0.5h)
|
(gcc, creates libpng.so.2.1.0.6f)
|
||||||
makefile.linux => Linux/ELF makefile
|
|
||||||
(gcc, creates libpng.so.2.1.0.5h)
|
|
||||||
makefile.sco => For SCO OSr5 ELF and Unixware 7 with Native cc
|
makefile.sco => For SCO OSr5 ELF and Unixware 7 with Native cc
|
||||||
makefile.mips => MIPS makefile
|
makefile.mips => MIPS makefile
|
||||||
makefile.acorn => Acorn makefile
|
makefile.acorn => Acorn makefile
|
||||||
@@ -183,20 +198,21 @@ Files in this distribution:
|
|||||||
scripts/SCOPTIONS.ppc)
|
scripts/SCOPTIONS.ppc)
|
||||||
makefile.atari => Atari makefile
|
makefile.atari => Atari makefile
|
||||||
makefile.beos => BEOS makefile for X86
|
makefile.beos => BEOS makefile for X86
|
||||||
makefile.borland => Borland makefile
|
makefile.bor => Borland makefile (uses bcc)
|
||||||
build.bat => MS-DOS batch file for Borland compiler
|
makefile.bc32 => 32-bit Borland C++ (all modules compiled in C mode)
|
||||||
|
makefile.bd32 => To make a png32bd.dll with Borland C++ 4.5
|
||||||
|
makefile.tc3 => Turbo C 3.0 makefile
|
||||||
makefile.dj2 => DJGPP 2 makefile
|
makefile.dj2 => DJGPP 2 makefile
|
||||||
makefile.msc => Microsoft C makefile
|
makefile.msc => Microsoft C makefile
|
||||||
makefile.vcawin32 => makefile for Microsoft Visual C++ 5.0 and
|
makefile.vcawin32 => makefile for Microsoft Visual C++ 5.0 and
|
||||||
later (uses assembler code)
|
later (uses assembler code tuned for Intel MMX
|
||||||
|
platform)
|
||||||
makefile.vcwin32 => makefile for Microsoft Visual C++ 4.0 and
|
makefile.vcwin32 => makefile for Microsoft Visual C++ 4.0 and
|
||||||
later (does not use assembler code)
|
later (does not use assembler code)
|
||||||
makefile.turboc3 => Turbo C 3.0 makefile
|
|
||||||
makefile.os2 => OS/2 Makefile (gcc and emx, requires pngos2.def)
|
makefile.os2 => OS/2 Makefile (gcc and emx, requires pngos2.def)
|
||||||
pngos2.def => OS/2 module definition file used by makefile.os2
|
pngos2.def => OS/2 module definition file used by makefile.os2
|
||||||
makefile.watcom => Watcom 10a+ Makefile, 32-bit flat memory model
|
makefile.watcom => Watcom 10a+ Makefile, 32-bit flat memory model
|
||||||
makevms.com => VMS build script
|
makevms.com => VMS build script
|
||||||
pngdll.mak => To make a png32bd.dll with Borland C++ 4.5
|
|
||||||
pngdef.pas => Defines for a png32bd.dll with Borland C++ 4.5
|
pngdef.pas => Defines for a png32bd.dll with Borland C++ 4.5
|
||||||
SCOPTIONS.ppc => Used with smakefile.ppc
|
SCOPTIONS.ppc => Used with smakefile.ppc
|
||||||
|
|
||||||
|
|||||||
7
TODO
7
TODO
@@ -1,13 +1,11 @@
|
|||||||
TODO - list of things to do for libpng:
|
TODO - list of things to do for libpng:
|
||||||
|
|
||||||
Final bug fixes.
|
Final bug fixes.
|
||||||
Fix problem with C++ and EXTERN "C".
|
Finish work on the no-floating-point version (including gamma compensation)
|
||||||
Better C++ wrapper/full C++ implementation?
|
Better C++ wrapper/full C++ implementation?
|
||||||
Keep up with public chunks.
|
Fix problem with C++ and EXTERN "C".
|
||||||
cHRM transformation.
|
cHRM transformation.
|
||||||
Support for application-defined chunk handlers.
|
|
||||||
Improve setjmp/longjmp usage or remove it in favor of returning error codes.
|
Improve setjmp/longjmp usage or remove it in favor of returning error codes.
|
||||||
High-level API for reading images.
|
|
||||||
Add "grayscale->palette" transformation and "palette->grayscale" detection.
|
Add "grayscale->palette" transformation and "palette->grayscale" detection.
|
||||||
Improved dithering.
|
Improved dithering.
|
||||||
Multi-lingual error and warning message support.
|
Multi-lingual error and warning message support.
|
||||||
@@ -19,4 +17,3 @@ Better filter selection
|
|||||||
Histogram creation.
|
Histogram creation.
|
||||||
Text conversion between different code pages (Latin-1 -> Mac and DOS).
|
Text conversion between different code pages (Latin-1 -> Mac and DOS).
|
||||||
Improve API by hiding the info_ptr.
|
Improve API by hiding the info_ptr.
|
||||||
Make a no-floating-point version.
|
|
||||||
|
|||||||
30
Y2KINFO
30
Y2KINFO
@@ -1,29 +1,29 @@
|
|||||||
Y2K compliance in libpng:
|
Y2K compliance in libpng:
|
||||||
=========================
|
=========================
|
||||||
|
|
||||||
December 10, 1999
|
April 14, 2000
|
||||||
|
|
||||||
Since the PNG Development group is an ad-hoc body, we can't make
|
Since the PNG Development group is an ad-hoc body, we can't make
|
||||||
an official declaration.
|
an official declaration.
|
||||||
|
|
||||||
This is your unofficial assurance that libpng from version 0.71 and
|
This is your unofficial assurance that libpng from version 0.71 and
|
||||||
upward through 1.0.5h are Y2K compliant. It is my belief that earlier
|
upward through 1.0.6f are Y2K compliant. It is my belief that earlier
|
||||||
versions were also Y2K compliant.
|
versions were also Y2K compliant.
|
||||||
|
|
||||||
Libpng only has three year fields. One is a 2-byte unsigned integer
|
Libpng only has three year fields. One is a 2-byte unsigned integer
|
||||||
that will hold years up to 65535. The other two hold the date in text
|
that will hold years up to 65535. The other two hold the date in text
|
||||||
format, and will hold years up to 9999.
|
format, and will hold years up to 9999.
|
||||||
|
|
||||||
The integer is
|
The integer is
|
||||||
"png_uint_16 year" in png_time_struct.
|
"png_uint_16 year" in png_time_struct.
|
||||||
|
|
||||||
The strings are
|
The strings are
|
||||||
"png_charp time_buffer" in png_struct and
|
"png_charp time_buffer" in png_struct and
|
||||||
"near_time_buffer", which is a local character string in png.c.
|
"near_time_buffer", which is a local character string in png.c.
|
||||||
|
|
||||||
There are seven time-related functions:
|
There are seven time-related functions:
|
||||||
|
|
||||||
png_convert_to_rfc_1123() in png.c
|
png_convert_to_rfc_1123() in png.c
|
||||||
(formerly png_convert_to_rfc_1152() in error)
|
(formerly png_convert_to_rfc_1152() in error)
|
||||||
png_convert_from_struct_tm() in pngwrite.c, called in pngwrite.c
|
png_convert_from_struct_tm() in pngwrite.c, called in pngwrite.c
|
||||||
png_convert_from_time_t() in pngwrite.c
|
png_convert_from_time_t() in pngwrite.c
|
||||||
@@ -31,8 +31,8 @@
|
|||||||
png_handle_tIME() in pngrutil.c, called in pngread.c
|
png_handle_tIME() in pngrutil.c, called in pngread.c
|
||||||
png_set_tIME() in pngset.c
|
png_set_tIME() in pngset.c
|
||||||
png_write_tIME() in pngwutil.c, called in pngwrite.c
|
png_write_tIME() in pngwutil.c, called in pngwrite.c
|
||||||
|
|
||||||
All appear to handle dates properly in a Y2K environment. The
|
All appear to handle dates properly in a Y2K environment. The
|
||||||
png_convert_from_time_t() function calls gmtime() to convert from system
|
png_convert_from_time_t() function calls gmtime() to convert from system
|
||||||
clock time, which returns (year - 1900), which we properly convert to
|
clock time, which returns (year - 1900), which we properly convert to
|
||||||
the full 4-digit year. There is a possibility that applications using
|
the full 4-digit year. There is a possibility that applications using
|
||||||
@@ -42,14 +42,14 @@
|
|||||||
but this is not under our control. The libpng documentation has always
|
but this is not under our control. The libpng documentation has always
|
||||||
stated that it works with 4-digit years, and the APIs have been
|
stated that it works with 4-digit years, and the APIs have been
|
||||||
documented as such.
|
documented as such.
|
||||||
|
|
||||||
The tIME chunk itself is also Y2K compliant. It uses a 2-byte unsigned
|
The tIME chunk itself is also Y2K compliant. It uses a 2-byte unsigned
|
||||||
integer to hold the year, and can hold years as large as 65535.
|
integer to hold the year, and can hold years as large as 65535.
|
||||||
|
|
||||||
zlib, upon which libpng depends, is also Y2K compliant. It contains
|
zlib, upon which libpng depends, is also Y2K compliant. It contains
|
||||||
no date-related code.
|
no date-related code.
|
||||||
|
|
||||||
|
|
||||||
Glenn Randers-Pehrson
|
Glenn Randers-Pehrson
|
||||||
libpng maintainer
|
libpng maintainer
|
||||||
PNG Development Group
|
PNG Development Group
|
||||||
|
|||||||
6
configure
vendored
Executable file
6
configure
vendored
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
echo "
|
||||||
|
There is no \"configure\" script for Libpng-1.0.6f. Instead, please
|
||||||
|
copy the appropriate makefile for your system from the \"scripts\"
|
||||||
|
directory. Read the INSTALL file for more details.
|
||||||
|
"
|
||||||
|
|
||||||
26
contrib/gregbook/LICENSE
Normal file
26
contrib/gregbook/LICENSE
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Copyright (c) 1998-2000 Greg Roelofs. All rights reserved.
|
||||||
|
|
||||||
|
This software is provided "as is," without warranty of any kind,
|
||||||
|
express or implied. In no event shall the author or contributors
|
||||||
|
be held liable for any damages arising in any way 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. Redistributions of source code must retain the above copyright
|
||||||
|
notice, disclaimer, and this list of conditions.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, disclaimer, and this list of conditions in the documenta-
|
||||||
|
tion and/or other materials provided with the distribution.
|
||||||
|
3. All advertising materials mentioning features or use of this
|
||||||
|
software must display the following acknowledgment:
|
||||||
|
|
||||||
|
This product includes software developed by Greg Roelofs
|
||||||
|
and contributors for the book, "PNG: The Definitive Guide,"
|
||||||
|
published by O'Reilly and Associates.
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
# Sample makefile for rpng-x / rpng2-x / wpng using gcc and make.
|
# Sample makefile for rpng-x / rpng2-x / wpng using gcc and make.
|
||||||
# Greg Roelofs
|
# Greg Roelofs
|
||||||
# Last modified: 16 February 1999
|
# Last modified: 28 February 2000
|
||||||
#
|
#
|
||||||
# The programs built by this makefile are described in the book,
|
# The programs built by this makefile are described in the book,
|
||||||
# "PNG: The Definitive Guide," by Greg Roelofs (O'Reilly and
|
# "PNG: The Definitive Guide," by Greg Roelofs (O'Reilly and
|
||||||
@@ -9,11 +9,12 @@
|
|||||||
#
|
#
|
||||||
# Invoke this makefile from a shell prompt in the usual way; for example:
|
# Invoke this makefile from a shell prompt in the usual way; for example:
|
||||||
#
|
#
|
||||||
# make -f makefile.unx
|
# make -f Makefile.unx
|
||||||
#
|
#
|
||||||
# This makefile assumes libpng and zlib have already been built or downloaded
|
# This makefile assumes libpng and zlib have already been built or downloaded
|
||||||
# and are both installed in /usr/local/{include,lib} (as indicated by the
|
# and are both installed in /usr/local/{include,lib} (as indicated by the
|
||||||
# PNGPATH and ZPATH macros below). Edit as appropriate.
|
# PNG* and Z* macros below). Edit as appropriate--choose only ONE each of
|
||||||
|
# the PNGINC, PNGLIB, ZINC and ZLIB lines.
|
||||||
#
|
#
|
||||||
# This makefile builds statically linked executables (against libpng and zlib,
|
# This makefile builds statically linked executables (against libpng and zlib,
|
||||||
# that is), but that can be changed by uncommenting the appropriate PNGLIB and
|
# that is), but that can be changed by uncommenting the appropriate PNGLIB and
|
||||||
@@ -22,30 +23,38 @@
|
|||||||
|
|
||||||
# macros --------------------------------------------------------------------
|
# macros --------------------------------------------------------------------
|
||||||
|
|
||||||
PNGPATH = /usr/local
|
PNGINC = -I/usr/local/include
|
||||||
PNGINC = -I$(PNGPATH)/include
|
#PNGLIB = -L/usr/local/lib -lpng # dynamically linked against libpng
|
||||||
#PNGLIB = -L$(PNGPATH)/lib -lpng
|
PNGLIB = /usr/local/lib/libpng.a # statically linked against libpng
|
||||||
PNGLIB = $(PNGPATH)/lib/libpng.a
|
# or:
|
||||||
|
#PNGINC = -I../..
|
||||||
|
#PNGLIB = -L../.. -lpng
|
||||||
|
#PNGLIB = ../../libpng.a
|
||||||
|
|
||||||
ZPATH = /usr/local
|
ZINC = -I/usr/local/include
|
||||||
ZINC = -I$(ZPATH)/include
|
#ZLIB = -L/usr/local/lib -lz # dynamically linked against zlib
|
||||||
#ZLIB = -L$(ZPATH)/lib -lz
|
ZLIB = /usr/local/lib/libz.a # statically linked against zlib
|
||||||
ZLIB = $(ZPATH)/lib/libz.a
|
#ZINC = -I../zlib
|
||||||
|
#ZLIB = -L../zlib -lz
|
||||||
|
#ZLIB = ../../../zlib/libz.a
|
||||||
|
|
||||||
#XPATH = /usr/X11
|
#XINC = -I/usr/include/X11 # old-style, stock X distributions
|
||||||
XPATH = /usr/X11R6
|
#XLIB = -L/usr/lib/X11 -lX11
|
||||||
XINC = -I$(XPATH)/include
|
#XINC = -I/usr/openwin/include/X11 # Sun workstations (OpenWindows)
|
||||||
XLIB = -L$(XPATH)/lib -lX11
|
#XLIB = -L/usr/openwin/lib -lX11
|
||||||
|
XINC = -I/usr/X11R6/include # new X distributions (XFree86, etc.)
|
||||||
|
XLIB = -L/usr/X11R6/lib -lX11
|
||||||
|
|
||||||
INCS = $(PNGINC) $(ZINC) $(XINC)
|
INCS = $(PNGINC) $(ZINC) $(XINC)
|
||||||
RLIBS = $(PNGLIB) $(ZLIB) $(XLIB) -lm
|
RLIBS = $(PNGLIB) $(ZLIB) $(XLIB) -lm
|
||||||
WLIBS = $(PNGLIB) $(ZLIB) -lm
|
WLIBS = $(PNGLIB) $(ZLIB)
|
||||||
|
|
||||||
CC = gcc
|
CC = gcc
|
||||||
LD = gcc
|
LD = gcc
|
||||||
RM = rm -f
|
RM = rm -f
|
||||||
CFLAGS = -O -Wall $(INCS)
|
CFLAGS = -O -Wall $(INCS)
|
||||||
# [note that -Wall is a gcc-specific compilation flag ("all warnings on")]
|
# [note that -Wall is a gcc-specific compilation flag ("most warnings on")]
|
||||||
|
# [-ansi, -pedantic and -W can also be used]
|
||||||
LDFLAGS =
|
LDFLAGS =
|
||||||
O = .o
|
O = .o
|
||||||
E =
|
E =
|
||||||
@@ -10,14 +10,14 @@
|
|||||||
# Invoke this makefile from a DOS prompt window via:
|
# Invoke this makefile from a DOS prompt window via:
|
||||||
#
|
#
|
||||||
# %devstudio%\vc\bin\vcvars32.bat
|
# %devstudio%\vc\bin\vcvars32.bat
|
||||||
# nmake -nologo -f makefile.w32
|
# nmake -nologo -f Makefile.w32
|
||||||
#
|
#
|
||||||
# where %devstudio% is the installation directory for MSVC / DevStudio. If
|
# where %devstudio% is the installation directory for MSVC / DevStudio. If
|
||||||
# you get "environment out of space" errors, create a desktop shortcut with
|
# you get "environment out of space" errors, create a desktop shortcut with
|
||||||
# "c:\windows\command.com /e:4096" as the program command line and set the
|
# "c:\windows\command.com /e:4096" as the program command line and set the
|
||||||
# working directory to this directory. Then double-click to open the new
|
# working directory to this directory. Then double-click to open the new
|
||||||
# DOS-prompt window with a bigger environment and retry the commands above.
|
# DOS-prompt window with a bigger environment and retry the commands above.
|
||||||
#
|
#
|
||||||
# This makefile assumes libpng and zlib have already been built or downloaded
|
# This makefile assumes libpng and zlib have already been built or downloaded
|
||||||
# and are in subdirectories at the same level as the current subdirectory
|
# and are in subdirectories at the same level as the current subdirectory
|
||||||
# (as indicated by the PNGPATH and ZPATH macros below). Edit as appropriate.
|
# (as indicated by the PNGPATH and ZPATH macros below). Edit as appropriate.
|
||||||
@@ -32,12 +32,12 @@
|
|||||||
|
|
||||||
# macros --------------------------------------------------------------------
|
# macros --------------------------------------------------------------------
|
||||||
|
|
||||||
PNGPATH = ../libpng
|
PNGPATH = ../..
|
||||||
PNGINC = -I$(PNGPATH)
|
PNGINC = -I$(PNGPATH)
|
||||||
#PNGLIB = $(PNGPATH)/pngdll.lib
|
#PNGLIB = $(PNGPATH)/pngdll.lib
|
||||||
PNGLIB = $(PNGPATH)/libpng.lib
|
PNGLIB = $(PNGPATH)/libpng.lib
|
||||||
|
|
||||||
ZPATH = ../zlib
|
ZPATH = ../../../zlib
|
||||||
ZINC = -I$(ZPATH)
|
ZINC = -I$(ZPATH)
|
||||||
#ZLIB = $(ZPATH)/zlibdll.lib
|
#ZLIB = $(ZPATH)/zlibdll.lib
|
||||||
ZLIB = $(ZPATH)/zlibstat.lib
|
ZLIB = $(ZPATH)/zlibstat.lib
|
||||||
@@ -1,52 +1,183 @@
|
|||||||
PNG: The Definitive Guide: Source Code
|
===========================
|
||||||
|
PNG: The Definitive Guide
|
||||||
|
===========================
|
||||||
|
|
||||||
Chapters 13, 14 and 15 of PNG: The Definitive Guide discuss three
|
Source Code
|
||||||
|
|
||||||
|
Chapters 13, 14 and 15 of "PNG: The Definitive Guide" discuss three free,
|
||||||
cross-platform demo programs that show how to use the libpng reference
|
cross-platform demo programs that show how to use the libpng reference
|
||||||
library: rpng, rpng2 and wpng. rpng and rpng2 are viewers; the first is a
|
library: rpng, rpng2 and wpng. rpng and rpng2 are viewers; the first is
|
||||||
very simple example that that shows how a standard file-viewer might use
|
a very simple example that that shows how a standard file-viewer might use
|
||||||
libpng, while the second is designed to process streaming data and shows how
|
libpng, while the second is designed to process streaming data and shows
|
||||||
a web browser might be written. wpng is a simple command-line program that
|
how a web browser might be written. wpng is a simple command-line program
|
||||||
reads binary PPM files (the ``raw'' RGB subset of NetPBM) and converts them
|
that reads binary PGM and PPM files (the ``raw'' grayscale and RGB subsets
|
||||||
to PNG.
|
of PBMPLUS/NetPBM) and converts them to PNG.
|
||||||
|
|
||||||
The source code for all three demo programs currently compiles only under
|
The source code for all three demo programs currently compiles under
|
||||||
Unix and 32-bit Windows. It has been tested with gcc 2.7.2.3 under Linux and
|
Unix, OpenVMS, and 32-bit Windows. (Special thanks to Martin Zinser,
|
||||||
Solaris and with Microsoft Visual C++ 5.0 under Windows 95. Brief
|
zinser@decus.de, for making the necessary changes for OpenVMS and for
|
||||||
instructions for compiling the programs are included at the top of the
|
providing an appropriate build script.) Build instructions can be
|
||||||
makefiles; makefile.unx is the Unix version, and makefile.w32 is (you
|
found below.
|
||||||
guessed it!) the version for 32-bit Windows. libpng and zlib are required.
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------
|
Files:
|
||||||
|
|
||||||
License
|
README this file
|
||||||
|
README.w32 additional Windows-specific information
|
||||||
|
LICENSE terms of distribution and reuse (BSD-like)
|
||||||
|
|
||||||
The source code to the demo programs may be used and distributed freely
|
Makefile.unx Unix makefile
|
||||||
(even if you didn't buy the book--but feel free to do so at any time),
|
Makefile.w32 Windows (MSVC) makefile
|
||||||
subject to the terms of the following BSD-like license:
|
makevms.com OpenVMS build script
|
||||||
|
|
||||||
Copyright (c) 1998-1999 Greg Roelofs. All rights reserved.
|
rpng-win.c Windows front end for the basic viewer
|
||||||
|
rpng-x.c X Window System (Unix, OpenVMS) front end
|
||||||
|
readpng.c generic back end for the basic viewer
|
||||||
|
readpng.h header file for the basic viewer
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
rpng2-win.c Windows front end for the progressive viewer
|
||||||
express or implied. In no event shall the author or contributors
|
rpng2-x.c X front end for the progressive viewer
|
||||||
be held liable for any damages arising in any way from the use of
|
readpng2.c generic back end for the progressive viewer
|
||||||
this software.
|
readpng2.h header file for the progressive viewer
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any
|
wpng.c generic (text) front end for the converter
|
||||||
purpose, including commercial applications, and to alter it and
|
writepng.c generic back end for the converter
|
||||||
redistribute it freely, subject to the following restrictions:
|
writepng.h header file for the converter
|
||||||
|
|
||||||
1. Redistributions of source code must retain the above
|
toucan.png transparent PNG for testing (by Stefan Schneider)
|
||||||
copyright notice, disclaimer, and this list of conditions.
|
|
||||||
2. Redistributions in binary form must reproduce the above
|
|
||||||
copyright notice, disclaimer, and this list of conditions in
|
|
||||||
the documentation and/or other materials provided with the
|
|
||||||
distribution.
|
|
||||||
3. All advertising materials mentioning features or use of this
|
|
||||||
software must display the following acknowledgment:
|
|
||||||
|
|
||||||
This product includes software developed by Greg Roelofs
|
Note that the programs are designed to be functional, but their primary
|
||||||
and contributors for the book, "PNG: The Definitive
|
purpose is to demonstrate how to use libpng to add PNG support to other
|
||||||
Guide," published by O'Reilly and Associates.
|
programs. As such, their user interfaces are crude and definitely not
|
||||||
|
intended for everyday use.
|
||||||
|
|
||||||
----------------------------------------------------------
|
Please see http://www.cdrom.com/pub/png/pngbook.html for further infor-
|
||||||
http://www.cdrom.com/pub/png/book/sources.html
|
mation and links to the latest version of the source code, and Chapters
|
||||||
|
13-15 of the book for detailed discussion of the three programs.
|
||||||
|
|
||||||
|
Greg Roelofs
|
||||||
|
19 March 2000
|
||||||
|
|
||||||
|
|
||||||
|
BUILD INSTRUCTIONS
|
||||||
|
|
||||||
|
- Prerequisites:
|
||||||
|
|
||||||
|
- zlib ftp://ftp.cdrom.com/pub/infozip/zlib/zlib.html
|
||||||
|
- libpng http://www.cdrom.com/pub/png/pngcode.html
|
||||||
|
- pngbook http://www.cdrom.com/pub/png/book/sources.html
|
||||||
|
|
||||||
|
The pngbook demo programs are explicitly designed to demonstrate proper
|
||||||
|
coding techniques for using the libpng reference library. As a result,
|
||||||
|
you need to download and build both zlib (on which libpng depends) and
|
||||||
|
libpng. A common build setup is to place the zlib, libpng and pngbook
|
||||||
|
subdirectory trees ("folders") in the same parent directory. Then the
|
||||||
|
libpng build can refer to files in ../zlib (or ..\zlib or [-.zlib]),
|
||||||
|
and similarly for the pngbook build.
|
||||||
|
|
||||||
|
Note that all three packages are designed to be built from a command
|
||||||
|
line by default; those who wish to use a graphical or other integrated
|
||||||
|
development environments are on their own.
|
||||||
|
|
||||||
|
|
||||||
|
- Unix:
|
||||||
|
|
||||||
|
Unpack the latest pngbook sources (which should correspond to this
|
||||||
|
README file) into a directory and change into that directory.
|
||||||
|
|
||||||
|
Copy Makefile.unx to Makefile and edit the PNG* and Z* variables
|
||||||
|
appropriately (possibly also the X* variables if necessary).
|
||||||
|
|
||||||
|
make
|
||||||
|
|
||||||
|
There is no "install" target, so copy the three executables somewhere
|
||||||
|
in your path or run them from the current directory. All three will
|
||||||
|
print a basic usage screen when run without any command-line arguments;
|
||||||
|
see the book for more details.
|
||||||
|
|
||||||
|
|
||||||
|
- Windows:
|
||||||
|
|
||||||
|
Unpack the latest pngbook sources (which should correspond to this
|
||||||
|
README file) into a folder, open a "DOS shell" or "command prompt"
|
||||||
|
or equivalent command-line window, and cd into the folder where you
|
||||||
|
unpacked the source code.
|
||||||
|
|
||||||
|
For MSVC, set up the necessary environment variables by invoking
|
||||||
|
|
||||||
|
%devstudio%\vc\bin\vcvars32.bat
|
||||||
|
|
||||||
|
where where %devstudio% is the installation directory for MSVC /
|
||||||
|
DevStudio. If you get "environment out of space" errors under 95/98,
|
||||||
|
create a desktop shortcut with "c:\windows\command.com /e:4096" as
|
||||||
|
the program command line and set the working directory to the pngbook
|
||||||
|
directory. Then double-click to open the new DOS-prompt window with
|
||||||
|
a bigger environment and retry the commands above.
|
||||||
|
|
||||||
|
Copy Makefile.w32 to Makefile and edit the PNGPATH and ZPATH variables
|
||||||
|
appropriately (possibly also the "INC" and "LIB" variables if needed).
|
||||||
|
Note that the names of the dynamic and static libpng and zlib libraries
|
||||||
|
used in the makefile may change in later releases of the libraries.
|
||||||
|
Also note that, as of libpng version 1.0.5, MSVC DLL builds do not work.
|
||||||
|
This makefile therefore builds statically linked executables, but if
|
||||||
|
the DLL problems ever get fixed, uncommenting the appropriate PNGLIB
|
||||||
|
and ZLIB lines will build dynamically linked executables instead.
|
||||||
|
|
||||||
|
Do the build by typing
|
||||||
|
|
||||||
|
nmake
|
||||||
|
|
||||||
|
The result should be three executables: rpng-win.exe, rpng2-win.exe,
|
||||||
|
and wpng.exe. Copy them somewhere in your PATH or run them from the
|
||||||
|
current folder. Unlike the Unix versions, the two windowed programs
|
||||||
|
(rpng and rpng2) do not display a usage screen when invoked without
|
||||||
|
command-line arguments; see README.w32 for brief help or the book for
|
||||||
|
details. Note that the programs use the Unix-style "-" character to
|
||||||
|
specify options, instead of the more common DOS/Windows "/" character.
|
||||||
|
|
||||||
|
|
||||||
|
- OpenVMS:
|
||||||
|
|
||||||
|
Unpack the pngbook sources into a subdirectory and change into that
|
||||||
|
subdirectory.
|
||||||
|
|
||||||
|
Edit makevms.com appropriately, specifically the zpath and pngpath
|
||||||
|
variables.
|
||||||
|
|
||||||
|
@makevms
|
||||||
|
|
||||||
|
To run the programs, they probably first need to be set up as "foreign
|
||||||
|
symbols," with "disk" and "dir" set appropriately:
|
||||||
|
|
||||||
|
$ rpng == "$disk:[dir]rpng-x.exe"
|
||||||
|
$ rpng2 == "$disk:[dir]rpng2-x.exe"
|
||||||
|
$ wpng == "$disk:[dir]wpng.exe"
|
||||||
|
|
||||||
|
All three will print a basic usage screen when run without any command-
|
||||||
|
line arguments; see the book for more details. Note that the options
|
||||||
|
style is Unix-like, i.e., preceded by "-" rather than "/".
|
||||||
|
|
||||||
|
|
||||||
|
RUNNING THE PROGRAMS: (VERY) BRIEF INTRO
|
||||||
|
|
||||||
|
rpng is a simple PNG viewer that can display transparent PNGs with a
|
||||||
|
specified background color; for example,
|
||||||
|
|
||||||
|
rpng -bgcolor #ff0000 toucan.png
|
||||||
|
|
||||||
|
would display the image with a red background. rpng2 is a progressive
|
||||||
|
viewer that simulates a web browser in some respects; it can display
|
||||||
|
images against either a background color or a dynamically generated
|
||||||
|
background image. For example:
|
||||||
|
|
||||||
|
rpng2 -bgpat 16 toucan.png
|
||||||
|
|
||||||
|
wpng is a purely command-line image converter from binary PBMPLUS/NetPBM
|
||||||
|
format (.pgm or .ppm) to PNG; for example,
|
||||||
|
|
||||||
|
wpng -time < toucan.ppm > toucan.png
|
||||||
|
|
||||||
|
would convert the specified PPM file (using redirection) to PNG, auto-
|
||||||
|
matically setting the PNG modification-time chunk.
|
||||||
|
|
||||||
|
All options can be abbreviated to the shortest unique value; for example,
|
||||||
|
"-bgc" for -bgcolor (versus "-bgp" for -bgpat), or "-g" for -gamma.
|
||||||
|
|||||||
53
contrib/gregbook/README.w32
Normal file
53
contrib/gregbook/README.w32
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
See the main README file for basic instructions on compiling and running
|
||||||
|
the programs. See http://www.cdrom.com/pub/png/pngbook.html for further
|
||||||
|
information and links to the source code, and Chapters 13-15 of the book
|
||||||
|
for detailed discussion of the three programs.
|
||||||
|
|
||||||
|
Since the two viewers, rpng and rpng2, are both designed to write infor-
|
||||||
|
mation to the console (i.e., a DOS-window command line) while displaying
|
||||||
|
the image in a graphical window--and since I haven't yet figured out how
|
||||||
|
to do that under Windows--here are the usage screens for the two programs:
|
||||||
|
|
||||||
|
|
||||||
|
rpng-win 1.02 of 19 March 2000: Simple PNG Viewer for Windows
|
||||||
|
Compiled with libpng 1.0.5; using libpng 1.0.5.
|
||||||
|
Compiled with zlib 1.1.3; using zlib 1.1.3.
|
||||||
|
|
||||||
|
Usage: rpng-win [-gamma exp] [-bgcolor bg] file.png
|
||||||
|
exp transfer-function exponent (``gamma'') of the display
|
||||||
|
system in floating-point format (e.g., ``2.2''); equal
|
||||||
|
to the product of the lookup-table exponent (varies)
|
||||||
|
and the CRT exponent (usually 2.2); must be positive
|
||||||
|
bg desired background color in 7-character hex RGB format
|
||||||
|
(e.g., ``#ff7f00'' for orange: same as HTML colors);
|
||||||
|
used with transparent images
|
||||||
|
|
||||||
|
Press Q, Esc or mouse button 1 after image is displayed to quit.
|
||||||
|
|
||||||
|
|
||||||
|
rpng2-win 1.04 of 19 March 2000: Progressive PNG Viewer for Windows
|
||||||
|
Compiled with libpng 1.0.5; using libpng 1.0.5.
|
||||||
|
Compiled with zlib 1.1.3; using zlib 1.1.3.
|
||||||
|
|
||||||
|
Usage: rpng2-win [-gamma exp] [-bgcolor bg | -bgpat pat] [-timing] file.png
|
||||||
|
|
||||||
|
exp transfer-function exponent (``gamma'') of the display
|
||||||
|
system in floating-point format (e.g., ``2.2''); equal
|
||||||
|
to the product of the lookup-table exponent (varies)
|
||||||
|
and the CRT exponent (usually 2.2); must be positive
|
||||||
|
bg desired background color in 7-character hex RGB format
|
||||||
|
(e.g., ``#ff7f00'' for orange: same as HTML colors);
|
||||||
|
used with transparent images; overrides -bgpat
|
||||||
|
pat desired background pattern number (1-16); used with
|
||||||
|
transparent images; overrides -bgcolor
|
||||||
|
-timing enables delay for every block read, to simulate modem
|
||||||
|
download of image (~36 Kbps)
|
||||||
|
|
||||||
|
Press Q, Esc or mouse button 1 after image is displayed to quit.
|
||||||
|
|
||||||
|
|
||||||
|
The usage screen for the third (non-windowed) program, wpng, can be seen
|
||||||
|
simply by invoking it without any parameters (``wpng'').
|
||||||
|
|
||||||
|
Greg Roelofs
|
||||||
|
19 March 2000
|
||||||
104
contrib/gregbook/makefile
Normal file
104
contrib/gregbook/makefile
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
# Sample makefile for rpng-x / rpng2-x / wpng using gcc and make.
|
||||||
|
# Greg Roelofs
|
||||||
|
# Last modified: 28 February 2000
|
||||||
|
#
|
||||||
|
# The programs built by this makefile are described in the book,
|
||||||
|
# "PNG: The Definitive Guide," by Greg Roelofs (O'Reilly and
|
||||||
|
# Associates, 1999). Go buy a copy, eh? Buy some for friends
|
||||||
|
# and family, too. (Not that this is a blatant plug or anything.)
|
||||||
|
#
|
||||||
|
# Invoke this makefile from a shell prompt in the usual way; for example:
|
||||||
|
#
|
||||||
|
# make -f Makefile.unx
|
||||||
|
#
|
||||||
|
# This makefile assumes libpng and zlib have already been built or downloaded
|
||||||
|
# and are both installed in /usr/local/{include,lib} (as indicated by the
|
||||||
|
# PNG* and Z* macros below). Edit as appropriate--choose only ONE each of
|
||||||
|
# the PNGINC, PNGLIB, ZINC and ZLIB lines.
|
||||||
|
#
|
||||||
|
# This makefile builds statically linked executables (against libpng and zlib,
|
||||||
|
# that is), but that can be changed by uncommenting the appropriate PNGLIB and
|
||||||
|
# ZLIB lines.
|
||||||
|
|
||||||
|
|
||||||
|
# macros --------------------------------------------------------------------
|
||||||
|
|
||||||
|
PNGINC = -I/usr/local/include
|
||||||
|
#PNGLIB = -L/usr/local/lib -lpng # dynamically linked against libpng
|
||||||
|
PNGLIB = /usr/local/lib/libpng.a # statically linked against libpng
|
||||||
|
# or:
|
||||||
|
#PNGINC = -I../..
|
||||||
|
#PNGLIB = -L../.. -lpng
|
||||||
|
#PNGLIB = ../../libpng.a
|
||||||
|
|
||||||
|
ZINC = -I/usr/local/include
|
||||||
|
#ZLIB = -L/usr/local/lib -lz # dynamically linked against zlib
|
||||||
|
ZLIB = /usr/local/lib/libz.a # statically linked against zlib
|
||||||
|
#ZINC = -I../zlib
|
||||||
|
#ZLIB = -L../zlib -lz
|
||||||
|
#ZLIB = ../../../zlib/libz.a
|
||||||
|
|
||||||
|
XINC = -I/usr/include/X11 # old-style, stock X distributions
|
||||||
|
XLIB = -L/usr/lib/X11 -lX11
|
||||||
|
#XINC = -I/usr/openwin/include/X11 # Sun workstations (OpenWindows)
|
||||||
|
#XLIB = -L/usr/openwin/lib -lX11
|
||||||
|
#XINC = -I/usr/X11R6/include # new X distributions (XFree86, etc.)
|
||||||
|
#XLIB = -L/usr/X11R6/lib -lX11
|
||||||
|
|
||||||
|
INCS = $(PNGINC) $(ZINC) $(XINC)
|
||||||
|
RLIBS = $(PNGLIB) $(ZLIB) $(XLIB) -lm
|
||||||
|
WLIBS = $(PNGLIB) $(ZLIB)
|
||||||
|
|
||||||
|
CC = cc -n32
|
||||||
|
LD = cc -n32
|
||||||
|
RM = rm -f
|
||||||
|
CFLAGS = -O -fullwarn $(INCS)
|
||||||
|
# [note that -Wall is a gcc-specific compilation flag ("most warnings on")]
|
||||||
|
# [-ansi, -pedantic and -W can also be used]
|
||||||
|
LDFLAGS =
|
||||||
|
O = .o
|
||||||
|
E =
|
||||||
|
|
||||||
|
RPNG = rpng-x
|
||||||
|
RPNG2 = rpng2-x
|
||||||
|
WPNG = wpng
|
||||||
|
|
||||||
|
ROBJS = $(RPNG)$(O) readpng$(O)
|
||||||
|
ROBJS2 = $(RPNG2)$(O) readpng2$(O)
|
||||||
|
WOBJS = $(WPNG)$(O) writepng$(O)
|
||||||
|
|
||||||
|
EXES = $(RPNG)$(E) $(RPNG2)$(E) $(WPNG)$(E)
|
||||||
|
|
||||||
|
|
||||||
|
# implicit make rules -------------------------------------------------------
|
||||||
|
|
||||||
|
.c$(O):
|
||||||
|
$(CC) -c $(CFLAGS) $<
|
||||||
|
|
||||||
|
|
||||||
|
# dependencies --------------------------------------------------------------
|
||||||
|
|
||||||
|
all: $(EXES)
|
||||||
|
|
||||||
|
$(RPNG)$(E): $(ROBJS)
|
||||||
|
$(LD) $(LDFLAGS) -o $@ $(ROBJS) $(RLIBS)
|
||||||
|
|
||||||
|
$(RPNG2)$(E): $(ROBJS2)
|
||||||
|
$(LD) $(LDFLAGS) -o $@ $(ROBJS2) $(RLIBS)
|
||||||
|
|
||||||
|
$(WPNG)$(E): $(WOBJS)
|
||||||
|
$(LD) $(LDFLAGS) -o $@ $(WOBJS) $(WLIBS)
|
||||||
|
|
||||||
|
$(RPNG)$(O): $(RPNG).c readpng.h
|
||||||
|
$(RPNG2)$(O): $(RPNG2).c readpng2.h
|
||||||
|
$(WPNG)$(O): $(WPNG).c writepng.h
|
||||||
|
|
||||||
|
readpng$(O): readpng.c readpng.h
|
||||||
|
readpng2$(O): readpng2.c readpng2.h
|
||||||
|
writepng$(O): writepng.c writepng.h
|
||||||
|
|
||||||
|
|
||||||
|
# maintenance ---------------------------------------------------------------
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(RM) $(EXES) $(ROBJS) $(ROBJS2) $(WOBJS)
|
||||||
@@ -1,11 +1,22 @@
|
|||||||
$!------------------------------------------------------------------------------
|
$!------------------------------------------------------------------------------
|
||||||
$! make Contrib programs of libpng under OpenVMS
|
$! make "PNG: The Definitive Guide" demo programs (for X) under OpenVMS
|
||||||
|
$!
|
||||||
|
$! Script created by Martin Zinser for libpng; modified by Greg Roelofs
|
||||||
|
$! for standalone pngbook source distribution.
|
||||||
$!
|
$!
|
||||||
$!
|
$!
|
||||||
$! Look for the compiler used
|
$! Set locations where zlib and libpng sources live.
|
||||||
$!
|
$!
|
||||||
$ zlibsrc = "[---.zlib]"
|
$ zpath = "[-.zlib]"
|
||||||
$ ccopt="/include=(''zlibsrc',[--])"
|
$ pngpath = "[-.libpng]"
|
||||||
|
$!
|
||||||
|
$! USE THESE INSTEAD if building from libpng's [.contrib.gregbook] directory:
|
||||||
|
$! zpath = "[---.zlib]"
|
||||||
|
$! pngpath = "[--]"
|
||||||
|
$!
|
||||||
|
$! Look for the compiler used.
|
||||||
|
$!
|
||||||
|
$ ccopt="/include=(''zpath',''pngpath')"
|
||||||
$ if f$getsyi("HW_MODEL").ge.1024
|
$ if f$getsyi("HW_MODEL").ge.1024
|
||||||
$ then
|
$ then
|
||||||
$ ccopt = "/prefix=all"+ccopt
|
$ ccopt = "/prefix=all"+ccopt
|
||||||
@@ -29,13 +40,16 @@ $ comp = "__decc__=1"
|
|||||||
$ endif
|
$ endif
|
||||||
$ endif
|
$ endif
|
||||||
$ open/write lopt lib.opt
|
$ open/write lopt lib.opt
|
||||||
$ write lopt "[--]libpng.olb/lib"
|
$ write lopt "''pngpath'libpng.olb/lib"
|
||||||
$ write lopt "''zlibsrc'libz.olb/lib"
|
$ write lopt "''zpath'libz.olb/lib"
|
||||||
$ close lopt
|
$ close lopt
|
||||||
$ open/write xopt x11.opt
|
$ open/write xopt x11.opt
|
||||||
$ write xopt "sys$library:decw$xlibshr.exe/share"
|
$ write xopt "sys$library:decw$xlibshr.exe/share"
|
||||||
$ close xopt
|
$ close xopt
|
||||||
$ write sys$output "Compiling PNG contrib programs ..."
|
$!
|
||||||
|
$! Build 'em.
|
||||||
|
$!
|
||||||
|
$ write sys$output "Compiling PNG book programs ..."
|
||||||
$ CALL MAKE readpng.OBJ "cc ''CCOPT' readpng" -
|
$ CALL MAKE readpng.OBJ "cc ''CCOPT' readpng" -
|
||||||
readpng.c readpng.h
|
readpng.c readpng.h
|
||||||
$ CALL MAKE readpng2.OBJ "cc ''CCOPT' readpng2" -
|
$ CALL MAKE readpng2.OBJ "cc ''CCOPT' readpng2" -
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 1998-1999 Greg Roelofs. All rights reserved.
|
Copyright (c) 1998-2000 Greg Roelofs. All rights reserved.
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
This software is provided "as is," without warranty of any kind,
|
||||||
express or implied. In no event shall the author or contributors
|
express or implied. In no event shall the author or contributors
|
||||||
@@ -32,8 +32,13 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include "png.h" /* libpng header; includes zlib.h */
|
#include "png.h" /* libpng header; includes zlib.h */
|
||||||
#include "readpng.h" /* typedefs, common macros, public prototypes */
|
#include "readpng.h" /* typedefs, common macros, public prototypes */
|
||||||
|
|
||||||
|
/* future versions of libpng will provide this macro: */
|
||||||
|
#ifndef png_jmpbuf
|
||||||
|
# define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
static png_structp png_ptr = NULL;
|
static png_structp png_ptr = NULL;
|
||||||
@@ -44,7 +49,7 @@ int bit_depth, color_type;
|
|||||||
uch *image_data = NULL;
|
uch *image_data = NULL;
|
||||||
|
|
||||||
|
|
||||||
void readpng_version_info()
|
void readpng_version_info(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, " Compiled with libpng %s; using libpng %s.\n",
|
fprintf(stderr, " Compiled with libpng %s; using libpng %s.\n",
|
||||||
PNG_LIBPNG_VER_STRING, png_libpng_ver);
|
PNG_LIBPNG_VER_STRING, png_libpng_ver);
|
||||||
@@ -55,7 +60,7 @@ void readpng_version_info()
|
|||||||
|
|
||||||
/* return value = 0 for success, 1 for bad sig, 2 for bad IHDR, 4 for no mem */
|
/* return value = 0 for success, 1 for bad sig, 2 for bad IHDR, 4 for no mem */
|
||||||
|
|
||||||
int readpng_init(FILE *infile, long *pWidth, long *pHeight)
|
int readpng_init(FILE *infile, ulg *pWidth, ulg *pHeight)
|
||||||
{
|
{
|
||||||
uch sig[8];
|
uch sig[8];
|
||||||
|
|
||||||
@@ -89,7 +94,7 @@ int readpng_init(FILE *infile, long *pWidth, long *pHeight)
|
|||||||
/* setjmp() must be called in every function that calls a PNG-reading
|
/* setjmp() must be called in every function that calls a PNG-reading
|
||||||
* libpng function */
|
* libpng function */
|
||||||
|
|
||||||
if (setjmp(png_ptr->jmpbuf)) {
|
if (setjmp(png_jmpbuf(png_ptr))) {
|
||||||
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
|
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
@@ -130,7 +135,7 @@ int readpng_get_bgcolor(uch *red, uch *green, uch *blue)
|
|||||||
/* setjmp() must be called in every function that calls a PNG-reading
|
/* setjmp() must be called in every function that calls a PNG-reading
|
||||||
* libpng function */
|
* libpng function */
|
||||||
|
|
||||||
if (setjmp(png_ptr->jmpbuf)) {
|
if (setjmp(png_jmpbuf(png_ptr))) {
|
||||||
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
|
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
@@ -184,7 +189,7 @@ uch *readpng_get_image(double display_exponent, int *pChannels, ulg *pRowbytes)
|
|||||||
/* setjmp() must be called in every function that calls a PNG-reading
|
/* setjmp() must be called in every function that calls a PNG-reading
|
||||||
* libpng function */
|
* libpng function */
|
||||||
|
|
||||||
if (setjmp(png_ptr->jmpbuf)) {
|
if (setjmp(png_jmpbuf(png_ptr))) {
|
||||||
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
|
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 1998-1999 Greg Roelofs. All rights reserved.
|
Copyright (c) 1998-2000 Greg Roelofs. All rights reserved.
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
This software is provided "as is," without warranty of any kind,
|
||||||
express or implied. In no event shall the author or contributors
|
express or implied. In no event shall the author or contributors
|
||||||
@@ -54,7 +54,7 @@ typedef unsigned long ulg;
|
|||||||
|
|
||||||
void readpng_version_info(void);
|
void readpng_version_info(void);
|
||||||
|
|
||||||
int readpng_init(FILE *infile, long *pWidth, long *pHeight);
|
int readpng_init(FILE *infile, ulg *pWidth, ulg *pHeight);
|
||||||
|
|
||||||
int readpng_get_bgcolor(uch *bg_red, uch *bg_green, uch *bg_blue);
|
int readpng_get_bgcolor(uch *bg_red, uch *bg_green, uch *bg_blue);
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 1998-1999 Greg Roelofs. All rights reserved.
|
Copyright (c) 1998-2000 Greg Roelofs. All rights reserved.
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
This software is provided "as is," without warranty of any kind,
|
||||||
express or implied. In no event shall the author or contributors
|
express or implied. In no event shall the author or contributors
|
||||||
@@ -30,10 +30,10 @@
|
|||||||
---------------------------------------------------------------------------*/
|
---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
#include <stdlib.h> /* for exit() prototype */
|
#include <stdlib.h> /* for exit() prototype */
|
||||||
|
|
||||||
#include "png.h" /* libpng header; includes zlib.h and setjmp.h */
|
#include "png.h" /* libpng header; includes zlib.h and setjmp.h */
|
||||||
#include "readpng2.h" /* typedefs, common macros, public prototypes */
|
#include "readpng2.h" /* typedefs, common macros, public prototypes */
|
||||||
|
|
||||||
|
|
||||||
/* local prototypes */
|
/* local prototypes */
|
||||||
@@ -47,7 +47,7 @@ static void readpng2_error_handler(png_structp png_ptr, png_const_charp msg);
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void readpng2_version_info()
|
void readpng2_version_info(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, " Compiled with libpng %s; using libpng %s.\n",
|
fprintf(stderr, " Compiled with libpng %s; using libpng %s.\n",
|
||||||
PNG_LIBPNG_VER_STRING, png_libpng_ver);
|
PNG_LIBPNG_VER_STRING, png_libpng_ver);
|
||||||
@@ -70,7 +70,7 @@ int readpng2_check_sig(uch *sig, int num)
|
|||||||
|
|
||||||
int readpng2_init(mainprog_info *mainprog_ptr)
|
int readpng2_init(mainprog_info *mainprog_ptr)
|
||||||
{
|
{
|
||||||
png_structp png_ptr; /* note: temporary variables! */
|
png_structp png_ptr; /* note: temporary variables! */
|
||||||
png_infop info_ptr;
|
png_infop info_ptr;
|
||||||
|
|
||||||
|
|
||||||
@@ -176,7 +176,7 @@ static void readpng2_info_callback(png_structp png_ptr, png_infop info_ptr)
|
|||||||
|
|
||||||
mainprog_ptr = png_get_progressive_ptr(png_ptr);
|
mainprog_ptr = png_get_progressive_ptr(png_ptr);
|
||||||
|
|
||||||
if (mainprog_ptr == NULL) { /* we be hosed */
|
if (mainprog_ptr == NULL) { /* we be hosed */
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"readpng2 error: main struct not recoverable in info_callback.\n");
|
"readpng2 error: main struct not recoverable in info_callback.\n");
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
@@ -283,7 +283,7 @@ static void readpng2_info_callback(png_structp png_ptr, png_infop info_ptr)
|
|||||||
|
|
||||||
png_read_update_info(png_ptr, info_ptr);
|
png_read_update_info(png_ptr, info_ptr);
|
||||||
|
|
||||||
mainprog_ptr->rowbytes = png_get_rowbytes(png_ptr, info_ptr);
|
mainprog_ptr->rowbytes = (int)png_get_rowbytes(png_ptr, info_ptr);
|
||||||
mainprog_ptr->channels = png_get_channels(png_ptr, info_ptr);
|
mainprog_ptr->channels = png_get_channels(png_ptr, info_ptr);
|
||||||
|
|
||||||
|
|
||||||
@@ -323,6 +323,11 @@ static void readpng2_row_callback(png_structp png_ptr, png_bytep new_row,
|
|||||||
mainprog_ptr = png_get_progressive_ptr(png_ptr);
|
mainprog_ptr = png_get_progressive_ptr(png_ptr);
|
||||||
|
|
||||||
|
|
||||||
|
/* save the pass number for optional use by the front end */
|
||||||
|
|
||||||
|
mainprog_ptr->pass = pass;
|
||||||
|
|
||||||
|
|
||||||
/* have libpng either combine the new row data with the existing row data
|
/* have libpng either combine the new row data with the existing row data
|
||||||
* from previous passes (if interlaced) or else just copy the new row
|
* from previous passes (if interlaced) or else just copy the new row
|
||||||
* into the main program's image buffer */
|
* into the main program's image buffer */
|
||||||
@@ -408,7 +413,7 @@ static void readpng2_error_handler(png_structp png_ptr, png_const_charp msg)
|
|||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
|
|
||||||
mainprog_ptr = png_get_error_ptr(png_ptr);
|
mainprog_ptr = png_get_error_ptr(png_ptr);
|
||||||
if (mainprog_ptr == NULL) { /* we are completely hosed now */
|
if (mainprog_ptr == NULL) { /* we are completely hosed now */
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"readpng2 severe error: jmpbuf not recoverable; terminating.\n");
|
"readpng2 severe error: jmpbuf not recoverable; terminating.\n");
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 1998-1999 Greg Roelofs. All rights reserved.
|
Copyright (c) 1998-2000 Greg Roelofs. All rights reserved.
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
This software is provided "as is," without warranty of any kind,
|
||||||
express or implied. In no event shall the author or contributors
|
express or implied. In no event shall the author or contributors
|
||||||
@@ -61,7 +61,8 @@ typedef struct _mainprog_info {
|
|||||||
uch *image_data;
|
uch *image_data;
|
||||||
uch **row_pointers;
|
uch **row_pointers;
|
||||||
jmp_buf jmpbuf;
|
jmp_buf jmpbuf;
|
||||||
int passes; /* not used */
|
int passes; /* not used */
|
||||||
|
int pass;
|
||||||
int rowbytes;
|
int rowbytes;
|
||||||
int channels;
|
int channels;
|
||||||
int need_bgcolor;
|
int need_bgcolor;
|
||||||
|
|||||||
@@ -16,7 +16,16 @@
|
|||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 1998-1999 Greg Roelofs. All rights reserved.
|
Changelog:
|
||||||
|
- 1.00: initial public release
|
||||||
|
- 1.01: modified to allow abbreviated options; fixed long/ulong mis-
|
||||||
|
match; switched to png_jmpbuf() macro
|
||||||
|
- 1.02: added extra set of parentheses to png_jmpbuf() macro; fixed
|
||||||
|
command-line parsing bug
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Copyright (c) 1998-2000 Greg Roelofs. All rights reserved.
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
This software is provided "as is," without warranty of any kind,
|
||||||
express or implied. In no event shall the author or contributors
|
express or implied. In no event shall the author or contributors
|
||||||
@@ -43,7 +52,7 @@
|
|||||||
|
|
||||||
#define PROGNAME "rpng-win"
|
#define PROGNAME "rpng-win"
|
||||||
#define LONGNAME "Simple PNG Viewer for Windows"
|
#define LONGNAME "Simple PNG Viewer for Windows"
|
||||||
#define VERSION "1.0 of 20 February 1999"
|
#define VERSION "1.02 of 19 March 2000"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -53,7 +62,7 @@
|
|||||||
|
|
||||||
/* #define DEBUG : this enables the Trace() macros */
|
/* #define DEBUG : this enables the Trace() macros */
|
||||||
|
|
||||||
#include "readpng.h" /* typedefs, common macros, readpng prototypes */
|
#include "readpng.h" /* typedefs, common macros, readpng prototypes */
|
||||||
|
|
||||||
|
|
||||||
/* could just include png.h, but this macro is the only thing we need
|
/* could just include png.h, but this macro is the only thing we need
|
||||||
@@ -61,10 +70,10 @@
|
|||||||
* only happen with alpha (which could easily be avoided with
|
* only happen with alpha (which could easily be avoided with
|
||||||
* "ush acopy = (alpha);") */
|
* "ush acopy = (alpha);") */
|
||||||
|
|
||||||
#define alpha_composite(composite, fg, alpha, bg) { \
|
#define alpha_composite(composite, fg, alpha, bg) { \
|
||||||
ush temp = ((ush)(fg)*(ush)(alpha) + \
|
ush temp = ((ush)(fg)*(ush)(alpha) + \
|
||||||
(ush)(bg)*(ush)(255 - (ush)(alpha)) + (ush)128); \
|
(ush)(bg)*(ush)(255 - (ush)(alpha)) + (ush)128); \
|
||||||
(composite) = (uch)((temp + (temp >> 8)) >> 8); \
|
(composite) = (uch)((temp + (temp >> 8)) >> 8); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -78,7 +87,7 @@ LRESULT CALLBACK rpng_win_wndproc(HWND, UINT, WPARAM, LPARAM);
|
|||||||
static char titlebar[1024], *window_name = titlebar;
|
static char titlebar[1024], *window_name = titlebar;
|
||||||
static char *progname = PROGNAME;
|
static char *progname = PROGNAME;
|
||||||
static char *appname = LONGNAME;
|
static char *appname = LONGNAME;
|
||||||
static char *icon_name = PROGNAME; /* GRR: not (yet) used */
|
static char *icon_name = PROGNAME; /* GRR: not (yet) used */
|
||||||
static char *filename;
|
static char *filename;
|
||||||
static FILE *infile;
|
static FILE *infile;
|
||||||
|
|
||||||
@@ -104,15 +113,15 @@ static HWND global_hwnd;
|
|||||||
|
|
||||||
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
|
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
|
||||||
{
|
{
|
||||||
char *args[1024]; /* arbitrary limit, but should suffice */
|
char *args[1024]; /* arbitrary limit, but should suffice */
|
||||||
char *p, *q, **argv = args;
|
char *p, *q, **argv = args;
|
||||||
int argc = 0;
|
int argc = 0;
|
||||||
int rc, alen, flen;
|
int rc, alen, flen;
|
||||||
int error = 0;
|
int error = 0;
|
||||||
int have_bg = FALSE;
|
int have_bg = FALSE;
|
||||||
double LUT_exponent; /* just the lookup table */
|
double LUT_exponent; /* just the lookup table */
|
||||||
double CRT_exponent = 2.2; /* just the monitor */
|
double CRT_exponent = 2.2; /* just the monitor */
|
||||||
double default_display_exponent; /* whole display system */
|
double default_display_exponent; /* whole display system */
|
||||||
MSG msg;
|
MSG msg;
|
||||||
|
|
||||||
|
|
||||||
@@ -199,20 +208,24 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
|
|||||||
/* Now parse the command line for options and the PNG filename. */
|
/* Now parse the command line for options and the PNG filename. */
|
||||||
|
|
||||||
while (*++argv && !error) {
|
while (*++argv && !error) {
|
||||||
if (!strcmp(*argv, "-gamma")) {
|
if (!strncmp(*argv, "-gamma", 2)) {
|
||||||
if (!*++argv)
|
if (!*++argv)
|
||||||
++error;
|
++error;
|
||||||
display_exponent = atof(*argv);
|
else {
|
||||||
if (display_exponent <= 0.0)
|
display_exponent = atof(*argv);
|
||||||
++error;
|
if (display_exponent <= 0.0)
|
||||||
} else if (!strcmp(*argv, "-bgcolor")) {
|
++error;
|
||||||
|
}
|
||||||
|
} else if (!strncmp(*argv, "-bgcolor", 2)) {
|
||||||
if (!*++argv)
|
if (!*++argv)
|
||||||
++error;
|
++error;
|
||||||
bgstr = *argv;
|
else {
|
||||||
if (strlen(bgstr) != 7 || bgstr[0] != '#')
|
bgstr = *argv;
|
||||||
++error;
|
if (strlen(bgstr) != 7 || bgstr[0] != '#')
|
||||||
else
|
++error;
|
||||||
have_bg = TRUE;
|
else
|
||||||
|
have_bg = TRUE;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (**argv != '-') {
|
if (**argv != '-') {
|
||||||
filename = *argv;
|
filename = *argv;
|
||||||
@@ -255,6 +268,9 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
|
|||||||
fclose(infile);
|
fclose(infile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* usage screen */
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
fprintf(stderr, "\n%s %s: %s\n", PROGNAME, VERSION, appname);
|
fprintf(stderr, "\n%s %s: %s\n", PROGNAME, VERSION, appname);
|
||||||
readpng_version_info();
|
readpng_version_info();
|
||||||
@@ -265,7 +281,7 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
|
|||||||
"\t\t to the product of the lookup-table exponent (varies)\n"
|
"\t\t to the product of the lookup-table exponent (varies)\n"
|
||||||
"\t\t and the CRT exponent (usually 2.2); must be positive\n"
|
"\t\t and the CRT exponent (usually 2.2); must be positive\n"
|
||||||
" bg \tdesired background color in 7-character hex RGB format\n"
|
" bg \tdesired background color in 7-character hex RGB format\n"
|
||||||
"\t\t (e.g., ``#ff7f00'' for orange: same as HTML colors);\n"
|
"\t\t (e.g., ``#ff7700'' for orange: same as HTML colors);\n"
|
||||||
"\t\t used with transparent images\n"
|
"\t\t used with transparent images\n"
|
||||||
"\nPress Q, Esc or mouse button 1 after image is displayed to quit.\n"
|
"\nPress Q, Esc or mouse button 1 after image is displayed to quit.\n"
|
||||||
"\n", PROGNAME, default_display_exponent);
|
"\n", PROGNAME, default_display_exponent);
|
||||||
@@ -336,6 +352,10 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
|
|||||||
|
|
||||||
/* wait for the user to tell us when to quit */
|
/* wait for the user to tell us when to quit */
|
||||||
|
|
||||||
|
printf(
|
||||||
|
"Done. Press Q, Esc or mouse button 1 (within image window) to quit.\n");
|
||||||
|
fflush(stdout);
|
||||||
|
|
||||||
while (GetMessage(&msg, NULL, 0, 0)) {
|
while (GetMessage(&msg, NULL, 0, 0)) {
|
||||||
TranslateMessage(&msg);
|
TranslateMessage(&msg);
|
||||||
DispatchMessage(&msg);
|
DispatchMessage(&msg);
|
||||||
@@ -371,7 +391,7 @@ static int rpng_win_create_window(HINSTANCE hInst, int showmode)
|
|||||||
if (!(dib = (uch *)malloc(sizeof(BITMAPINFOHEADER) +
|
if (!(dib = (uch *)malloc(sizeof(BITMAPINFOHEADER) +
|
||||||
wimage_rowbytes*image_height)))
|
wimage_rowbytes*image_height)))
|
||||||
{
|
{
|
||||||
return 4; /* fail */
|
return 4; /* fail */
|
||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------
|
/*---------------------------------------------------------------------------
|
||||||
@@ -477,7 +497,7 @@ static int rpng_win_display_image()
|
|||||||
g = *src++;
|
g = *src++;
|
||||||
b = *src++;
|
b = *src++;
|
||||||
*dest++ = b;
|
*dest++ = b;
|
||||||
*dest++ = g; /* note reverse order */
|
*dest++ = g; /* note reverse order */
|
||||||
*dest++ = r;
|
*dest++ = r;
|
||||||
}
|
}
|
||||||
} else /* if (image_channels == 4) */ {
|
} else /* if (image_channels == 4) */ {
|
||||||
@@ -582,15 +602,15 @@ LRESULT CALLBACK rpng_win_wndproc(HWND hwnd, UINT iMsg, WPARAM wP, LPARAM lP)
|
|||||||
|
|
||||||
/* wait for the user to tell us when to quit */
|
/* wait for the user to tell us when to quit */
|
||||||
case WM_CHAR:
|
case WM_CHAR:
|
||||||
switch (wP) { /* only need one, so ignore repeat count */
|
switch (wP) { /* only need one, so ignore repeat count */
|
||||||
case 'q':
|
case 'q':
|
||||||
case 'Q':
|
case 'Q':
|
||||||
case 0x1B: /* Esc key */
|
case 0x1B: /* Esc key */
|
||||||
PostQuitMessage(0);
|
PostQuitMessage(0);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case WM_LBUTTONDOWN: /* another way of quitting */
|
case WM_LBUTTONDOWN: /* another way of quitting */
|
||||||
case WM_DESTROY:
|
case WM_DESTROY:
|
||||||
PostQuitMessage(0);
|
PostQuitMessage(0);
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
BIN
contrib/gregbook/rpng-x
Executable file
BIN
contrib/gregbook/rpng-x
Executable file
Binary file not shown.
@@ -5,8 +5,8 @@
|
|||||||
This program decodes and displays PNG images, with gamma correction and
|
This program decodes and displays PNG images, with gamma correction and
|
||||||
optionally with a user-specified background color (in case the image has
|
optionally with a user-specified background color (in case the image has
|
||||||
transparency). It is very nearly the most basic PNG viewer possible.
|
transparency). It is very nearly the most basic PNG viewer possible.
|
||||||
This version is for the X Window System (tested under Unix, but may work
|
This version is for the X Window System (tested by author under Unix and
|
||||||
under VMS or OS/2 with a little tweaking).
|
by Martin Zinser under OpenVMS; may work under OS/2 with some tweaking).
|
||||||
|
|
||||||
to do:
|
to do:
|
||||||
- 8-bit support
|
- 8-bit support
|
||||||
@@ -14,7 +14,17 @@
|
|||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 1998-1999 Greg Roelofs. All rights reserved.
|
Changelog:
|
||||||
|
- 1.01: initial public release
|
||||||
|
- 1.02: modified to allow abbreviated options; fixed long/ulong mis-
|
||||||
|
match; switched to png_jmpbuf() macro
|
||||||
|
- 1.10: added support for non-default visuals; fixed X pixel-conversion
|
||||||
|
- 1.11: added extra set of parentheses to png_jmpbuf() macro; fixed
|
||||||
|
command-line parsing bug
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Copyright (c) 1998-2000 Greg Roelofs. All rights reserved.
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
This software is provided "as is," without warranty of any kind,
|
||||||
express or implied. In no event shall the author or contributors
|
express or implied. In no event shall the author or contributors
|
||||||
@@ -41,7 +51,7 @@
|
|||||||
|
|
||||||
#define PROGNAME "rpng-x"
|
#define PROGNAME "rpng-x"
|
||||||
#define LONGNAME "Simple PNG Viewer for X"
|
#define LONGNAME "Simple PNG Viewer for X"
|
||||||
#define VERSION "1.01 of 31 March 1999"
|
#define VERSION "1.11 of 19 March 2000"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -54,7 +64,7 @@
|
|||||||
|
|
||||||
/* #define DEBUG : this enables the Trace() macros */
|
/* #define DEBUG : this enables the Trace() macros */
|
||||||
|
|
||||||
#include "readpng.h" /* typedefs, common macros, readpng prototypes */
|
#include "readpng.h" /* typedefs, common macros, readpng prototypes */
|
||||||
|
|
||||||
|
|
||||||
/* could just include png.h, but this macro is the only thing we need
|
/* could just include png.h, but this macro is the only thing we need
|
||||||
@@ -95,15 +105,16 @@ static uch *image_data;
|
|||||||
static char *displayname;
|
static char *displayname;
|
||||||
static XImage *ximage;
|
static XImage *ximage;
|
||||||
static Display *display;
|
static Display *display;
|
||||||
static int bitmap_order;
|
|
||||||
static int depth;
|
static int depth;
|
||||||
static Visual *visual;
|
static Visual *visual;
|
||||||
static int RPixelShift, GPixelShift, BPixelShift;
|
static XVisualInfo *visual_list;
|
||||||
static ulg RedMask, GreenMask, BlueMask;
|
static int RShift, GShift, BShift;
|
||||||
|
static ulg RMask, GMask, BMask;
|
||||||
static Window window;
|
static Window window;
|
||||||
static GC gc;
|
static GC gc;
|
||||||
static Colormap colormap;
|
static Colormap colormap;
|
||||||
|
|
||||||
|
static int have_nondefault_visual = FALSE;
|
||||||
static int have_colormap = FALSE;
|
static int have_colormap = FALSE;
|
||||||
static int have_window = FALSE;
|
static int have_window = FALSE;
|
||||||
/*
|
/*
|
||||||
@@ -123,9 +134,9 @@ int main(int argc, char **argv)
|
|||||||
int rc, alen, flen;
|
int rc, alen, flen;
|
||||||
int error = 0;
|
int error = 0;
|
||||||
int have_bg = FALSE;
|
int have_bg = FALSE;
|
||||||
double LUT_exponent; /* just the lookup table */
|
double LUT_exponent; /* just the lookup table */
|
||||||
double CRT_exponent = 2.2; /* just the monitor */
|
double CRT_exponent = 2.2; /* just the monitor */
|
||||||
double default_display_exponent; /* whole display system */
|
double default_display_exponent; /* whole display system */
|
||||||
XEvent e;
|
XEvent e;
|
||||||
KeySym k;
|
KeySym k;
|
||||||
|
|
||||||
@@ -188,24 +199,29 @@ int main(int argc, char **argv)
|
|||||||
/* Now parse the command line for options and the PNG filename. */
|
/* Now parse the command line for options and the PNG filename. */
|
||||||
|
|
||||||
while (*++argv && !error) {
|
while (*++argv && !error) {
|
||||||
if (!strcmp(*argv, "-display")) {
|
if (!strncmp(*argv, "-display", 2)) {
|
||||||
if (!*++argv)
|
if (!*++argv)
|
||||||
++error;
|
++error;
|
||||||
displayname = *argv;
|
|
||||||
} else if (!strcmp(*argv, "-gamma")) {
|
|
||||||
if (!*++argv)
|
|
||||||
++error;
|
|
||||||
display_exponent = atof(*argv);
|
|
||||||
if (display_exponent <= 0.0)
|
|
||||||
++error;
|
|
||||||
} else if (!strcmp(*argv, "-bgcolor")) {
|
|
||||||
if (!*++argv)
|
|
||||||
++error;
|
|
||||||
bgstr = *argv;
|
|
||||||
if (strlen(bgstr) != 7 || bgstr[0] != '#')
|
|
||||||
++error;
|
|
||||||
else
|
else
|
||||||
have_bg = TRUE;
|
displayname = *argv;
|
||||||
|
} else if (!strncmp(*argv, "-gamma", 2)) {
|
||||||
|
if (!*++argv)
|
||||||
|
++error;
|
||||||
|
else {
|
||||||
|
display_exponent = atof(*argv);
|
||||||
|
if (display_exponent <= 0.0)
|
||||||
|
++error;
|
||||||
|
}
|
||||||
|
} else if (!strncmp(*argv, "-bgcolor", 2)) {
|
||||||
|
if (!*++argv)
|
||||||
|
++error;
|
||||||
|
else {
|
||||||
|
bgstr = *argv;
|
||||||
|
if (strlen(bgstr) != 7 || bgstr[0] != '#')
|
||||||
|
++error;
|
||||||
|
else
|
||||||
|
have_bg = TRUE;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (**argv != '-') {
|
if (**argv != '-') {
|
||||||
filename = *argv;
|
filename = *argv;
|
||||||
@@ -222,8 +238,7 @@ int main(int argc, char **argv)
|
|||||||
fprintf(stderr, PROGNAME ": can't open PNG file [%s]\n", filename);
|
fprintf(stderr, PROGNAME ": can't open PNG file [%s]\n", filename);
|
||||||
++error;
|
++error;
|
||||||
} else {
|
} else {
|
||||||
if ((rc = readpng_init(infile, (long *)(&image_width),
|
if ((rc = readpng_init(infile, &image_width, &image_height)) != 0) {
|
||||||
(long *)(&image_height))) != 0) {
|
|
||||||
switch (rc) {
|
switch (rc) {
|
||||||
case 1:
|
case 1:
|
||||||
fprintf(stderr, PROGNAME
|
fprintf(stderr, PROGNAME
|
||||||
@@ -257,21 +272,25 @@ int main(int argc, char **argv)
|
|||||||
fclose(infile);
|
fclose(infile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* usage screen */
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
fprintf(stderr, "\n%s %s: %s\n", PROGNAME, VERSION, appname);
|
fprintf(stderr, "\n%s %s: %s\n", PROGNAME, VERSION, appname);
|
||||||
readpng_version_info();
|
readpng_version_info();
|
||||||
fprintf(stderr, "\n"
|
fprintf(stderr, "\n"
|
||||||
"Usage: %s [-display xdpy] [-gamma exp] [-bgcolor bg] file.png\n"
|
"Usage: %s [-display xdpy] [-gamma exp] [-bgcolor bg] file.png\n"
|
||||||
" xdpy\tname of the target X display (e.g., ``hostname:0'')\n"
|
" xdpy\tname of the target X display (e.g., ``hostname:0'')\n"
|
||||||
" exp \ttransfer-function exponent (``gamma'') of the display\n"
|
" exp \ttransfer-function exponent (``gamma'') of the display\n"
|
||||||
"\t\t system in floating-point format (e.g., ``%.1f''); equal\n"
|
"\t\t system in floating-point format (e.g., ``%.1f''); equal\n"
|
||||||
"\t\t to the product of the lookup-table exponent (varies)\n"
|
"\t\t to the product of the lookup-table exponent (varies)\n"
|
||||||
"\t\t and the CRT exponent (usually 2.2); must be positive\n"
|
"\t\t and the CRT exponent (usually 2.2); must be positive\n"
|
||||||
" bg \tdesired background color in 7-character hex RGB format\n"
|
" bg \tdesired background color in 7-character hex RGB format\n"
|
||||||
"\t\t (e.g., ``#ff7f00'' for orange: same as HTML colors);\n"
|
"\t\t (e.g., ``#ff7700'' for orange: same as HTML colors);\n"
|
||||||
"\t\t used with transparent images\n"
|
"\t\t used with transparent images\n"
|
||||||
"\nPress Q, Esc or mouse button 1 after image is displayed to quit.\n"
|
"\nPress Q, Esc or mouse button 1 (within image window, after image\n"
|
||||||
"\n", PROGNAME, default_display_exponent);
|
"is displayed) to quit.\n"
|
||||||
|
"\n", PROGNAME, default_display_exponent);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -344,6 +363,10 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
/* wait for the user to tell us when to quit */
|
/* wait for the user to tell us when to quit */
|
||||||
|
|
||||||
|
printf(
|
||||||
|
"Done. Press Q, Esc or mouse button 1 (within image window) to quit.\n");
|
||||||
|
fflush(stdout);
|
||||||
|
|
||||||
do
|
do
|
||||||
XNextEvent(display, &e);
|
XNextEvent(display, &e);
|
||||||
while (!(e.type == ButtonPress && e.xbutton.button == Button1) &&
|
while (!(e.type == ButtonPress && e.xbutton.button == Button1) &&
|
||||||
@@ -362,11 +385,13 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int rpng_x_create_window()
|
static int rpng_x_create_window(void)
|
||||||
{
|
{
|
||||||
uch *xdata;
|
uch *xdata;
|
||||||
|
int need_colormap = FALSE;
|
||||||
int screen, pad;
|
int screen, pad;
|
||||||
ulg bg_pixel = 0L;
|
ulg bg_pixel = 0L;
|
||||||
|
ulg attrmask;
|
||||||
Window root;
|
Window root;
|
||||||
XEvent e;
|
XEvent e;
|
||||||
XGCValues gcvalues;
|
XGCValues gcvalues;
|
||||||
@@ -378,11 +403,15 @@ static int rpng_x_create_window()
|
|||||||
XWMHints *wm_hints;
|
XWMHints *wm_hints;
|
||||||
|
|
||||||
|
|
||||||
bitmap_order = BitmapBitOrder(display);
|
|
||||||
screen = DefaultScreen(display);
|
screen = DefaultScreen(display);
|
||||||
depth = DisplayPlanes(display, screen);
|
depth = DisplayPlanes(display, screen);
|
||||||
root = RootWindow(display, screen);
|
root = RootWindow(display, screen);
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
XSynchronize(display, True);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if 0
|
||||||
/* GRR: add 8-bit support */
|
/* GRR: add 8-bit support */
|
||||||
if (/* depth != 8 && */ depth != 16 && depth != 24 && depth != 32) {
|
if (/* depth != 8 && */ depth != 16 && depth != 24 && depth != 32) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
@@ -394,27 +423,73 @@ static int rpng_x_create_window()
|
|||||||
XMatchVisualInfo(display, screen, depth,
|
XMatchVisualInfo(display, screen, depth,
|
||||||
(depth == 8)? PseudoColor : TrueColor, &visual_info);
|
(depth == 8)? PseudoColor : TrueColor, &visual_info);
|
||||||
visual = visual_info.visual;
|
visual = visual_info.visual;
|
||||||
|
#else
|
||||||
|
if (depth != 16 && depth != 24 && depth != 32) {
|
||||||
|
int visuals_matched = 0;
|
||||||
|
|
||||||
RedMask = visual->red_mask;
|
Trace((stderr, "default depth is %d: checking other visuals\n",
|
||||||
GreenMask = visual->green_mask;
|
depth))
|
||||||
BlueMask = visual->blue_mask;
|
|
||||||
|
/* 24-bit first */
|
||||||
|
visual_info.screen = screen;
|
||||||
|
visual_info.depth = 24;
|
||||||
|
visual_list = XGetVisualInfo(display,
|
||||||
|
VisualScreenMask | VisualDepthMask, &visual_info, &visuals_matched);
|
||||||
|
if (visuals_matched == 0) {
|
||||||
|
/* GRR: add 15-, 16- and 32-bit TrueColor visuals (also DirectColor?) */
|
||||||
|
fprintf(stderr, "default screen depth %d not supported, and no"
|
||||||
|
" 24-bit visuals found\n", depth);
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
Trace((stderr, "XGetVisualInfo() returned %d 24-bit visuals\n",
|
||||||
|
visuals_matched))
|
||||||
|
visual = visual_list[0].visual;
|
||||||
|
depth = visual_list[0].depth;
|
||||||
|
/*
|
||||||
|
colormap_size = visual_list[0].colormap_size;
|
||||||
|
visual_class = visual->class;
|
||||||
|
visualID = XVisualIDFromVisual(visual);
|
||||||
|
*/
|
||||||
|
have_nondefault_visual = TRUE;
|
||||||
|
need_colormap = TRUE;
|
||||||
|
} else {
|
||||||
|
XMatchVisualInfo(display, screen, depth, TrueColor, &visual_info);
|
||||||
|
visual = visual_info.visual;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
RMask = visual->red_mask;
|
||||||
|
GMask = visual->green_mask;
|
||||||
|
BMask = visual->blue_mask;
|
||||||
|
|
||||||
/* GRR: add/check 8-bit support */
|
/* GRR: add/check 8-bit support */
|
||||||
if (depth == 8) {
|
if (depth == 8 || need_colormap) {
|
||||||
colormap = XCreateColormap(display, root, visual, AllocNone);
|
colormap = XCreateColormap(display, root, visual, AllocNone);
|
||||||
if (!colormap) {
|
if (!colormap) {
|
||||||
fprintf(stderr, "XCreateColormap() failed\n");
|
fprintf(stderr, "XCreateColormap() failed\n");
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
have_colormap = TRUE;
|
have_colormap = TRUE;
|
||||||
} else if (depth == 16) {
|
}
|
||||||
RPixelShift = 15 - rpng_x_msb(RedMask); /* these are right-shifts */
|
if (depth == 15 || depth == 16) {
|
||||||
GPixelShift = 15 - rpng_x_msb(GreenMask);
|
RShift = 15 - rpng_x_msb(RMask); /* these are right-shifts */
|
||||||
BPixelShift = 15 - rpng_x_msb(BlueMask);
|
GShift = 15 - rpng_x_msb(GMask);
|
||||||
} else /* if (depth > 16) */ {
|
BShift = 15 - rpng_x_msb(BMask);
|
||||||
RPixelShift = rpng_x_msb(RedMask) - 7; /* these are left-shifts */
|
} else if (depth > 16) {
|
||||||
GPixelShift = rpng_x_msb(GreenMask) - 7;
|
#define NO_24BIT_MASKS
|
||||||
BPixelShift = rpng_x_msb(BlueMask) - 7;
|
#ifdef NO_24BIT_MASKS
|
||||||
|
RShift = rpng_x_msb(RMask) - 7; /* these are left-shifts */
|
||||||
|
GShift = rpng_x_msb(GMask) - 7;
|
||||||
|
BShift = rpng_x_msb(BMask) - 7;
|
||||||
|
#else
|
||||||
|
RShift = 7 - rpng_x_msb(RMask); /* these are right-shifts, too */
|
||||||
|
GShift = 7 - rpng_x_msb(GMask);
|
||||||
|
BShift = 7 - rpng_x_msb(BMask);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
if (depth >= 15 && (RShift < 0 || GShift < 0 || BShift < 0)) {
|
||||||
|
fprintf(stderr, "rpng internal logic error: negative X shift(s)!\n");
|
||||||
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------
|
/*---------------------------------------------------------------------------
|
||||||
@@ -423,9 +498,16 @@ static int rpng_x_create_window()
|
|||||||
|
|
||||||
attr.backing_store = Always;
|
attr.backing_store = Always;
|
||||||
attr.event_mask = ExposureMask | KeyPressMask | ButtonPressMask;
|
attr.event_mask = ExposureMask | KeyPressMask | ButtonPressMask;
|
||||||
|
attrmask = CWBackingStore | CWEventMask;
|
||||||
|
if (have_nondefault_visual) {
|
||||||
|
attr.colormap = colormap;
|
||||||
|
attr.background_pixel = 0;
|
||||||
|
attr.border_pixel = 1;
|
||||||
|
attrmask |= CWColormap | CWBackPixel | CWBorderPixel;
|
||||||
|
}
|
||||||
|
|
||||||
window = XCreateWindow(display, root, 0, 0, image_width, image_height,
|
window = XCreateWindow(display, root, 0, 0, image_width, image_height, 0,
|
||||||
0, depth, InputOutput, visual, CWBackingStore | CWEventMask, &attr);
|
depth, InputOutput, visual, attrmask, &attr);
|
||||||
|
|
||||||
if (window == None) {
|
if (window == None) {
|
||||||
fprintf(stderr, "XCreateWindow() failed\n");
|
fprintf(stderr, "XCreateWindow() failed\n");
|
||||||
@@ -446,8 +528,8 @@ static int rpng_x_create_window()
|
|||||||
if ((size_hints = XAllocSizeHints()) != NULL) {
|
if ((size_hints = XAllocSizeHints()) != NULL) {
|
||||||
/* window will not be resizable */
|
/* window will not be resizable */
|
||||||
size_hints->flags = PMinSize | PMaxSize;
|
size_hints->flags = PMinSize | PMaxSize;
|
||||||
size_hints->min_width = size_hints->max_width = image_width;
|
size_hints->min_width = size_hints->max_width = (int)image_width;
|
||||||
size_hints->min_height = size_hints->max_height = image_height;
|
size_hints->min_height = size_hints->max_height = (int)image_height;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((wm_hints = XAllocWMHints()) != NULL) {
|
if ((wm_hints = XAllocWMHints()) != NULL) {
|
||||||
@@ -469,13 +551,13 @@ static int rpng_x_create_window()
|
|||||||
---------------------------------------------------------------------------*/
|
---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
if (depth == 24 || depth == 32) {
|
if (depth == 24 || depth == 32) {
|
||||||
bg_pixel = ((ulg)bg_red << RPixelShift) |
|
bg_pixel = ((ulg)bg_red << RShift) |
|
||||||
((ulg)bg_green << GPixelShift) |
|
((ulg)bg_green << GShift) |
|
||||||
((ulg)bg_blue << BPixelShift);
|
((ulg)bg_blue << BShift);
|
||||||
} else if (depth == 16) {
|
} else if (depth == 16) {
|
||||||
bg_pixel = ((((ulg)bg_red << 8) >> RPixelShift) & RedMask) |
|
bg_pixel = ((((ulg)bg_red << 8) >> RShift) & RMask) |
|
||||||
((((ulg)bg_green << 8) >> GPixelShift) & GreenMask) |
|
((((ulg)bg_green << 8) >> GShift) & GMask) |
|
||||||
((((ulg)bg_blue << 8) >> BPixelShift) & BlueMask);
|
((((ulg)bg_blue << 8) >> BShift) & BMask);
|
||||||
} else /* depth == 8 */ {
|
} else /* depth == 8 */ {
|
||||||
|
|
||||||
/* GRR: add 8-bit support */
|
/* GRR: add 8-bit support */
|
||||||
@@ -524,7 +606,7 @@ static int rpng_x_create_window()
|
|||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* to avoid testing the bitmap_order every pixel (or doubling the size of
|
/* to avoid testing the byte order every pixel (or doubling the size of
|
||||||
* the drawing routine with a giant if-test), we arbitrarily set the byte
|
* the drawing routine with a giant if-test), we arbitrarily set the byte
|
||||||
* order to MSBFirst and let Xlib worry about inverting things on little-
|
* order to MSBFirst and let Xlib worry about inverting things on little-
|
||||||
* endian machines (like Linux/x86, old VAXen, etc.)--this is not the most
|
* endian machines (like Linux/x86, old VAXen, etc.)--this is not the most
|
||||||
@@ -541,20 +623,24 @@ static int rpng_x_create_window()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int rpng_x_display_image()
|
static int rpng_x_display_image(void)
|
||||||
{
|
{
|
||||||
uch *src;
|
uch *src;
|
||||||
char *dest;
|
char *dest;
|
||||||
uch r, g, b, a;
|
uch r, g, b, a;
|
||||||
int ximage_rowbytes = ximage->bytes_per_line;
|
|
||||||
ulg i, row, lastrow = 0;
|
ulg i, row, lastrow = 0;
|
||||||
ulg pixel;
|
ulg pixel;
|
||||||
|
int ximage_rowbytes = ximage->bytes_per_line;
|
||||||
|
/* int bpp = ximage->bits_per_pixel; */
|
||||||
|
|
||||||
|
|
||||||
Trace((stderr, "beginning display loop (image_channels == %d)\n",
|
Trace((stderr, "beginning display loop (image_channels == %d)\n",
|
||||||
image_channels))
|
image_channels))
|
||||||
Trace((stderr, "(width = %ld, rowbytes = %ld, ximage_rowbytes = %d)\n",
|
Trace((stderr, " (width = %ld, rowbytes = %ld, ximage_rowbytes = %d)\n",
|
||||||
image_width, image_rowbytes, ximage_rowbytes))
|
image_width, image_rowbytes, ximage_rowbytes))
|
||||||
|
Trace((stderr, " (bpp = %d)\n", ximage->bits_per_pixel))
|
||||||
|
Trace((stderr, " (byte_order = %s)\n", ximage->byte_order == MSBFirst?
|
||||||
|
"MSBFirst" : (ximage->byte_order == LSBFirst? "LSBFirst" : "unknown")))
|
||||||
|
|
||||||
if (depth == 24 || depth == 32) {
|
if (depth == 24 || depth == 32) {
|
||||||
ulg red, green, blue;
|
ulg red, green, blue;
|
||||||
@@ -567,14 +653,27 @@ static int rpng_x_display_image()
|
|||||||
red = *src++;
|
red = *src++;
|
||||||
green = *src++;
|
green = *src++;
|
||||||
blue = *src++;
|
blue = *src++;
|
||||||
pixel = (red << RPixelShift) |
|
#ifdef NO_24BIT_MASKS
|
||||||
(green << GPixelShift) |
|
pixel = (red << RShift) |
|
||||||
(blue << BPixelShift);
|
(green << GShift) |
|
||||||
|
(blue << BShift);
|
||||||
/* recall that we set ximage->byte_order = MSBFirst above */
|
/* recall that we set ximage->byte_order = MSBFirst above */
|
||||||
*dest++ = ((uch *)&pixel)[3];
|
/* GRR BUG: this assumes bpp == 32, but may be 24: */
|
||||||
*dest++ = ((uch *)&pixel)[2];
|
*dest++ = (char)((pixel >> 24) & 0xff);
|
||||||
*dest++ = ((uch *)&pixel)[1];
|
*dest++ = (char)((pixel >> 16) & 0xff);
|
||||||
*dest++ = ((uch *)&pixel)[0];
|
*dest++ = (char)((pixel >> 8) & 0xff);
|
||||||
|
*dest++ = (char)( pixel & 0xff);
|
||||||
|
#else
|
||||||
|
red = (RShift < 0)? red << (-RShift) : red >> RShift;
|
||||||
|
green = (GShift < 0)? green << (-GShift) : green >> GShift;
|
||||||
|
blue = (BShift < 0)? blue << (-BShift) : blue >> BShift;
|
||||||
|
pixel = (red & RMask) | (green & GMask) | (blue & BMask);
|
||||||
|
/* recall that we set ximage->byte_order = MSBFirst above */
|
||||||
|
*dest++ = (char)((pixel >> 24) & 0xff);
|
||||||
|
*dest++ = (char)((pixel >> 16) & 0xff);
|
||||||
|
*dest++ = (char)((pixel >> 8) & 0xff);
|
||||||
|
*dest++ = (char)( pixel & 0xff);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
} else /* if (image_channels == 4) */ {
|
} else /* if (image_channels == 4) */ {
|
||||||
for (i = image_width; i > 0; --i) {
|
for (i = image_width; i > 0; --i) {
|
||||||
@@ -598,20 +697,20 @@ static int rpng_x_display_image()
|
|||||||
alpha_composite(green, g, a, bg_green);
|
alpha_composite(green, g, a, bg_green);
|
||||||
alpha_composite(blue, b, a, bg_blue);
|
alpha_composite(blue, b, a, bg_blue);
|
||||||
}
|
}
|
||||||
pixel = (red << RPixelShift) |
|
pixel = (red << RShift) |
|
||||||
(green << GPixelShift) |
|
(green << GShift) |
|
||||||
(blue << BPixelShift);
|
(blue << BShift);
|
||||||
/* recall that we set ximage->byte_order = MSBFirst above */
|
/* recall that we set ximage->byte_order = MSBFirst above */
|
||||||
*dest++ = ((uch *)&pixel)[3];
|
*dest++ = (char)((pixel >> 24) & 0xff);
|
||||||
*dest++ = ((uch *)&pixel)[2];
|
*dest++ = (char)((pixel >> 16) & 0xff);
|
||||||
*dest++ = ((uch *)&pixel)[1];
|
*dest++ = (char)((pixel >> 8) & 0xff);
|
||||||
*dest++ = ((uch *)&pixel)[0];
|
*dest++ = (char)( pixel & 0xff);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* display after every 16 lines */
|
/* display after every 16 lines */
|
||||||
if (((row+1) & 0xf) == 0) {
|
if (((row+1) & 0xf) == 0) {
|
||||||
XPutImage(display, window, gc, ximage, 0, lastrow, 0, lastrow,
|
XPutImage(display, window, gc, ximage, 0, (int)lastrow, 0,
|
||||||
image_width, 16);
|
(int)lastrow, image_width, 16);
|
||||||
XFlush(display);
|
XFlush(display);
|
||||||
lastrow = row + 1;
|
lastrow = row + 1;
|
||||||
}
|
}
|
||||||
@@ -631,12 +730,12 @@ static int rpng_x_display_image()
|
|||||||
++src;
|
++src;
|
||||||
blue = ((ush)(*src) << 8);
|
blue = ((ush)(*src) << 8);
|
||||||
++src;
|
++src;
|
||||||
pixel = ((red >> RPixelShift) & RedMask) |
|
pixel = ((red >> RShift) & RMask) |
|
||||||
((green >> GPixelShift) & GreenMask) |
|
((green >> GShift) & GMask) |
|
||||||
((blue >> BPixelShift) & BlueMask);
|
((blue >> BShift) & BMask);
|
||||||
/* recall that we set ximage->byte_order = MSBFirst above */
|
/* recall that we set ximage->byte_order = MSBFirst above */
|
||||||
*dest++ = ((uch *)&pixel)[1];
|
*dest++ = (char)((pixel >> 8) & 0xff);
|
||||||
*dest++ = ((uch *)&pixel)[0];
|
*dest++ = (char)( pixel & 0xff);
|
||||||
}
|
}
|
||||||
} else /* if (image_channels == 4) */ {
|
} else /* if (image_channels == 4) */ {
|
||||||
for (i = image_width; i > 0; --i) {
|
for (i = image_width; i > 0; --i) {
|
||||||
@@ -663,18 +762,18 @@ static int rpng_x_display_image()
|
|||||||
green = ((ush)g << 8);
|
green = ((ush)g << 8);
|
||||||
blue = ((ush)b << 8);
|
blue = ((ush)b << 8);
|
||||||
}
|
}
|
||||||
pixel = ((red >> RPixelShift) & RedMask) |
|
pixel = ((red >> RShift) & RMask) |
|
||||||
((green >> GPixelShift) & GreenMask) |
|
((green >> GShift) & GMask) |
|
||||||
((blue >> BPixelShift) & BlueMask);
|
((blue >> BShift) & BMask);
|
||||||
/* recall that we set ximage->byte_order = MSBFirst above */
|
/* recall that we set ximage->byte_order = MSBFirst above */
|
||||||
*dest++ = ((uch *)&pixel)[1];
|
*dest++ = (char)((pixel >> 8) & 0xff);
|
||||||
*dest++ = ((uch *)&pixel)[0];
|
*dest++ = (char)( pixel & 0xff);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* display after every 16 lines */
|
/* display after every 16 lines */
|
||||||
if (((row+1) & 0xf) == 0) {
|
if (((row+1) & 0xf) == 0) {
|
||||||
XPutImage(display, window, gc, ximage, 0, lastrow, 0, lastrow,
|
XPutImage(display, window, gc, ximage, 0, (int)lastrow, 0,
|
||||||
image_width, 16);
|
(int)lastrow, image_width, 16);
|
||||||
XFlush(display);
|
XFlush(display);
|
||||||
lastrow = row + 1;
|
lastrow = row + 1;
|
||||||
}
|
}
|
||||||
@@ -688,8 +787,8 @@ static int rpng_x_display_image()
|
|||||||
|
|
||||||
Trace((stderr, "calling final XPutImage()\n"))
|
Trace((stderr, "calling final XPutImage()\n"))
|
||||||
if (lastrow < image_height) {
|
if (lastrow < image_height) {
|
||||||
XPutImage(display, window, gc, ximage, 0, lastrow, 0, lastrow,
|
XPutImage(display, window, gc, ximage, 0, (int)lastrow, 0,
|
||||||
image_width, image_height-lastrow);
|
(int)lastrow, image_width, image_height-lastrow);
|
||||||
XFlush(display);
|
XFlush(display);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -699,7 +798,7 @@ static int rpng_x_display_image()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void rpng_x_cleanup()
|
static void rpng_x_cleanup(void)
|
||||||
{
|
{
|
||||||
if (image_data) {
|
if (image_data) {
|
||||||
free(image_data);
|
free(image_data);
|
||||||
@@ -722,6 +821,9 @@ static void rpng_x_cleanup()
|
|||||||
|
|
||||||
if (have_colormap)
|
if (have_colormap)
|
||||||
XFreeColormap(display, colormap);
|
XFreeColormap(display, colormap);
|
||||||
|
|
||||||
|
if (have_nondefault_visual)
|
||||||
|
XFree(visual_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -22,10 +22,13 @@
|
|||||||
Changelog:
|
Changelog:
|
||||||
- 1.01: initial public release
|
- 1.01: initial public release
|
||||||
- 1.02: fixed cut-and-paste error in usage screen (oops...)
|
- 1.02: fixed cut-and-paste error in usage screen (oops...)
|
||||||
|
- 1.03: modified to allow abbreviated options
|
||||||
|
- 1.04: removed bogus extra argument from usage fprintf() [Glenn R-P?];
|
||||||
|
fixed command-line parsing bug
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 1998-1999 Greg Roelofs. All rights reserved.
|
Copyright (c) 1998-2000 Greg Roelofs. All rights reserved.
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
This software is provided "as is," without warranty of any kind,
|
||||||
express or implied. In no event shall the author or contributors
|
express or implied. In no event shall the author or contributors
|
||||||
@@ -52,14 +55,14 @@
|
|||||||
|
|
||||||
#define PROGNAME "rpng2-win"
|
#define PROGNAME "rpng2-win"
|
||||||
#define LONGNAME "Progressive PNG Viewer for Windows"
|
#define LONGNAME "Progressive PNG Viewer for Windows"
|
||||||
#define VERSION "1.02 of 22 September 1999"
|
#define VERSION "1.04 of 19 March 2000"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <setjmp.h> /* for jmpbuf declaration in readpng2.h */
|
#include <setjmp.h> /* for jmpbuf declaration in readpng2.h */
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <math.h> /* only for PvdM background code */
|
#include <math.h> /* only for PvdM background code */
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
/* all for PvdM background code: */
|
/* all for PvdM background code: */
|
||||||
@@ -80,9 +83,9 @@
|
|||||||
#define rgb2_max bg_bsat
|
#define rgb2_max bg_bsat
|
||||||
#define rgb2_min bg_brot
|
#define rgb2_min bg_brot
|
||||||
|
|
||||||
/* #define DEBUG */ /* this enables the Trace() macros */
|
/* #define DEBUG */ /* this enables the Trace() macros */
|
||||||
|
|
||||||
#include "readpng2.h" /* typedefs, common macros, readpng2 prototypes */
|
#include "readpng2.h" /* typedefs, common macros, readpng2 prototypes */
|
||||||
|
|
||||||
|
|
||||||
/* could just include png.h, but this macro is the only thing we need
|
/* could just include png.h, but this macro is the only thing we need
|
||||||
@@ -90,18 +93,18 @@
|
|||||||
* only happen with alpha (which could easily be avoided with
|
* only happen with alpha (which could easily be avoided with
|
||||||
* "ush acopy = (alpha);") */
|
* "ush acopy = (alpha);") */
|
||||||
|
|
||||||
#define alpha_composite(composite, fg, alpha, bg) { \
|
#define alpha_composite(composite, fg, alpha, bg) { \
|
||||||
ush temp = ((ush)(fg)*(ush)(alpha) + \
|
ush temp = ((ush)(fg)*(ush)(alpha) + \
|
||||||
(ush)(bg)*(ush)(255 - (ush)(alpha)) + (ush)128); \
|
(ush)(bg)*(ush)(255 - (ush)(alpha)) + (ush)128); \
|
||||||
(composite) = (uch)((temp + (temp >> 8)) >> 8); \
|
(composite) = (uch)((temp + (temp >> 8)) >> 8); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#define INBUFSIZE 4096 /* with pseudo-timing on (1 sec delay/block), this
|
#define INBUFSIZE 4096 /* with pseudo-timing on (1 sec delay/block), this
|
||||||
* block size corresponds roughly to a download
|
* block size corresponds roughly to a download
|
||||||
* speed 10% faster than theoretical 33.6K maximum
|
* speed 10% faster than theoretical 33.6K maximum
|
||||||
* (assuming 8 data bits, 1 stop bit and no other
|
* (assuming 8 data bits, 1 stop bit and no other
|
||||||
* overhead) */
|
* overhead) */
|
||||||
|
|
||||||
/* local prototypes */
|
/* local prototypes */
|
||||||
static void rpng2_win_init(void);
|
static void rpng2_win_init(void);
|
||||||
@@ -116,7 +119,7 @@ LRESULT CALLBACK rpng2_win_wndproc(HWND, UINT, WPARAM, LPARAM);
|
|||||||
static char titlebar[1024], *window_name = titlebar;
|
static char titlebar[1024], *window_name = titlebar;
|
||||||
static char *progname = PROGNAME;
|
static char *progname = PROGNAME;
|
||||||
static char *appname = LONGNAME;
|
static char *appname = LONGNAME;
|
||||||
static char *icon_name = PROGNAME; /* GRR: not (yet) used */
|
static char *icon_name = PROGNAME; /* GRR: not (yet) used */
|
||||||
static char *filename;
|
static char *filename;
|
||||||
static FILE *infile;
|
static FILE *infile;
|
||||||
|
|
||||||
@@ -125,7 +128,7 @@ static mainprog_info rpng2_info;
|
|||||||
static uch inbuf[INBUFSIZE];
|
static uch inbuf[INBUFSIZE];
|
||||||
static int incount;
|
static int incount;
|
||||||
|
|
||||||
static int pat = 6; /* must be less than num_bgpat */
|
static int pat = 6; /* must be less than num_bgpat */
|
||||||
static int bg_image = 0;
|
static int bg_image = 0;
|
||||||
static int bgscale = 16;
|
static int bgscale = 16;
|
||||||
static ulg bg_rowbytes;
|
static ulg bg_rowbytes;
|
||||||
@@ -134,22 +137,22 @@ static uch *bg_data;
|
|||||||
static struct rgb_color {
|
static struct rgb_color {
|
||||||
uch r, g, b;
|
uch r, g, b;
|
||||||
} rgb[] = {
|
} rgb[] = {
|
||||||
{ 0, 0, 0}, /* 0: black */
|
{ 0, 0, 0}, /* 0: black */
|
||||||
{255, 255, 255}, /* 1: white */
|
{255, 255, 255}, /* 1: white */
|
||||||
{173, 132, 57}, /* 2: tan */
|
{173, 132, 57}, /* 2: tan */
|
||||||
{ 64, 132, 0}, /* 3: medium green */
|
{ 64, 132, 0}, /* 3: medium green */
|
||||||
{189, 117, 1}, /* 4: gold */
|
{189, 117, 1}, /* 4: gold */
|
||||||
{253, 249, 1}, /* 5: yellow */
|
{253, 249, 1}, /* 5: yellow */
|
||||||
{ 0, 0, 255}, /* 6: blue */
|
{ 0, 0, 255}, /* 6: blue */
|
||||||
{ 0, 0, 120}, /* 7: medium blue */
|
{ 0, 0, 120}, /* 7: medium blue */
|
||||||
{255, 0, 255}, /* 8: magenta */
|
{255, 0, 255}, /* 8: magenta */
|
||||||
{ 64, 0, 64}, /* 9: dark magenta */
|
{ 64, 0, 64}, /* 9: dark magenta */
|
||||||
{255, 0, 0}, /* 10: red */
|
{255, 0, 0}, /* 10: red */
|
||||||
{ 64, 0, 0}, /* 11: dark red */
|
{ 64, 0, 0}, /* 11: dark red */
|
||||||
{255, 127, 0}, /* 12: orange */
|
{255, 127, 0}, /* 12: orange */
|
||||||
{192, 96, 0}, /* 13: darker orange */
|
{192, 96, 0}, /* 13: darker orange */
|
||||||
{ 24, 60, 0}, /* 14: dark green-yellow */
|
{ 24, 60, 0}, /* 14: dark green-yellow */
|
||||||
{ 85, 125, 200} /* 15: ice blue */
|
{ 85, 125, 200} /* 15: ice blue */
|
||||||
};
|
};
|
||||||
/* not used for now, but should be for error-checking:
|
/* not used for now, but should be for error-checking:
|
||||||
static int num_rgb = sizeof(rgb) / sizeof(struct rgb_color);
|
static int num_rgb = sizeof(rgb) / sizeof(struct rgb_color);
|
||||||
@@ -174,25 +177,25 @@ static int num_rgb = sizeof(rgb) / sizeof(struct rgb_color);
|
|||||||
*/
|
*/
|
||||||
static struct background_pattern {
|
static struct background_pattern {
|
||||||
ush type;
|
ush type;
|
||||||
int rgb1_max, rgb1_min; /* or bg_freq, bg_gray */
|
int rgb1_max, rgb1_min; /* or bg_freq, bg_gray */
|
||||||
int rgb2_max, rgb2_min; /* or bg_bsat, bg_brot (both scaled by 10)*/
|
int rgb2_max, rgb2_min; /* or bg_bsat, bg_brot (both scaled by 10)*/
|
||||||
} bg[] = {
|
} bg[] = {
|
||||||
{0+8, 2,0, 1,15}, /* checkered: tan/black vs. white/ice blue */
|
{0+8, 2,0, 1,15}, /* checkered: tan/black vs. white/ice blue */
|
||||||
{0+24, 2,0, 1,0}, /* checkered: tan/black vs. white/black */
|
{0+24, 2,0, 1,0}, /* checkered: tan/black vs. white/black */
|
||||||
{0+8, 4,5, 0,2}, /* checkered: gold/yellow vs. black/tan */
|
{0+8, 4,5, 0,2}, /* checkered: gold/yellow vs. black/tan */
|
||||||
{0+8, 4,5, 0,6}, /* checkered: gold/yellow vs. black/blue */
|
{0+8, 4,5, 0,6}, /* checkered: gold/yellow vs. black/blue */
|
||||||
{0, 7,0, 8,9}, /* checkered: deep blue/black vs. magenta */
|
{0, 7,0, 8,9}, /* checkered: deep blue/black vs. magenta */
|
||||||
{0+8, 13,0, 5,14}, /* checkered: orange/black vs. yellow */
|
{0+8, 13,0, 5,14}, /* checkered: orange/black vs. yellow */
|
||||||
{0+8, 12,0, 10,11}, /* checkered: orange/black vs. red */
|
{0+8, 12,0, 10,11}, /* checkered: orange/black vs. red */
|
||||||
{1, 7,0, 8,0}, /* diamonds: deep blue/black vs. magenta */
|
{1, 7,0, 8,0}, /* diamonds: deep blue/black vs. magenta */
|
||||||
{1, 12,0, 11,0}, /* diamonds: orange vs. dark red */
|
{1, 12,0, 11,0}, /* diamonds: orange vs. dark red */
|
||||||
{1, 10,0, 7,0}, /* diamonds: red vs. medium blue */
|
{1, 10,0, 7,0}, /* diamonds: red vs. medium blue */
|
||||||
{1, 4,0, 5,0}, /* diamonds: gold vs. yellow */
|
{1, 4,0, 5,0}, /* diamonds: gold vs. yellow */
|
||||||
{1, 3,0, 0,0}, /* diamonds: medium green vs. black */
|
{1, 3,0, 0,0}, /* diamonds: medium green vs. black */
|
||||||
{2, 16, 100, 20, 0}, /* radial: ~hard radial color-beams */
|
{2, 16, 100, 20, 0}, /* radial: ~hard radial color-beams */
|
||||||
{2, 18, 100, 10, 2}, /* radial: soft, curved radial color-beams */
|
{2, 18, 100, 10, 2}, /* radial: soft, curved radial color-beams */
|
||||||
{2, 16, 256, 100, 250}, /* radial: very tight spiral */
|
{2, 16, 256, 100, 250}, /* radial: very tight spiral */
|
||||||
{2, 10000, 256, 11, 0} /* radial: dipole-moire' (almost fractal) */
|
{2, 10000, 256, 11, 0} /* radial: dipole-moire' (almost fractal) */
|
||||||
};
|
};
|
||||||
static int num_bgpat = sizeof(bg) / sizeof(struct background_pattern);
|
static int num_bgpat = sizeof(bg) / sizeof(struct background_pattern);
|
||||||
|
|
||||||
@@ -212,16 +215,17 @@ static int global_showmode;
|
|||||||
|
|
||||||
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
|
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
|
||||||
{
|
{
|
||||||
char *args[1024]; /* arbitrary limit, but should suffice */
|
char *args[1024]; /* arbitrary limit, but should suffice */
|
||||||
char *p, *q, *bgstr = NULL, **argv = args;
|
char **argv = args;
|
||||||
|
char *p, *q, *bgstr = NULL;
|
||||||
int argc = 0;
|
int argc = 0;
|
||||||
int rc, alen, flen;
|
int rc, alen, flen;
|
||||||
int error = 0;
|
int error = 0;
|
||||||
int timing = FALSE;
|
int timing = FALSE;
|
||||||
int have_bg = FALSE;
|
int have_bg = FALSE;
|
||||||
double LUT_exponent; /* just the lookup table */
|
double LUT_exponent; /* just the lookup table */
|
||||||
double CRT_exponent = 2.2; /* just the monitor */
|
double CRT_exponent = 2.2; /* just the monitor */
|
||||||
double default_display_exponent; /* whole display system */
|
double default_display_exponent; /* whole display system */
|
||||||
MSG msg;
|
MSG msg;
|
||||||
|
|
||||||
|
|
||||||
@@ -316,33 +320,39 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
|
|||||||
/* Now parse the command line for options and the PNG filename. */
|
/* Now parse the command line for options and the PNG filename. */
|
||||||
|
|
||||||
while (*++argv && !error) {
|
while (*++argv && !error) {
|
||||||
if (!strcmp(*argv, "-gamma")) {
|
if (!strncmp(*argv, "-gamma", 2)) {
|
||||||
if (!*++argv)
|
if (!*++argv)
|
||||||
++error;
|
++error;
|
||||||
rpng2_info.display_exponent = atof(*argv);
|
|
||||||
if (rpng2_info.display_exponent <= 0.0)
|
|
||||||
++error;
|
|
||||||
} else if (!strcmp(*argv, "-bgcolor")) {
|
|
||||||
if (!*++argv)
|
|
||||||
++error;
|
|
||||||
bgstr = *argv;
|
|
||||||
if (strlen(bgstr) != 7 || bgstr[0] != '#')
|
|
||||||
++error;
|
|
||||||
else {
|
else {
|
||||||
have_bg = TRUE;
|
rpng2_info.display_exponent = atof(*argv);
|
||||||
bg_image = FALSE;
|
if (rpng2_info.display_exponent <= 0.0)
|
||||||
|
++error;
|
||||||
}
|
}
|
||||||
} else if (!strcmp(*argv, "-bgpat")) {
|
} else if (!strncmp(*argv, "-bgcolor", 4)) {
|
||||||
if (!*++argv)
|
if (!*++argv)
|
||||||
++error;
|
++error;
|
||||||
pat = atoi(*argv) - 1;
|
else {
|
||||||
if (pat < 0 || pat >= num_bgpat)
|
bgstr = *argv;
|
||||||
|
if (strlen(bgstr) != 7 || bgstr[0] != '#')
|
||||||
|
++error;
|
||||||
|
else {
|
||||||
|
have_bg = TRUE;
|
||||||
|
bg_image = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (!strncmp(*argv, "-bgpat", 4)) {
|
||||||
|
if (!*++argv)
|
||||||
++error;
|
++error;
|
||||||
else {
|
else {
|
||||||
bg_image = TRUE;
|
pat = atoi(*argv) - 1;
|
||||||
have_bg = FALSE;
|
if (pat < 0 || pat >= num_bgpat)
|
||||||
|
++error;
|
||||||
|
else {
|
||||||
|
bg_image = TRUE;
|
||||||
|
have_bg = FALSE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (!strcmp(*argv, "-timing")) {
|
} else if (!strncmp(*argv, "-timing", 2)) {
|
||||||
timing = TRUE;
|
timing = TRUE;
|
||||||
} else {
|
} else {
|
||||||
if (**argv != '-') {
|
if (**argv != '-') {
|
||||||
@@ -387,6 +397,9 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
|
|||||||
fclose(infile);
|
fclose(infile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* usage screen */
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
fprintf(stderr, "\n%s %s: %s\n", PROGNAME, VERSION, appname);
|
fprintf(stderr, "\n%s %s: %s\n", PROGNAME, VERSION, appname);
|
||||||
readpng2_version_info();
|
readpng2_version_info();
|
||||||
@@ -398,14 +411,14 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
|
|||||||
"\t\t to the product of the lookup-table exponent (varies)\n"
|
"\t\t to the product of the lookup-table exponent (varies)\n"
|
||||||
"\t\t and the CRT exponent (usually 2.2); must be positive\n"
|
"\t\t and the CRT exponent (usually 2.2); must be positive\n"
|
||||||
" bg \tdesired background color in 7-character hex RGB format\n"
|
" bg \tdesired background color in 7-character hex RGB format\n"
|
||||||
"\t\t (e.g., ``#ff7f00'' for orange: same as HTML colors);\n"
|
"\t\t (e.g., ``#ff7700'' for orange: same as HTML colors);\n"
|
||||||
"\t\t used with transparent images; overrides -bgpat\n"
|
"\t\t used with transparent images; overrides -bgpat\n"
|
||||||
" pat \tdesired background pattern number (1-%d); used with\n"
|
" pat \tdesired background pattern number (1-%d); used with\n"
|
||||||
"\t\t transparent images; overrides -bgcolor\n"
|
"\t\t transparent images; overrides -bgcolor\n"
|
||||||
" -timing\tenables delay for every block read, to simulate modem\n"
|
" -timing\tenables delay for every block read, to simulate modem\n"
|
||||||
"\t\t download of image (~36 Kbps)\n"
|
"\t\t download of image (~36 Kbps)\n"
|
||||||
"\nPress Q, Esc or mouse button 1 after image is displayed to quit.\n"
|
"\nPress Q, Esc or mouse button 1 after image is displayed to quit.\n"
|
||||||
"\n", PROGNAME, " ", default_display_exponent, num_bgpat);
|
"\n", PROGNAME, default_display_exponent, num_bgpat);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -560,7 +573,7 @@ static int rpng2_win_create_window()
|
|||||||
if (!(dib = (uch *)malloc(sizeof(BITMAPINFOHEADER) +
|
if (!(dib = (uch *)malloc(sizeof(BITMAPINFOHEADER) +
|
||||||
wimage_rowbytes*rpng2_info.height)))
|
wimage_rowbytes*rpng2_info.height)))
|
||||||
{
|
{
|
||||||
return 4; /* fail */
|
return 4; /* fail */
|
||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------
|
/*---------------------------------------------------------------------------
|
||||||
@@ -655,7 +668,7 @@ static int rpng2_win_create_window()
|
|||||||
TextOut(hdc, ((x < 0)? 0 : x), ((y < 0)? 0 : y), msg, len);
|
TextOut(hdc, ((x < 0)? 0 : x), ((y < 0)? 0 : y), msg, len);
|
||||||
ReleaseDC(global_hwnd, hdc);
|
ReleaseDC(global_hwnd, hdc);
|
||||||
|
|
||||||
rpng2_win_load_bg_image(); /* resets bg_image if fails */
|
rpng2_win_load_bg_image(); /* resets bg_image if fails */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!bg_image) {
|
if (!bg_image) {
|
||||||
@@ -753,7 +766,7 @@ static int rpng2_win_load_bg_image()
|
|||||||
even_odd = even_odd_vert ^ even_odd_horiz;
|
even_odd = even_odd_vert ^ even_odd_horiz;
|
||||||
invert_column =
|
invert_column =
|
||||||
(even_odd_horiz && (bg[pat].type & 0x10));
|
(even_odd_horiz && (bg[pat].type & 0x10));
|
||||||
if (even_odd == 0) { /* gradient #1 */
|
if (even_odd == 0) { /* gradient #1 */
|
||||||
if (invert_column) {
|
if (invert_column) {
|
||||||
*dest++ = r1_inv;
|
*dest++ = r1_inv;
|
||||||
*dest++ = g1_inv;
|
*dest++ = g1_inv;
|
||||||
@@ -763,16 +776,16 @@ static int rpng2_win_load_bg_image()
|
|||||||
*dest++ = g1;
|
*dest++ = g1;
|
||||||
*dest++ = b1;
|
*dest++ = b1;
|
||||||
}
|
}
|
||||||
} else { /* gradient #2 */
|
} else { /* gradient #2 */
|
||||||
if ((invert_column && invert_gradient2) ||
|
if ((invert_column && invert_gradient2) ||
|
||||||
(!invert_column && !invert_gradient2))
|
(!invert_column && !invert_gradient2))
|
||||||
{
|
{
|
||||||
*dest++ = r2; /* not inverted or */
|
*dest++ = r2; /* not inverted or */
|
||||||
*dest++ = g2; /* doubly inverted */
|
*dest++ = g2; /* doubly inverted */
|
||||||
*dest++ = b2;
|
*dest++ = b2;
|
||||||
} else {
|
} else {
|
||||||
*dest++ = r2_inv;
|
*dest++ = r2_inv;
|
||||||
*dest++ = g2_inv; /* singly inverted */
|
*dest++ = g2_inv; /* singly inverted */
|
||||||
*dest++ = b2_inv;
|
*dest++ = b2_inv;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -908,7 +921,7 @@ static int rpng2_win_load_bg_image()
|
|||||||
g1 = *src++;
|
g1 = *src++;
|
||||||
b1 = *src++;
|
b1 = *src++;
|
||||||
*dest++ = b1;
|
*dest++ = b1;
|
||||||
*dest++ = g1; /* note reverse order */
|
*dest++ = g1; /* note reverse order */
|
||||||
*dest++ = r1;
|
*dest++ = r1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -962,7 +975,7 @@ static void rpng2_win_display_row(ulg row)
|
|||||||
g = *src++;
|
g = *src++;
|
||||||
b = *src++;
|
b = *src++;
|
||||||
*dest++ = b;
|
*dest++ = b;
|
||||||
*dest++ = g; /* note reverse order */
|
*dest++ = g; /* note reverse order */
|
||||||
*dest++ = r;
|
*dest++ = r;
|
||||||
}
|
}
|
||||||
} else /* if (rpng2_info.channels == 4) */ {
|
} else /* if (rpng2_info.channels == 4) */ {
|
||||||
@@ -1028,7 +1041,9 @@ static void rpng2_win_finish_display()
|
|||||||
* that the image is done */
|
* that the image is done */
|
||||||
|
|
||||||
rpng2_info.done = TRUE;
|
rpng2_info.done = TRUE;
|
||||||
printf("Done. Press Q, Esc or mouse button 1 to quit.\n");
|
printf(
|
||||||
|
"Done. Press Q, Esc or mouse button 1 (within image window) to quit.\n");
|
||||||
|
fflush(stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1084,15 +1099,15 @@ LRESULT CALLBACK rpng2_win_wndproc(HWND hwnd, UINT iMsg, WPARAM wP, LPARAM lP)
|
|||||||
|
|
||||||
/* wait for the user to tell us when to quit */
|
/* wait for the user to tell us when to quit */
|
||||||
case WM_CHAR:
|
case WM_CHAR:
|
||||||
switch (wP) { /* only need one, so ignore repeat count */
|
switch (wP) { /* only need one, so ignore repeat count */
|
||||||
case 'q':
|
case 'q':
|
||||||
case 'Q':
|
case 'Q':
|
||||||
case 0x1B: /* Esc key */
|
case 0x1B: /* Esc key */
|
||||||
PostQuitMessage(0);
|
PostQuitMessage(0);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case WM_LBUTTONDOWN: /* another way of quitting */
|
case WM_LBUTTONDOWN: /* another way of quitting */
|
||||||
case WM_DESTROY:
|
case WM_DESTROY:
|
||||||
PostQuitMessage(0);
|
PostQuitMessage(0);
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
BIN
contrib/gregbook/rpng2-x
Executable file
BIN
contrib/gregbook/rpng2-x
Executable file
Binary file not shown.
@@ -6,9 +6,11 @@
|
|||||||
a web browser (though the front end is only set up to read from files).
|
a web browser (though the front end is only set up to read from files).
|
||||||
It supports gamma correction, user-specified background colors, and user-
|
It supports gamma correction, user-specified background colors, and user-
|
||||||
specified background patterns (for transparent images). This version is
|
specified background patterns (for transparent images). This version is
|
||||||
for the X Window System (tested under Unix, but may work under VMS or OS/2
|
for the X Window System (tested by the author under Unix and by Martin
|
||||||
with a little tweaking). Thanks to Adam Costello and Pieter S. van der
|
Zinser under OpenVMS; may work under OS/2 with a little tweaking).
|
||||||
Meulen for the "diamond" and "radial waves" patterns, respectively.
|
|
||||||
|
Thanks to Adam Costello and Pieter S. van der Meulen for the "diamond"
|
||||||
|
and "radial waves" patterns, respectively.
|
||||||
|
|
||||||
to do:
|
to do:
|
||||||
- 8-bit support
|
- 8-bit support
|
||||||
@@ -17,7 +19,16 @@
|
|||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 1998-1999 Greg Roelofs. All rights reserved.
|
Changelog:
|
||||||
|
- 1.01: initial public release
|
||||||
|
- 1.02: modified to allow abbreviated options; fixed char/uchar mismatch
|
||||||
|
- 1.10: added support for non-default visuals; fixed X pixel-conversion
|
||||||
|
- 1.11: added -usleep option for demos; fixed command-line parsing bug
|
||||||
|
- 1.12: added -pause option for demos and testing
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Copyright (c) 1998-2000 Greg Roelofs. All rights reserved.
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
This software is provided "as is," without warranty of any kind,
|
||||||
express or implied. In no event shall the author or contributors
|
express or implied. In no event shall the author or contributors
|
||||||
@@ -44,21 +55,21 @@
|
|||||||
|
|
||||||
#define PROGNAME "rpng2-x"
|
#define PROGNAME "rpng2-x"
|
||||||
#define LONGNAME "Progressive PNG Viewer for X"
|
#define LONGNAME "Progressive PNG Viewer for X"
|
||||||
#define VERSION "1.01 of 31 March 1999"
|
#define VERSION "1.12 of 19 March 2000"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <setjmp.h> /* for jmpbuf declaration in readpng2.h */
|
#include <setjmp.h> /* for jmpbuf declaration in readpng2.h */
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <math.h> /* only for PvdM background code */
|
#include <math.h> /* only for PvdM background code */
|
||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
#include <X11/Xutil.h>
|
#include <X11/Xutil.h>
|
||||||
#include <X11/Xos.h>
|
#include <X11/Xos.h>
|
||||||
#include <X11/keysym.h> /* defines XK_* macros */
|
#include <X11/keysym.h> /* defines XK_* macros */
|
||||||
|
|
||||||
#ifdef VMS
|
#ifdef VMS
|
||||||
#include <unistd.h>
|
# include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* all for PvdM background code: */
|
/* all for PvdM background code: */
|
||||||
@@ -79,9 +90,9 @@
|
|||||||
#define rgb2_max bg_bsat
|
#define rgb2_max bg_bsat
|
||||||
#define rgb2_min bg_brot
|
#define rgb2_min bg_brot
|
||||||
|
|
||||||
/* #define DEBUG */ /* this enables the Trace() macros */
|
/* #define DEBUG */ /* this enables the Trace() macros */
|
||||||
|
|
||||||
#include "readpng2.h" /* typedefs, common macros, readpng2 prototypes */
|
#include "readpng2.h" /* typedefs, common macros, readpng2 prototypes */
|
||||||
|
|
||||||
|
|
||||||
/* could just include png.h, but this macro is the only thing we need
|
/* could just include png.h, but this macro is the only thing we need
|
||||||
@@ -89,18 +100,18 @@
|
|||||||
* only happen with alpha (which could easily be avoided with
|
* only happen with alpha (which could easily be avoided with
|
||||||
* "ush acopy = (alpha);") */
|
* "ush acopy = (alpha);") */
|
||||||
|
|
||||||
#define alpha_composite(composite, fg, alpha, bg) { \
|
#define alpha_composite(composite, fg, alpha, bg) { \
|
||||||
ush temp = ((ush)(fg)*(ush)(alpha) + \
|
ush temp = ((ush)(fg)*(ush)(alpha) + \
|
||||||
(ush)(bg)*(ush)(255 - (ush)(alpha)) + (ush)128); \
|
(ush)(bg)*(ush)(255 - (ush)(alpha)) + (ush)128); \
|
||||||
(composite) = (uch)((temp + (temp >> 8)) >> 8); \
|
(composite) = (uch)((temp + (temp >> 8)) >> 8); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#define INBUFSIZE 4096 /* with pseudo-timing on (1 sec delay/block), this
|
#define INBUFSIZE 4096 /* with pseudo-timing on (1 sec delay/block), this
|
||||||
* block size corresponds roughly to a download
|
* block size corresponds roughly to a download
|
||||||
* speed 10% faster than theoretical 33.6K maximum
|
* speed 10% faster than theoretical 33.6K maximum
|
||||||
* (assuming 8 data bits, 1 stop bit and no other
|
* (assuming 8 data bits, 1 stop bit and no other
|
||||||
* overhead) */
|
* overhead) */
|
||||||
|
|
||||||
/* local prototypes */
|
/* local prototypes */
|
||||||
static void rpng2_x_init(void);
|
static void rpng2_x_init(void);
|
||||||
@@ -123,12 +134,16 @@ static mainprog_info rpng2_info;
|
|||||||
static uch inbuf[INBUFSIZE];
|
static uch inbuf[INBUFSIZE];
|
||||||
static int incount;
|
static int incount;
|
||||||
|
|
||||||
static int pat = 6; /* must be less than num_bgpat */
|
static int pat = 6; /* must be less than num_bgpat */
|
||||||
static int bg_image = 0;
|
static int bg_image = 0;
|
||||||
static int bgscale = 16;
|
static int bgscale = 16;
|
||||||
static ulg bg_rowbytes;
|
static ulg bg_rowbytes;
|
||||||
static uch *bg_data;
|
static uch *bg_data;
|
||||||
|
|
||||||
|
int pause_after_pass = FALSE;
|
||||||
|
int demo_timing = FALSE;
|
||||||
|
ulg usleep_duration = 0L;
|
||||||
|
|
||||||
static struct rgb_color {
|
static struct rgb_color {
|
||||||
uch r, g, b;
|
uch r, g, b;
|
||||||
} rgb[] = {
|
} rgb[] = {
|
||||||
@@ -201,12 +216,14 @@ static XImage *ximage;
|
|||||||
static Display *display;
|
static Display *display;
|
||||||
static int depth;
|
static int depth;
|
||||||
static Visual *visual;
|
static Visual *visual;
|
||||||
static int RPixelShift, GPixelShift, BPixelShift;
|
static XVisualInfo *visual_list;
|
||||||
static ulg RedMask, GreenMask, BlueMask;
|
static int RShift, GShift, BShift;
|
||||||
|
static ulg RMask, GMask, BMask;
|
||||||
static Window window;
|
static Window window;
|
||||||
static GC gc;
|
static GC gc;
|
||||||
static Colormap colormap;
|
static Colormap colormap;
|
||||||
|
|
||||||
|
static int have_nondefault_visual = FALSE;
|
||||||
static int have_colormap = FALSE;
|
static int have_colormap = FALSE;
|
||||||
static int have_window = FALSE;
|
static int have_window = FALSE;
|
||||||
|
|
||||||
@@ -294,37 +311,53 @@ int main(int argc, char **argv)
|
|||||||
/* Now parse the command line for options and the PNG filename. */
|
/* Now parse the command line for options and the PNG filename. */
|
||||||
|
|
||||||
while (*++argv && !error) {
|
while (*++argv && !error) {
|
||||||
if (!strcmp(*argv, "-display")) {
|
if (!strncmp(*argv, "-display", 2)) {
|
||||||
if (!*++argv)
|
if (!*++argv)
|
||||||
++error;
|
++error;
|
||||||
displayname = *argv;
|
else
|
||||||
} else if (!strcmp(*argv, "-gamma")) {
|
displayname = *argv;
|
||||||
|
} else if (!strncmp(*argv, "-gamma", 2)) {
|
||||||
if (!*++argv)
|
if (!*++argv)
|
||||||
++error;
|
++error;
|
||||||
rpng2_info.display_exponent = atof(*argv);
|
|
||||||
if (rpng2_info.display_exponent <= 0.0)
|
|
||||||
++error;
|
|
||||||
} else if (!strcmp(*argv, "-bgcolor")) {
|
|
||||||
if (!*++argv)
|
|
||||||
++error;
|
|
||||||
bgstr = *argv;
|
|
||||||
if (strlen(bgstr) != 7 || bgstr[0] != '#')
|
|
||||||
++error;
|
|
||||||
else {
|
else {
|
||||||
have_bg = TRUE;
|
rpng2_info.display_exponent = atof(*argv);
|
||||||
bg_image = FALSE;
|
if (rpng2_info.display_exponent <= 0.0)
|
||||||
|
++error;
|
||||||
}
|
}
|
||||||
} else if (!strcmp(*argv, "-bgpat")) {
|
} else if (!strncmp(*argv, "-bgcolor", 4)) {
|
||||||
if (!*++argv)
|
if (!*++argv)
|
||||||
++error;
|
++error;
|
||||||
pat = atoi(*argv) - 1;
|
else {
|
||||||
if (pat < 0 || pat >= num_bgpat)
|
bgstr = *argv;
|
||||||
|
if (strlen(bgstr) != 7 || bgstr[0] != '#')
|
||||||
|
++error;
|
||||||
|
else {
|
||||||
|
have_bg = TRUE;
|
||||||
|
bg_image = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (!strncmp(*argv, "-bgpat", 4)) {
|
||||||
|
if (!*++argv)
|
||||||
++error;
|
++error;
|
||||||
else {
|
else {
|
||||||
bg_image = TRUE;
|
pat = atoi(*argv) - 1;
|
||||||
have_bg = FALSE;
|
if (pat < 0 || pat >= num_bgpat)
|
||||||
|
++error;
|
||||||
|
else {
|
||||||
|
bg_image = TRUE;
|
||||||
|
have_bg = FALSE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (!strcmp(*argv, "-timing")) {
|
} else if (!strncmp(*argv, "-usleep", 2)) {
|
||||||
|
if (!*++argv)
|
||||||
|
++error;
|
||||||
|
else {
|
||||||
|
usleep_duration = (ulg)atol(*argv);
|
||||||
|
demo_timing = TRUE;
|
||||||
|
}
|
||||||
|
} else if (!strncmp(*argv, "-pause", 2)) {
|
||||||
|
pause_after_pass = TRUE;
|
||||||
|
} else if (!strncmp(*argv, "-timing", 2)) {
|
||||||
timing = TRUE;
|
timing = TRUE;
|
||||||
} else {
|
} else {
|
||||||
if (**argv != '-') {
|
if (**argv != '-') {
|
||||||
@@ -377,25 +410,32 @@ int main(int argc, char **argv)
|
|||||||
fclose(infile);
|
fclose(infile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* usage screen */
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
fprintf(stderr, "\n%s %s: %s\n", PROGNAME, VERSION, appname);
|
fprintf(stderr, "\n%s %s: %s\n", PROGNAME, VERSION, appname);
|
||||||
readpng2_version_info();
|
readpng2_version_info();
|
||||||
fprintf(stderr, "\n"
|
fprintf(stderr, "\n"
|
||||||
"Usage: %s [-display xdpy] [-gamma exp] [-bgcolor bg | -bgpat pat]\n"
|
"Usage: %s [-display xdpy] [-gamma exp] [-bgcolor bg | -bgpat pat]\n"
|
||||||
" %*s [-timing] file.png\n\n"
|
" %*s [-usleep dur | -timing] [-pause] file.png\n\n"
|
||||||
" xdpy\tname of the target X display (e.g., ``hostname:0'')\n"
|
" xdpy\tname of the target X display (e.g., ``hostname:0'')\n"
|
||||||
" exp \ttransfer-function exponent (``gamma'') of the display\n"
|
" exp \ttransfer-function exponent (``gamma'') of the display\n"
|
||||||
"\t\t system in floating-point format (e.g., ``%.1f''); equal\n"
|
"\t\t system in floating-point format (e.g., ``%.1f''); equal\n"
|
||||||
"\t\t to the product of the lookup-table exponent (varies)\n"
|
"\t\t to the product of the lookup-table exponent (varies)\n"
|
||||||
"\t\t and the CRT exponent (usually 2.2); must be positive\n"
|
"\t\t and the CRT exponent (usually 2.2); must be positive\n"
|
||||||
" bg \tdesired background color in 7-character hex RGB format\n"
|
" bg \tdesired background color in 7-character hex RGB format\n"
|
||||||
"\t\t (e.g., ``#ff7f00'' for orange: same as HTML colors);\n"
|
"\t\t (e.g., ``#ff7700'' for orange: same as HTML colors);\n"
|
||||||
"\t\t used with transparent images; overrides -bgpat\n"
|
"\t\t used with transparent images; overrides -bgpat\n"
|
||||||
" pat \tdesired background pattern number (1-%d); used with\n"
|
" pat \tdesired background pattern number (1-%d); used with\n"
|
||||||
"\t\t transparent images; overrides -bgcolor\n"
|
"\t\t transparent images; overrides -bgcolor\n"
|
||||||
|
" dur \tduration in microseconds to wait after displaying each\n"
|
||||||
|
"\t\t row (for demo purposes)\n"
|
||||||
" -timing\tenables delay for every block read, to simulate modem\n"
|
" -timing\tenables delay for every block read, to simulate modem\n"
|
||||||
"\t\t download of image (~36 Kbps)\n"
|
"\t\t download of image (~36 Kbps)\n"
|
||||||
"\nPress Q, Esc or mouse button 1 after image is displayed to quit.\n"
|
" -pause\tpauses after displaying each pass until key pressed\n"
|
||||||
|
"\nPress Q, Esc or mouse button 1 (within image window, after image\n"
|
||||||
|
"is displayed) to quit.\n"
|
||||||
"\n", PROGNAME, strlen(PROGNAME), " ", default_display_exponent,
|
"\n", PROGNAME, strlen(PROGNAME), " ", default_display_exponent,
|
||||||
num_bgpat);
|
num_bgpat);
|
||||||
exit(1);
|
exit(1);
|
||||||
@@ -489,7 +529,7 @@ int main(int argc, char **argv)
|
|||||||
* in turn is called by libpng after all of the pre-IDAT chunks have been
|
* in turn is called by libpng after all of the pre-IDAT chunks have been
|
||||||
* read and processed--i.e., we now have enough info to finish initializing */
|
* read and processed--i.e., we now have enough info to finish initializing */
|
||||||
|
|
||||||
static void rpng2_x_init()
|
static void rpng2_x_init(void)
|
||||||
{
|
{
|
||||||
ulg i;
|
ulg i;
|
||||||
ulg rowbytes = rpng2_info.rowbytes;
|
ulg rowbytes = rpng2_info.rowbytes;
|
||||||
@@ -531,12 +571,14 @@ static void rpng2_x_init()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int rpng2_x_create_window()
|
static int rpng2_x_create_window(void)
|
||||||
{
|
{
|
||||||
ulg bg_red = rpng2_info.bg_red;
|
ulg bg_red = rpng2_info.bg_red;
|
||||||
ulg bg_green = rpng2_info.bg_green;
|
ulg bg_green = rpng2_info.bg_green;
|
||||||
ulg bg_blue = rpng2_info.bg_blue;
|
ulg bg_blue = rpng2_info.bg_blue;
|
||||||
ulg bg_pixel = 0L;
|
ulg bg_pixel = 0L;
|
||||||
|
ulg attrmask;
|
||||||
|
int need_colormap = FALSE;
|
||||||
int screen, pad;
|
int screen, pad;
|
||||||
uch *xdata;
|
uch *xdata;
|
||||||
Window root;
|
Window root;
|
||||||
@@ -556,39 +598,70 @@ static int rpng2_x_create_window()
|
|||||||
depth = DisplayPlanes(display, screen);
|
depth = DisplayPlanes(display, screen);
|
||||||
root = RootWindow(display, screen);
|
root = RootWindow(display, screen);
|
||||||
|
|
||||||
/* GRR: add 8-bit support */
|
#ifdef DEBUG
|
||||||
if (/* depth != 8 && */ depth != 16 && depth != 24 && depth != 32) {
|
XSynchronize(display, True);
|
||||||
fprintf(stderr,
|
#endif
|
||||||
"screen depth %d not supported (only 16-, 24- or 32-bit TrueColor)\n",
|
|
||||||
depth);
|
if (depth != 16 && depth != 24 && depth != 32) {
|
||||||
return 2;
|
int visuals_matched = 0;
|
||||||
|
|
||||||
|
Trace((stderr, "default depth is %d: checking other visuals\n",
|
||||||
|
depth))
|
||||||
|
|
||||||
|
/* 24-bit first */
|
||||||
|
visual_info.screen = screen;
|
||||||
|
visual_info.depth = 24;
|
||||||
|
visual_list = XGetVisualInfo(display,
|
||||||
|
VisualScreenMask | VisualDepthMask, &visual_info, &visuals_matched);
|
||||||
|
if (visuals_matched == 0) {
|
||||||
|
/* GRR: add 15-, 16- and 32-bit TrueColor visuals (also DirectColor?) */
|
||||||
|
fprintf(stderr, "default screen depth %d not supported, and no"
|
||||||
|
" 24-bit visuals found\n", depth);
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
Trace((stderr, "XGetVisualInfo() returned %d 24-bit visuals\n",
|
||||||
|
visuals_matched))
|
||||||
|
visual = visual_list[0].visual;
|
||||||
|
depth = visual_list[0].depth;
|
||||||
|
/*
|
||||||
|
colormap_size = visual_list[0].colormap_size;
|
||||||
|
visual_class = visual->class;
|
||||||
|
visualID = XVisualIDFromVisual(visual);
|
||||||
|
*/
|
||||||
|
have_nondefault_visual = TRUE;
|
||||||
|
need_colormap = TRUE;
|
||||||
|
} else {
|
||||||
|
XMatchVisualInfo(display, screen, depth, TrueColor, &visual_info);
|
||||||
|
visual = visual_info.visual;
|
||||||
}
|
}
|
||||||
|
|
||||||
XMatchVisualInfo(display, screen, depth,
|
RMask = visual->red_mask;
|
||||||
(depth == 8)? PseudoColor : TrueColor, &visual_info);
|
GMask = visual->green_mask;
|
||||||
visual = visual_info.visual;
|
BMask = visual->blue_mask;
|
||||||
|
|
||||||
RedMask = visual->red_mask;
|
|
||||||
GreenMask = visual->green_mask;
|
|
||||||
BlueMask = visual->blue_mask;
|
|
||||||
|
|
||||||
/* GRR: add/check 8-bit support */
|
/* GRR: add/check 8-bit support */
|
||||||
if (depth == 8) {
|
if (depth == 8 || need_colormap) {
|
||||||
colormap = XCreateColormap(display, root, visual, AllocNone);
|
colormap = XCreateColormap(display, root, visual, AllocNone);
|
||||||
if (!colormap) {
|
if (!colormap) {
|
||||||
fprintf(stderr, "XCreateColormap() failed\n");
|
fprintf(stderr, "XCreateColormap() failed\n");
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
have_colormap = TRUE;
|
have_colormap = TRUE;
|
||||||
bg_image = FALSE; /* gradient just wastes palette entries */
|
if (depth == 8)
|
||||||
} else if (depth == 16) {
|
bg_image = FALSE; /* gradient just wastes palette entries */
|
||||||
RPixelShift = 15 - rpng2_x_msb(RedMask); /* these are right-shifts */
|
}
|
||||||
GPixelShift = 15 - rpng2_x_msb(GreenMask);
|
if (depth == 15 || depth == 16) {
|
||||||
BPixelShift = 15 - rpng2_x_msb(BlueMask);
|
RShift = 15 - rpng2_x_msb(RMask); /* these are right-shifts */
|
||||||
} else /* if (depth > 16) */ {
|
GShift = 15 - rpng2_x_msb(GMask);
|
||||||
RPixelShift = rpng2_x_msb(RedMask) - 7; /* these are left-shifts */
|
BShift = 15 - rpng2_x_msb(BMask);
|
||||||
GPixelShift = rpng2_x_msb(GreenMask) - 7;
|
} else if (depth > 16) {
|
||||||
BPixelShift = rpng2_x_msb(BlueMask) - 7;
|
RShift = rpng2_x_msb(RMask) - 7; /* these are left-shifts */
|
||||||
|
GShift = rpng2_x_msb(GMask) - 7;
|
||||||
|
BShift = rpng2_x_msb(BMask) - 7;
|
||||||
|
}
|
||||||
|
if (depth >= 15 && (RShift < 0 || GShift < 0 || BShift < 0)) {
|
||||||
|
fprintf(stderr, "rpng2 internal logic error: negative X shift(s)!\n");
|
||||||
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------
|
/*---------------------------------------------------------------------------
|
||||||
@@ -597,10 +670,16 @@ static int rpng2_x_create_window()
|
|||||||
|
|
||||||
attr.backing_store = Always;
|
attr.backing_store = Always;
|
||||||
attr.event_mask = ExposureMask | KeyPressMask | ButtonPressMask;
|
attr.event_mask = ExposureMask | KeyPressMask | ButtonPressMask;
|
||||||
|
attrmask = CWBackingStore | CWEventMask;
|
||||||
|
if (have_nondefault_visual) {
|
||||||
|
attr.colormap = colormap;
|
||||||
|
attr.background_pixel = 0;
|
||||||
|
attr.border_pixel = 1;
|
||||||
|
attrmask |= CWColormap | CWBackPixel | CWBorderPixel;
|
||||||
|
}
|
||||||
|
|
||||||
window = XCreateWindow(display, root, 0, 0, rpng2_info.width,
|
window = XCreateWindow(display, root, 0, 0, rpng2_info.width,
|
||||||
rpng2_info.height, 0, depth, InputOutput, visual,
|
rpng2_info.height, 0, depth, InputOutput, visual, attrmask, &attr);
|
||||||
CWBackingStore | CWEventMask, &attr);
|
|
||||||
|
|
||||||
if (window == None) {
|
if (window == None) {
|
||||||
fprintf(stderr, "XCreateWindow() failed\n");
|
fprintf(stderr, "XCreateWindow() failed\n");
|
||||||
@@ -621,8 +700,9 @@ static int rpng2_x_create_window()
|
|||||||
if ((size_hints = XAllocSizeHints()) != NULL) {
|
if ((size_hints = XAllocSizeHints()) != NULL) {
|
||||||
/* window will not be resizable */
|
/* window will not be resizable */
|
||||||
size_hints->flags = PMinSize | PMaxSize;
|
size_hints->flags = PMinSize | PMaxSize;
|
||||||
size_hints->min_width = size_hints->max_width = rpng2_info.width;
|
size_hints->min_width = size_hints->max_width = (int)rpng2_info.width;
|
||||||
size_hints->min_height = size_hints->max_height = rpng2_info.height;
|
size_hints->min_height = size_hints->max_height =
|
||||||
|
(int)rpng2_info.height;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((wm_hints = XAllocWMHints()) != NULL) {
|
if ((wm_hints = XAllocWMHints()) != NULL) {
|
||||||
@@ -668,7 +748,7 @@ static int rpng2_x_create_window()
|
|||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* to avoid testing the bitmap order every pixel (or doubling the size of
|
/* to avoid testing the byte order every pixel (or doubling the size of
|
||||||
* the drawing routine with a giant if-test), we arbitrarily set the byte
|
* the drawing routine with a giant if-test), we arbitrarily set the byte
|
||||||
* order to MSBFirst and let Xlib worry about inverting things on little-
|
* order to MSBFirst and let Xlib worry about inverting things on little-
|
||||||
* endian machines (e.g., Linux/x86, old VAXen, etc.)--this is not the
|
* endian machines (e.g., Linux/x86, old VAXen, etc.)--this is not the
|
||||||
@@ -684,17 +764,17 @@ static int rpng2_x_create_window()
|
|||||||
---------------------------------------------------------------------------*/
|
---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
if (bg_image)
|
if (bg_image)
|
||||||
rpng2_x_load_bg_image(); /* resets bg_image if fails */
|
rpng2_x_load_bg_image(); /* resets bg_image if fails */
|
||||||
|
|
||||||
if (!bg_image) {
|
if (!bg_image) {
|
||||||
if (depth == 24 || depth == 32) {
|
if (depth == 24 || depth == 32) {
|
||||||
bg_pixel = (bg_red << RPixelShift) |
|
bg_pixel = (bg_red << RShift) |
|
||||||
(bg_green << GPixelShift) |
|
(bg_green << GShift) |
|
||||||
(bg_blue << BPixelShift);
|
(bg_blue << BShift);
|
||||||
} else if (depth == 16) {
|
} else if (depth == 16) {
|
||||||
bg_pixel = (((bg_red << 8) >> RPixelShift) & RedMask) |
|
bg_pixel = (((bg_red << 8) >> RShift) & RMask) |
|
||||||
(((bg_green << 8) >> GPixelShift) & GreenMask) |
|
(((bg_green << 8) >> GShift) & GMask) |
|
||||||
(((bg_blue << 8) >> BPixelShift) & BlueMask);
|
(((bg_blue << 8) >> BShift) & BMask);
|
||||||
} else /* depth == 8 */ {
|
} else /* depth == 8 */ {
|
||||||
|
|
||||||
/* GRR: add 8-bit support */
|
/* GRR: add 8-bit support */
|
||||||
@@ -723,7 +803,7 @@ static int rpng2_x_create_window()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int rpng2_x_load_bg_image()
|
static int rpng2_x_load_bg_image(void)
|
||||||
{
|
{
|
||||||
uch *src;
|
uch *src;
|
||||||
char *dest;
|
char *dest;
|
||||||
@@ -772,8 +852,8 @@ static int rpng2_x_load_bg_image()
|
|||||||
int b2_diff = rgb[bg[pat].rgb2_max].b - b2_min;
|
int b2_diff = rgb[bg[pat].rgb2_max].b - b2_min;
|
||||||
|
|
||||||
for (row = 0; row < rpng2_info.height; ++row) {
|
for (row = 0; row < rpng2_info.height; ++row) {
|
||||||
yidx = row % bgscale;
|
yidx = (int)(row % bgscale);
|
||||||
even_odd_vert = (row / bgscale) & 1;
|
even_odd_vert = (int)((row / bgscale) & 1);
|
||||||
|
|
||||||
r1 = r1_min + (r1_diff * yidx) / yidx_max;
|
r1 = r1_min + (r1_diff * yidx) / yidx_max;
|
||||||
g1 = g1_min + (g1_diff * yidx) / yidx_max;
|
g1 = g1_min + (g1_diff * yidx) / yidx_max;
|
||||||
@@ -789,13 +869,13 @@ static int rpng2_x_load_bg_image()
|
|||||||
g2_inv = g2_min + (g2_diff * (yidx_max-yidx)) / yidx_max;
|
g2_inv = g2_min + (g2_diff * (yidx_max-yidx)) / yidx_max;
|
||||||
b2_inv = b2_min + (b2_diff * (yidx_max-yidx)) / yidx_max;
|
b2_inv = b2_min + (b2_diff * (yidx_max-yidx)) / yidx_max;
|
||||||
|
|
||||||
dest = (char *)(bg_data + row*bg_rowbytes);
|
dest = (char *)bg_data + row*bg_rowbytes;
|
||||||
for (i = 0; i < rpng2_info.width; ++i) {
|
for (i = 0; i < rpng2_info.width; ++i) {
|
||||||
even_odd_horiz = (i / bgscale) & 1;
|
even_odd_horiz = (int)((i / bgscale) & 1);
|
||||||
even_odd = even_odd_vert ^ even_odd_horiz;
|
even_odd = even_odd_vert ^ even_odd_horiz;
|
||||||
invert_column =
|
invert_column =
|
||||||
(even_odd_horiz && (bg[pat].type & 0x10));
|
(even_odd_horiz && (bg[pat].type & 0x10));
|
||||||
if (even_odd == 0) { /* gradient #1 */
|
if (even_odd == 0) { /* gradient #1 */
|
||||||
if (invert_column) {
|
if (invert_column) {
|
||||||
*dest++ = r1_inv;
|
*dest++ = r1_inv;
|
||||||
*dest++ = g1_inv;
|
*dest++ = g1_inv;
|
||||||
@@ -805,16 +885,16 @@ static int rpng2_x_load_bg_image()
|
|||||||
*dest++ = g1;
|
*dest++ = g1;
|
||||||
*dest++ = b1;
|
*dest++ = b1;
|
||||||
}
|
}
|
||||||
} else { /* gradient #2 */
|
} else { /* gradient #2 */
|
||||||
if ((invert_column && invert_gradient2) ||
|
if ((invert_column && invert_gradient2) ||
|
||||||
(!invert_column && !invert_gradient2))
|
(!invert_column && !invert_gradient2))
|
||||||
{
|
{
|
||||||
*dest++ = r2; /* not inverted or */
|
*dest++ = r2; /* not inverted or */
|
||||||
*dest++ = g2; /* doubly inverted */
|
*dest++ = g2; /* doubly inverted */
|
||||||
*dest++ = b2;
|
*dest++ = b2;
|
||||||
} else {
|
} else {
|
||||||
*dest++ = r2_inv;
|
*dest++ = r2_inv;
|
||||||
*dest++ = g2_inv; /* singly inverted */
|
*dest++ = g2_inv; /* singly inverted */
|
||||||
*dest++ = b2_inv;
|
*dest++ = b2_inv;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -839,12 +919,12 @@ static int rpng2_x_load_bg_image()
|
|||||||
b2 = rgb[bg[pat].rgb2_max].b;
|
b2 = rgb[bg[pat].rgb2_max].b;
|
||||||
|
|
||||||
for (row = 0; row < rpng2_info.height; ++row) {
|
for (row = 0; row < rpng2_info.height; ++row) {
|
||||||
yidx = row % bgscale;
|
yidx = (int)(row % bgscale);
|
||||||
if (yidx > hmax)
|
if (yidx > hmax)
|
||||||
yidx = bgscale-1 - yidx;
|
yidx = bgscale-1 - yidx;
|
||||||
dest = (char *)(bg_data + row*bg_rowbytes);
|
dest = (char *)bg_data + row*bg_rowbytes;
|
||||||
for (i = 0; i < rpng2_info.width; ++i) {
|
for (i = 0; i < rpng2_info.width; ++i) {
|
||||||
xidx = i % bgscale;
|
xidx = (int)(i % bgscale);
|
||||||
if (xidx > hmax)
|
if (xidx > hmax)
|
||||||
xidx = bgscale-1 - xidx;
|
xidx = bgscale-1 - xidx;
|
||||||
k = xidx + yidx;
|
k = xidx + yidx;
|
||||||
@@ -871,8 +951,8 @@ static int rpng2_x_load_bg_image()
|
|||||||
PROGNAME);
|
PROGNAME);
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
|
|
||||||
hh = rpng2_info.height / 2;
|
hh = (int)(rpng2_info.height / 2);
|
||||||
hw = rpng2_info.width / 2;
|
hw = (int)(rpng2_info.width / 2);
|
||||||
|
|
||||||
/* variables for radial waves:
|
/* variables for radial waves:
|
||||||
* aoffset: number of degrees to rotate hue [CURRENTLY NOT USED]
|
* aoffset: number of degrees to rotate hue [CURRENTLY NOT USED]
|
||||||
@@ -891,10 +971,10 @@ static int rpng2_x_load_bg_image()
|
|||||||
maxDist = (double)((hw*hw) + (hh*hh));
|
maxDist = (double)((hw*hw) + (hh*hh));
|
||||||
|
|
||||||
for (row = 0; row < rpng2_info.height; ++row) {
|
for (row = 0; row < rpng2_info.height; ++row) {
|
||||||
y = row - hh;
|
y = (int)(row - hh);
|
||||||
dest = (char *)(bg_data + row*bg_rowbytes);
|
dest = (char *)bg_data + row*bg_rowbytes;
|
||||||
for (i = 0; i < rpng2_info.width; ++i) {
|
for (i = 0; i < rpng2_info.width; ++i) {
|
||||||
x = i - hw;
|
x = (int)(i - hw);
|
||||||
angle = (x == 0)? PI_2 : atan((double)y / (double)x);
|
angle = (x == 0)? PI_2 : atan((double)y / (double)x);
|
||||||
gray = (double)MAX(ABS(y), ABS(x)) / grayspot;
|
gray = (double)MAX(ABS(y), ABS(x)) / grayspot;
|
||||||
gray = MIN(1.0, gray);
|
gray = MIN(1.0, gray);
|
||||||
@@ -951,14 +1031,15 @@ static int rpng2_x_load_bg_image()
|
|||||||
red = *src++;
|
red = *src++;
|
||||||
green = *src++;
|
green = *src++;
|
||||||
blue = *src++;
|
blue = *src++;
|
||||||
pixel = (red << RPixelShift) |
|
pixel = (red << RShift) |
|
||||||
(green << GPixelShift) |
|
(green << GShift) |
|
||||||
(blue << BPixelShift);
|
(blue << BShift);
|
||||||
/* recall that we set ximage->byte_order = MSBFirst above */
|
/* recall that we set ximage->byte_order = MSBFirst above */
|
||||||
*dest++ = ((uch *)&pixel)[3];
|
/* GRR BUG: this assumes bpp == 32, but may be 24: */
|
||||||
*dest++ = ((uch *)&pixel)[2];
|
*dest++ = (char)((pixel >> 24) & 0xff);
|
||||||
*dest++ = ((uch *)&pixel)[1];
|
*dest++ = (char)((pixel >> 16) & 0xff);
|
||||||
*dest++ = ((uch *)&pixel)[0];
|
*dest++ = (char)((pixel >> 8) & 0xff);
|
||||||
|
*dest++ = (char)( pixel & 0xff);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -969,18 +1050,15 @@ static int rpng2_x_load_bg_image()
|
|||||||
src = bg_data + row*bg_rowbytes;
|
src = bg_data + row*bg_rowbytes;
|
||||||
dest = ximage->data + row*ximage_rowbytes;
|
dest = ximage->data + row*ximage_rowbytes;
|
||||||
for (i = rpng2_info.width; i > 0; --i) {
|
for (i = rpng2_info.width; i > 0; --i) {
|
||||||
red = ((ush)(*src) << 8);
|
red = ((ush)(*src) << 8); ++src;
|
||||||
++src;
|
green = ((ush)(*src) << 8); ++src;
|
||||||
green = ((ush)(*src) << 8);
|
blue = ((ush)(*src) << 8); ++src;
|
||||||
++src;
|
pixel = ((red >> RShift) & RMask) |
|
||||||
blue = ((ush)(*src) << 8);
|
((green >> GShift) & GMask) |
|
||||||
++src;
|
((blue >> BShift) & BMask);
|
||||||
pixel = ((red >> RPixelShift) & RedMask) |
|
|
||||||
((green >> GPixelShift) & GreenMask) |
|
|
||||||
((blue >> BPixelShift) & BlueMask);
|
|
||||||
/* recall that we set ximage->byte_order = MSBFirst above */
|
/* recall that we set ximage->byte_order = MSBFirst above */
|
||||||
*dest++ = ((uch *)&pixel)[1];
|
*dest++ = (char)((pixel >> 8) & 0xff);
|
||||||
*dest++ = ((uch *)&pixel)[0];
|
*dest++ = (char)( pixel & 0xff);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1011,7 +1089,7 @@ static void rpng2_x_display_row(ulg row)
|
|||||||
uch r, g, b, a;
|
uch r, g, b, a;
|
||||||
int ximage_rowbytes = ximage->bytes_per_line;
|
int ximage_rowbytes = ximage->bytes_per_line;
|
||||||
ulg i, pixel;
|
ulg i, pixel;
|
||||||
static int rows=0;
|
static int rows=0, prevpass=(-1);
|
||||||
static ulg firstrow;
|
static ulg firstrow;
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------
|
/*---------------------------------------------------------------------------
|
||||||
@@ -1022,8 +1100,28 @@ static void rpng2_x_display_row(ulg row)
|
|||||||
|
|
||||||
Trace((stderr, "beginning rpng2_x_display_row()\n"))
|
Trace((stderr, "beginning rpng2_x_display_row()\n"))
|
||||||
|
|
||||||
|
if (rpng2_info.pass != prevpass) {
|
||||||
|
if (pause_after_pass && rpng2_info.pass > 0) {
|
||||||
|
XEvent e;
|
||||||
|
KeySym k;
|
||||||
|
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: end of pass %d of 7; click in image window to continue\n",
|
||||||
|
PROGNAME, prevpass + 1);
|
||||||
|
do
|
||||||
|
XNextEvent(display, &e);
|
||||||
|
while (!(e.type == ButtonPress && e.xbutton.button == Button1)
|
||||||
|
&& !(e.type == KeyPress &&
|
||||||
|
((k = XLookupKeysym(&e.xkey, 0)) == XK_q
|
||||||
|
|| k == XK_Escape) )) ;
|
||||||
|
}
|
||||||
|
fprintf(stderr, "%s: pass %d of 7\r", PROGNAME, rpng2_info.pass + 1);
|
||||||
|
fflush(stderr);
|
||||||
|
prevpass = rpng2_info.pass;
|
||||||
|
}
|
||||||
|
|
||||||
if (rows == 0)
|
if (rows == 0)
|
||||||
firstrow = row; /* first row not yet displayed */
|
firstrow = row; /* first row that is not yet displayed */
|
||||||
|
|
||||||
++rows; /* count of rows received but not yet displayed */
|
++rows; /* count of rows received but not yet displayed */
|
||||||
|
|
||||||
@@ -1046,14 +1144,15 @@ static void rpng2_x_display_row(ulg row)
|
|||||||
red = *src++;
|
red = *src++;
|
||||||
green = *src++;
|
green = *src++;
|
||||||
blue = *src++;
|
blue = *src++;
|
||||||
pixel = (red << RPixelShift) |
|
pixel = (red << RShift) |
|
||||||
(green << GPixelShift) |
|
(green << GShift) |
|
||||||
(blue << BPixelShift);
|
(blue << BShift);
|
||||||
/* recall that we set ximage->byte_order = MSBFirst */
|
/* recall that we set ximage->byte_order = MSBFirst above */
|
||||||
*dest++ = ((uch *)&pixel)[3];
|
/* GRR BUG: this assumes bpp == 32, but may be 24: */
|
||||||
*dest++ = ((uch *)&pixel)[2];
|
*dest++ = (char)((pixel >> 24) & 0xff);
|
||||||
*dest++ = ((uch *)&pixel)[1];
|
*dest++ = (char)((pixel >> 16) & 0xff);
|
||||||
*dest++ = ((uch *)&pixel)[0];
|
*dest++ = (char)((pixel >> 8) & 0xff);
|
||||||
|
*dest++ = (char)( pixel & 0xff);
|
||||||
}
|
}
|
||||||
} else /* if (rpng2_info.channels == 4) */ {
|
} else /* if (rpng2_info.channels == 4) */ {
|
||||||
for (i = rpng2_info.width; i > 0; --i) {
|
for (i = rpng2_info.width; i > 0; --i) {
|
||||||
@@ -1082,14 +1181,15 @@ static void rpng2_x_display_row(ulg row)
|
|||||||
alpha_composite(green, g, a, bg_green);
|
alpha_composite(green, g, a, bg_green);
|
||||||
alpha_composite(blue, b, a, bg_blue);
|
alpha_composite(blue, b, a, bg_blue);
|
||||||
}
|
}
|
||||||
pixel = (red << RPixelShift) |
|
pixel = (red << RShift) |
|
||||||
(green << GPixelShift) |
|
(green << GShift) |
|
||||||
(blue << BPixelShift);
|
(blue << BShift);
|
||||||
/* recall that we set ximage->byte_order = MSBFirst */
|
/* recall that we set ximage->byte_order = MSBFirst above */
|
||||||
*dest++ = ((uch *)&pixel)[3];
|
/* GRR BUG: this assumes bpp == 32, but may be 24: */
|
||||||
*dest++ = ((uch *)&pixel)[2];
|
*dest++ = (char)((pixel >> 24) & 0xff);
|
||||||
*dest++ = ((uch *)&pixel)[1];
|
*dest++ = (char)((pixel >> 16) & 0xff);
|
||||||
*dest++ = ((uch *)&pixel)[0];
|
*dest++ = (char)((pixel >> 8) & 0xff);
|
||||||
|
*dest++ = (char)( pixel & 0xff);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1108,12 +1208,12 @@ static void rpng2_x_display_row(ulg row)
|
|||||||
++src;
|
++src;
|
||||||
blue = ((ush)(*src) << 8);
|
blue = ((ush)(*src) << 8);
|
||||||
++src;
|
++src;
|
||||||
pixel = ((red >> RPixelShift) & RedMask) |
|
pixel = ((red >> RShift) & RMask) |
|
||||||
((green >> GPixelShift) & GreenMask) |
|
((green >> GShift) & GMask) |
|
||||||
((blue >> BPixelShift) & BlueMask);
|
((blue >> BShift) & BMask);
|
||||||
/* recall that we set ximage->byte_order = MSBFirst */
|
/* recall that we set ximage->byte_order = MSBFirst above */
|
||||||
*dest++ = ((uch *)&pixel)[1];
|
*dest++ = (char)((pixel >> 8) & 0xff);
|
||||||
*dest++ = ((uch *)&pixel)[0];
|
*dest++ = (char)( pixel & 0xff);
|
||||||
}
|
}
|
||||||
} else /* if (rpng2_info.channels == 4) */ {
|
} else /* if (rpng2_info.channels == 4) */ {
|
||||||
for (i = rpng2_info.width; i > 0; --i) {
|
for (i = rpng2_info.width; i > 0; --i) {
|
||||||
@@ -1145,12 +1245,12 @@ static void rpng2_x_display_row(ulg row)
|
|||||||
green = ((ush)g << 8);
|
green = ((ush)g << 8);
|
||||||
blue = ((ush)b << 8);
|
blue = ((ush)b << 8);
|
||||||
}
|
}
|
||||||
pixel = ((red >> RPixelShift) & RedMask) |
|
pixel = ((red >> RShift) & RMask) |
|
||||||
((green >> GPixelShift) & GreenMask) |
|
((green >> GShift) & GMask) |
|
||||||
((blue >> BPixelShift) & BlueMask);
|
((blue >> BShift) & BMask);
|
||||||
/* recall that we set ximage->byte_order = MSBFirst */
|
/* recall that we set ximage->byte_order = MSBFirst above */
|
||||||
*dest++ = ((uch *)&pixel)[1];
|
*dest++ = (char)((pixel >> 8) & 0xff);
|
||||||
*dest++ = ((uch *)&pixel)[0];
|
*dest++ = (char)( pixel & 0xff);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1162,13 +1262,23 @@ static void rpng2_x_display_row(ulg row)
|
|||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------
|
/*---------------------------------------------------------------------------
|
||||||
Display after every 16 rows or when on last row. (Region may include
|
Display after every 16 rows or when on one of last two rows. (Region
|
||||||
previously displayed lines due to interlacing--i.e., not contiguous.)
|
may include previously displayed lines due to interlacing--i.e., not
|
||||||
|
contiguous. Also, second-to-last row is final one in interlaced images
|
||||||
|
with odd number of rows.) For demos, flush (and delay) after every 16th
|
||||||
|
row so "sparse" passes don't go twice as fast.
|
||||||
---------------------------------------------------------------------------*/
|
---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
if ((rows & 0xf) == 0 || row == rpng2_info.height-1) {
|
if (demo_timing && (row - firstrow >= 16 || row >= rpng2_info.height-2)) {
|
||||||
XPutImage(display, window, gc, ximage, 0, firstrow, 0, firstrow,
|
XPutImage(display, window, gc, ximage, 0, (int)firstrow, 0,
|
||||||
rpng2_info.width, row - firstrow + 1);
|
(int)firstrow, rpng2_info.width, row - firstrow + 1);
|
||||||
|
XFlush(display);
|
||||||
|
rows = 0;
|
||||||
|
usleep(usleep_duration);
|
||||||
|
} else
|
||||||
|
if (!demo_timing && ((rows & 0xf) == 0 || row >= rpng2_info.height-2)) {
|
||||||
|
XPutImage(display, window, gc, ximage, 0, (int)firstrow, 0,
|
||||||
|
(int)firstrow, rpng2_info.width, row - firstrow + 1);
|
||||||
XFlush(display);
|
XFlush(display);
|
||||||
rows = 0;
|
rows = 0;
|
||||||
}
|
}
|
||||||
@@ -1179,7 +1289,7 @@ static void rpng2_x_display_row(ulg row)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void rpng2_x_finish_display()
|
static void rpng2_x_finish_display(void)
|
||||||
{
|
{
|
||||||
Trace((stderr, "beginning rpng2_x_finish_display()\n"))
|
Trace((stderr, "beginning rpng2_x_finish_display()\n"))
|
||||||
|
|
||||||
@@ -1188,14 +1298,16 @@ static void rpng2_x_finish_display()
|
|||||||
* the image is done */
|
* the image is done */
|
||||||
|
|
||||||
rpng2_info.done = TRUE;
|
rpng2_info.done = TRUE;
|
||||||
printf("Done. Press Q, Esc or mouse button 1 to quit.\n");
|
printf(
|
||||||
|
"Done. Press Q, Esc or mouse button 1 (within image window) to quit.\n");
|
||||||
|
fflush(stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void rpng2_x_cleanup()
|
static void rpng2_x_cleanup(void)
|
||||||
{
|
{
|
||||||
if (bg_image && bg_data) {
|
if (bg_image && bg_data) {
|
||||||
free(bg_data);
|
free(bg_data);
|
||||||
@@ -1228,6 +1340,9 @@ static void rpng2_x_cleanup()
|
|||||||
|
|
||||||
if (have_colormap)
|
if (have_colormap)
|
||||||
XFreeColormap(display, colormap);
|
XFreeColormap(display, colormap);
|
||||||
|
|
||||||
|
if (have_nondefault_visual)
|
||||||
|
XFree(visual_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
BIN
contrib/gregbook/toucan.png
Normal file
BIN
contrib/gregbook/toucan.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
BIN
contrib/gregbook/wpng
Executable file
BIN
contrib/gregbook/wpng
Executable file
Binary file not shown.
@@ -19,7 +19,15 @@
|
|||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 1998-1999 Greg Roelofs. All rights reserved.
|
Changelog:
|
||||||
|
- 1.01: initial public release
|
||||||
|
- 1.02: modified to allow abbreviated options
|
||||||
|
- 1.03: removed extraneous character from usage screen; fixed bug in
|
||||||
|
command-line parsing
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Copyright (c) 1998-2000 Greg Roelofs. All rights reserved.
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
This software is provided "as is," without warranty of any kind,
|
||||||
express or implied. In no event shall the author or contributors
|
express or implied. In no event shall the author or contributors
|
||||||
@@ -45,7 +53,7 @@
|
|||||||
---------------------------------------------------------------------------*/
|
---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#define PROGNAME "wpng"
|
#define PROGNAME "wpng"
|
||||||
#define VERSION "1.01 of 31 March 1999"
|
#define VERSION "1.03 of 19 March 2000"
|
||||||
#define APPNAME "Simple PGM/PPM/PAM to PNG Converter"
|
#define APPNAME "Simple PGM/PPM/PAM to PNG Converter"
|
||||||
|
|
||||||
#if defined(__MSDOS__) || defined(__OS2__)
|
#if defined(__MSDOS__) || defined(__OS2__)
|
||||||
@@ -57,27 +65,27 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <setjmp.h> /* for jmpbuf declaration in writepng.h */
|
#include <setjmp.h> /* for jmpbuf declaration in writepng.h */
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
#ifdef DOS_OS2_W32
|
#ifdef DOS_OS2_W32
|
||||||
# include <io.h> /* for isatty(), setmode() prototypes */
|
# include <io.h> /* for isatty(), setmode() prototypes */
|
||||||
# include <fcntl.h> /* O_BINARY for fdopen() without text translation */
|
# include <fcntl.h> /* O_BINARY for fdopen() without text translation */
|
||||||
# ifdef __EMX__
|
# ifdef __EMX__
|
||||||
# ifndef getch
|
# ifndef getch
|
||||||
# define getch() _read_kbd(0, 1, 0) /* need getche() */
|
# define getch() _read_kbd(0, 1, 0) /* need getche() */
|
||||||
# endif
|
# endif
|
||||||
# else /* !__EMX__ */
|
# else /* !__EMX__ */
|
||||||
# ifdef __GO32__
|
# ifdef __GO32__
|
||||||
# include <pc.h>
|
# include <pc.h>
|
||||||
# define getch() getkey() /* GRR: need getche() */
|
# define getch() getkey() /* GRR: need getche() */
|
||||||
# else
|
# else
|
||||||
# include <conio.h> /* for getche() console input */
|
# include <conio.h> /* for getche() console input */
|
||||||
# endif
|
# endif
|
||||||
# endif /* ?__EMX__ */
|
# endif /* ?__EMX__ */
|
||||||
# define FGETS(buf,len,stream) dos_kbd_gets(buf,len)
|
# define FGETS(buf,len,stream) dos_kbd_gets(buf,len)
|
||||||
#else
|
#else
|
||||||
# include <unistd.h> /* for isatty() prototype */
|
# include <unistd.h> /* for isatty() prototype */
|
||||||
# define FGETS fgets
|
# define FGETS fgets
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -87,7 +95,7 @@
|
|||||||
text that includes control characters discouraged by the PNG spec; text
|
text that includes control characters discouraged by the PNG spec; text
|
||||||
that includes an escape character (27) must be re-entered regardless */
|
that includes an escape character (27) must be re-entered regardless */
|
||||||
|
|
||||||
#include "writepng.h" /* typedefs, common macros, writepng prototypes */
|
#include "writepng.h" /* typedefs, common macros, writepng prototypes */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -112,7 +120,7 @@ int main(int argc, char **argv)
|
|||||||
FILE *keybd;
|
FILE *keybd;
|
||||||
#endif
|
#endif
|
||||||
#ifdef sgi
|
#ifdef sgi
|
||||||
FILE *tmpfile; /* or we could just use keybd, since no overlap */
|
FILE *tmpfile; /* or we could just use keybd, since no overlap */
|
||||||
char tmpline[80];
|
char tmpline[80];
|
||||||
#endif
|
#endif
|
||||||
char *inname = NULL, outname[256];
|
char *inname = NULL, outname[256];
|
||||||
@@ -204,36 +212,40 @@ int main(int argc, char **argv)
|
|||||||
/* Now parse the command line for options and the PNM filename. */
|
/* Now parse the command line for options and the PNM filename. */
|
||||||
|
|
||||||
while (*++argv && !error) {
|
while (*++argv && !error) {
|
||||||
if (!strcmp(*argv, "-interlaced")) {
|
if (!strncmp(*argv, "-i", 2)) {
|
||||||
wpng_info.interlaced = TRUE;
|
wpng_info.interlaced = TRUE;
|
||||||
} else if (!strcmp(*argv, "-time")) {
|
} else if (!strncmp(*argv, "-time", 3)) {
|
||||||
wpng_info.modtime = time(NULL);
|
wpng_info.modtime = time(NULL);
|
||||||
wpng_info.have_time = TRUE;
|
wpng_info.have_time = TRUE;
|
||||||
} else if (!strcmp(*argv, "-text")) {
|
} else if (!strncmp(*argv, "-text", 3)) {
|
||||||
text = TRUE;
|
text = TRUE;
|
||||||
} else if (!strcmp(*argv, "-gamma")) {
|
} else if (!strncmp(*argv, "-gamma", 2)) {
|
||||||
if (!*++argv)
|
if (!*++argv)
|
||||||
++error;
|
++error;
|
||||||
wpng_info.gamma = atof(*argv);
|
|
||||||
if (wpng_info.gamma <= 0.0)
|
|
||||||
++error;
|
|
||||||
else if (wpng_info.gamma > 1.01)
|
|
||||||
fprintf(stderr, PROGNAME
|
|
||||||
" warning: file gammas are usually less than 1.0\n");
|
|
||||||
} else if (!strcmp(*argv, "-bgcolor")) {
|
|
||||||
if (!*++argv)
|
|
||||||
++error;
|
|
||||||
bgstr = *argv;
|
|
||||||
if (strlen(bgstr) != 7 || bgstr[0] != '#')
|
|
||||||
++error;
|
|
||||||
else {
|
else {
|
||||||
unsigned r, g, b; /* this approach quiets compiler warnings */
|
wpng_info.gamma = atof(*argv);
|
||||||
|
if (wpng_info.gamma <= 0.0)
|
||||||
|
++error;
|
||||||
|
else if (wpng_info.gamma > 1.01)
|
||||||
|
fprintf(stderr, PROGNAME
|
||||||
|
" warning: file gammas are usually less than 1.0\n");
|
||||||
|
}
|
||||||
|
} else if (!strncmp(*argv, "-bgcolor", 4)) {
|
||||||
|
if (!*++argv)
|
||||||
|
++error;
|
||||||
|
else {
|
||||||
|
bgstr = *argv;
|
||||||
|
if (strlen(bgstr) != 7 || bgstr[0] != '#')
|
||||||
|
++error;
|
||||||
|
else {
|
||||||
|
unsigned r, g, b; /* this way quiets compiler warnings */
|
||||||
|
|
||||||
sscanf(bgstr+1, "%2x%2x%2x", &r, &g, &b);
|
sscanf(bgstr+1, "%2x%2x%2x", &r, &g, &b);
|
||||||
wpng_info.bg_red = (uch)r;
|
wpng_info.bg_red = (uch)r;
|
||||||
wpng_info.bg_green = (uch)g;
|
wpng_info.bg_green = (uch)g;
|
||||||
wpng_info.bg_blue = (uch)b;
|
wpng_info.bg_blue = (uch)b;
|
||||||
wpng_info.have_bg = TRUE;
|
wpng_info.have_bg = TRUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (**argv != '-') {
|
if (**argv != '-') {
|
||||||
@@ -362,7 +374,7 @@ int main(int argc, char **argv)
|
|||||||
"\t\t (where LUT = lookup-table exponent and CRT = CRT exponent;\n"
|
"\t\t (where LUT = lookup-table exponent and CRT = CRT exponent;\n"
|
||||||
"\t\t first varies, second is usually 2.2, all are positive)\n"
|
"\t\t first varies, second is usually 2.2, all are positive)\n"
|
||||||
" bg \tdesired background color for alpha-channel images, in\n"
|
" bg \tdesired background color for alpha-channel images, in\n"
|
||||||
"\t\t 7-character hex RGB format (e.g., ``#ff7f00'' for orange:\n"
|
"\t\t 7-character hex RGB format (e.g., ``#ff7700'' for orange:\n"
|
||||||
"\t\t same as HTML colors)\n"
|
"\t\t same as HTML colors)\n"
|
||||||
" -text\tprompt interactively for text info (tEXt chunks)\n"
|
" -text\tprompt interactively for text info (tEXt chunks)\n"
|
||||||
" -time\tinclude a tIME chunk (last modification time)\n"
|
" -time\tinclude a tIME chunk (last modification time)\n"
|
||||||
@@ -419,7 +431,7 @@ int main(int argc, char **argv)
|
|||||||
wpng_info.have_text &= ~TEXT_TITLE;
|
wpng_info.have_text &= ~TEXT_TITLE;
|
||||||
valid = FALSE;
|
valid = FALSE;
|
||||||
#else
|
#else
|
||||||
if (p[result] == 27) { /* escape character */
|
if (p[result] == 27) { /* escape character */
|
||||||
wpng_info.have_text &= ~TEXT_TITLE;
|
wpng_info.have_text &= ~TEXT_TITLE;
|
||||||
valid = FALSE;
|
valid = FALSE;
|
||||||
}
|
}
|
||||||
@@ -449,7 +461,7 @@ int main(int argc, char **argv)
|
|||||||
wpng_info.have_text &= ~TEXT_AUTHOR;
|
wpng_info.have_text &= ~TEXT_AUTHOR;
|
||||||
valid = FALSE;
|
valid = FALSE;
|
||||||
#else
|
#else
|
||||||
if (p[result] == 27) { /* escape character */
|
if (p[result] == 27) { /* escape character */
|
||||||
wpng_info.have_text &= ~TEXT_AUTHOR;
|
wpng_info.have_text &= ~TEXT_AUTHOR;
|
||||||
valid = FALSE;
|
valid = FALSE;
|
||||||
}
|
}
|
||||||
@@ -489,7 +501,7 @@ int main(int argc, char **argv)
|
|||||||
wpng_info.have_text &= ~TEXT_DESC;
|
wpng_info.have_text &= ~TEXT_DESC;
|
||||||
valid = FALSE;
|
valid = FALSE;
|
||||||
#else
|
#else
|
||||||
if (p[result] == 27) { /* escape character */
|
if (p[result] == 27) { /* escape character */
|
||||||
wpng_info.have_text &= ~TEXT_DESC;
|
wpng_info.have_text &= ~TEXT_DESC;
|
||||||
valid = FALSE;
|
valid = FALSE;
|
||||||
}
|
}
|
||||||
@@ -519,7 +531,7 @@ int main(int argc, char **argv)
|
|||||||
wpng_info.have_text &= ~TEXT_COPY;
|
wpng_info.have_text &= ~TEXT_COPY;
|
||||||
valid = FALSE;
|
valid = FALSE;
|
||||||
#else
|
#else
|
||||||
if (p[result] == 27) { /* escape character */
|
if (p[result] == 27) { /* escape character */
|
||||||
wpng_info.have_text &= ~TEXT_COPY;
|
wpng_info.have_text &= ~TEXT_COPY;
|
||||||
valid = FALSE;
|
valid = FALSE;
|
||||||
}
|
}
|
||||||
@@ -549,7 +561,7 @@ int main(int argc, char **argv)
|
|||||||
wpng_info.have_text &= ~TEXT_EMAIL;
|
wpng_info.have_text &= ~TEXT_EMAIL;
|
||||||
valid = FALSE;
|
valid = FALSE;
|
||||||
#else
|
#else
|
||||||
if (p[result] == 27) { /* escape character */
|
if (p[result] == 27) { /* escape character */
|
||||||
wpng_info.have_text &= ~TEXT_EMAIL;
|
wpng_info.have_text &= ~TEXT_EMAIL;
|
||||||
valid = FALSE;
|
valid = FALSE;
|
||||||
}
|
}
|
||||||
@@ -579,7 +591,7 @@ int main(int argc, char **argv)
|
|||||||
wpng_info.have_text &= ~TEXT_URL;
|
wpng_info.have_text &= ~TEXT_URL;
|
||||||
valid = FALSE;
|
valid = FALSE;
|
||||||
#else
|
#else
|
||||||
if (p[result] == 27) { /* escape character */
|
if (p[result] == 27) { /* escape character */
|
||||||
wpng_info.have_text &= ~TEXT_URL;
|
wpng_info.have_text &= ~TEXT_URL;
|
||||||
valid = FALSE;
|
valid = FALSE;
|
||||||
}
|
}
|
||||||
@@ -755,7 +767,7 @@ static int wpng_isvalid_latin1(uch *p, int len)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void wpng_cleanup()
|
static void wpng_cleanup(void)
|
||||||
{
|
{
|
||||||
if (wpng_info.outfile) {
|
if (wpng_info.outfile) {
|
||||||
fclose(wpng_info.outfile);
|
fclose(wpng_info.outfile);
|
||||||
@@ -791,11 +803,11 @@ static char *dos_kbd_gets(char *buf, int len)
|
|||||||
buf[count++] = ch = getche();
|
buf[count++] = ch = getche();
|
||||||
} while (ch != '\r' && count < len-1);
|
} while (ch != '\r' && count < len-1);
|
||||||
|
|
||||||
buf[count--] = '\0'; /* terminate string */
|
buf[count--] = '\0'; /* terminate string */
|
||||||
if (buf[count] == '\r') /* Enter key makes CR, so change to newline */
|
if (buf[count] == '\r') /* Enter key makes CR, so change to newline */
|
||||||
buf[count] = '\n';
|
buf[count] = '\n';
|
||||||
|
|
||||||
fprintf(stderr, "\n"); /* Enter key does *not* cause a newline */
|
fprintf(stderr, "\n"); /* Enter key does *not* cause a newline */
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
|
|
||||||
return buf;
|
return buf;
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 1998-1999 Greg Roelofs. All rights reserved.
|
Copyright (c) 1998-2000 Greg Roelofs. All rights reserved.
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
This software is provided "as is," without warranty of any kind,
|
||||||
express or implied. In no event shall the author or contributors
|
express or implied. In no event shall the author or contributors
|
||||||
@@ -30,10 +30,10 @@
|
|||||||
---------------------------------------------------------------------------*/
|
---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
#include <stdlib.h> /* for exit() prototype */
|
#include <stdlib.h> /* for exit() prototype */
|
||||||
|
|
||||||
#include "png.h" /* libpng header; includes zlib.h and setjmp.h */
|
#include "png.h" /* libpng header; includes zlib.h and setjmp.h */
|
||||||
#include "writepng.h" /* typedefs, common macros, public prototypes */
|
#include "writepng.h" /* typedefs, common macros, public prototypes */
|
||||||
|
|
||||||
|
|
||||||
/* local prototype */
|
/* local prototype */
|
||||||
@@ -42,7 +42,7 @@ static void writepng_error_handler(png_structp png_ptr, png_const_charp msg);
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void writepng_version_info()
|
void writepng_version_info(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, " Compiled with libpng %s; using libpng %s.\n",
|
fprintf(stderr, " Compiled with libpng %s; using libpng %s.\n",
|
||||||
PNG_LIBPNG_VER_STRING, png_libpng_ver);
|
PNG_LIBPNG_VER_STRING, png_libpng_ver);
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 1998-1999 Greg Roelofs. All rights reserved.
|
Copyright (c) 1998-2000 Greg Roelofs. All rights reserved.
|
||||||
|
|
||||||
This software is provided "as is," without warranty of any kind,
|
This software is provided "as is," without warranty of any kind,
|
||||||
express or implied. In no event shall the author or contributors
|
express or implied. In no event shall the author or contributors
|
||||||
|
|||||||
52
contrib/pngminus/makefile
Normal file
52
contrib/pngminus/makefile
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
# Makefile for PngMinus (png2pnm and pnm2png)
|
||||||
|
# Linux / Unix
|
||||||
|
|
||||||
|
CC=cc -O -n32
|
||||||
|
LD=cc -O -n32
|
||||||
|
#CC=gcc -O
|
||||||
|
#LD=gcc -O
|
||||||
|
LB=ar
|
||||||
|
RM=rm
|
||||||
|
CP=cp
|
||||||
|
|
||||||
|
PNGPATH = /usr/local
|
||||||
|
PNGINC = $(PNGPATH)/include
|
||||||
|
PNGLIB = $(PNGPATH)/lib -lpng
|
||||||
|
# PNGLIB = $(PNGPATH)/libpng.a
|
||||||
|
|
||||||
|
ZPATH = /usr/local
|
||||||
|
ZINC = $(ZPATH)/include
|
||||||
|
ZLIB = $(ZPATH)/lib -lz
|
||||||
|
# ZLIB = $(ZPATH)/libz.a
|
||||||
|
|
||||||
|
CCFLAGS=-I$(PNGINC) -I$(ZINC)
|
||||||
|
LDFLAGS=-L$(PNGLIB) -L$(ZLIB) -lm
|
||||||
|
C=.c
|
||||||
|
O=.o
|
||||||
|
L=.a
|
||||||
|
E=
|
||||||
|
|
||||||
|
# dependencies
|
||||||
|
|
||||||
|
all: png2pnm$(E) pnm2png$(E)
|
||||||
|
|
||||||
|
png2pnm$(O): png2pnm$(C)
|
||||||
|
$(CC) -c $(CCFLAGS) png2pnm$(C)
|
||||||
|
|
||||||
|
png2pnm$(E): png2pnm$(O)
|
||||||
|
$(LD) -o png2pnm$(E) png2pnm$(O) $(LDFLAGS)
|
||||||
|
|
||||||
|
pnm2png$(O): pnm2png$(C)
|
||||||
|
$(CC) -c $(CCFLAGS) pnm2png$(C)
|
||||||
|
|
||||||
|
pnm2png$(E): pnm2png$(O)
|
||||||
|
$(LD) -o pnm2png$(E) pnm2png$(O) $(LDFLAGS)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(RM) png2pnm$(O)
|
||||||
|
$(RM) pnm2png$(O)
|
||||||
|
$(RM) png2pnm$(E)
|
||||||
|
$(RM) pnm2png$(E)
|
||||||
|
|
||||||
|
# End of makefile for png2pnm / pnm2png
|
||||||
|
|
||||||
@@ -42,6 +42,11 @@
|
|||||||
|
|
||||||
#include "png.h"
|
#include "png.h"
|
||||||
|
|
||||||
|
/* Define png_jmpbuf() in case we are using a pre-1.0.6 version of libpng */
|
||||||
|
#ifndef png_jmpbuf
|
||||||
|
# define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* function prototypes */
|
/* function prototypes */
|
||||||
|
|
||||||
int main (int argc, char *argv[]);
|
int main (int argc, char *argv[]);
|
||||||
@@ -223,7 +228,7 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file, BOOL raw, BOOL a
|
|||||||
return FALSE; /* out of memory */
|
return FALSE; /* out of memory */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (setjmp (png_ptr->jmpbuf))
|
if (setjmp (png_jmpbuf(png_ptr)))
|
||||||
{
|
{
|
||||||
png_destroy_read_struct (&png_ptr, &info_ptr, NULL);
|
png_destroy_read_struct (&png_ptr, &info_ptr, NULL);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|||||||
@@ -40,6 +40,11 @@
|
|||||||
|
|
||||||
#include "png.h"
|
#include "png.h"
|
||||||
|
|
||||||
|
/* Define png_jmpbuf() in case we are using a pre-1.0.6 version of libpng */
|
||||||
|
#ifndef png_jmpbuf
|
||||||
|
# define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* function prototypes */
|
/* function prototypes */
|
||||||
|
|
||||||
int main (int argc, char *argv[]);
|
int main (int argc, char *argv[]);
|
||||||
@@ -77,7 +82,8 @@ int main(int argc, char *argv[])
|
|||||||
if ((fp_al = fopen (argv[argi], "rb")) == NULL)
|
if ((fp_al = fopen (argv[argi], "rb")) == NULL)
|
||||||
{
|
{
|
||||||
fprintf (stderr, "PNM2PNG\n");
|
fprintf (stderr, "PNM2PNG\n");
|
||||||
fprintf (stderr, "Error: alpha-channel file %s does not exist\n", argv[argi]);
|
fprintf (stderr, "Error: alpha-channel file %s does not exist\n",
|
||||||
|
argv[argi]);
|
||||||
exit (1);
|
exit (1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -385,7 +391,7 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* setjmp() must be called in every function that calls a PNG-reading libpng function */
|
/* setjmp() must be called in every function that calls a PNG-reading libpng function */
|
||||||
if (setjmp (png_ptr->jmpbuf))
|
if (setjmp (png_jmpbuf(png_ptr)))
|
||||||
{
|
{
|
||||||
png_destroy_write_struct (&png_ptr, (png_infopp) NULL);
|
png_destroy_write_struct (&png_ptr, (png_infopp) NULL);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@@ -511,8 +517,8 @@ png_uint_32 get_value (FILE *pnm_file, int depth)
|
|||||||
for (i = 0; i < depth; i++)
|
for (i = 0; i < depth; i++)
|
||||||
mask = (mask << 1) | 0x01;
|
mask = (mask << 1) | 0x01;
|
||||||
|
|
||||||
get_token (pnm_file, token);
|
get_token (pnm_file, (char *) token);
|
||||||
sscanf (token, "%lu", &ret_value);
|
sscanf ((const char *) token, "%lu", &ret_value);
|
||||||
|
|
||||||
ret_value &= mask;
|
ret_value &= mask;
|
||||||
|
|
||||||
|
|||||||
96
example.c
96
example.c
@@ -6,17 +6,28 @@
|
|||||||
/* This is an example of how to use libpng to read and write PNG files.
|
/* This is an example of how to use libpng to read and write PNG files.
|
||||||
* The file libpng.txt is much more verbose then this. If you have not
|
* The file libpng.txt is much more verbose then this. If you have not
|
||||||
* read it, do so first. This was designed to be a starting point of an
|
* read it, do so first. This was designed to be a starting point of an
|
||||||
* implementation. This is not officially part of libpng, and therefore
|
* implementation. This is not officially part of libpng, is hereby placed
|
||||||
* does not require a copyright notice.
|
* in the public domain, and therefore does not require a copyright notice.
|
||||||
*
|
*
|
||||||
* This file does not currently compile, because it is missing certain
|
* This file does not currently compile, because it is missing certain
|
||||||
* parts, like allocating memory to hold an image. You will have to
|
* parts, like allocating memory to hold an image. You will have to
|
||||||
* supply these parts to get it to compile. For an example of a minimal
|
* supply these parts to get it to compile. For an example of a minimal
|
||||||
* working PNG reader/writer, see pngtest.c, included in this distribution.
|
* working PNG reader/writer, see pngtest.c, included in this distribution;
|
||||||
|
* see also the programs in the contrib directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "png.h"
|
#include "png.h"
|
||||||
|
|
||||||
|
/* The png_jmpbuf() macro, used in error handling, became available in
|
||||||
|
* libpng version 1.0.6. If you want to be able to run your code with older
|
||||||
|
* versions of libpng, you must define the macro yourself (but only if it
|
||||||
|
* is not already defined by libpng!).
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef png_jmpbuf
|
||||||
|
# define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Check to see if a file is a PNG file using png_sig_cmp(). png_sig_cmp()
|
/* Check to see if a file is a PNG file using png_sig_cmp(). png_sig_cmp()
|
||||||
* returns zero if the image is a PNG and nonzero if it isn't a PNG.
|
* returns zero if the image is a PNG and nonzero if it isn't a PNG.
|
||||||
*
|
*
|
||||||
@@ -43,7 +54,7 @@ int check_if_png(char *file_name, FILE **fp)
|
|||||||
char buf[PNG_BYTES_TO_CHECK];
|
char buf[PNG_BYTES_TO_CHECK];
|
||||||
|
|
||||||
/* Open the prospective PNG file. */
|
/* Open the prospective PNG file. */
|
||||||
if ((*fp = fopen(file_name, "rb")) != NULL);
|
if ((*fp = fopen(file_name, "rb")) == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Read in some of the signature bytes */
|
/* Read in some of the signature bytes */
|
||||||
@@ -111,7 +122,8 @@ void read_png(FILE *fp, unsigned int sig_read) /* file is already open */
|
|||||||
* the normal method of doing things with libpng). REQUIRED unless you
|
* the normal method of doing things with libpng). REQUIRED unless you
|
||||||
* set up your own error handlers in the png_create_read_struct() earlier.
|
* set up your own error handlers in the png_create_read_struct() earlier.
|
||||||
*/
|
*/
|
||||||
if (setjmp(png_ptr->jmpbuf))
|
|
||||||
|
if (setjmp(png_jmpbuf(png_ptr)))
|
||||||
{
|
{
|
||||||
/* Free all of the memory associated with the png_ptr and info_ptr */
|
/* Free all of the memory associated with the png_ptr and info_ptr */
|
||||||
png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
|
png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
|
||||||
@@ -136,6 +148,19 @@ void read_png(FILE *fp, unsigned int sig_read) /* file is already open */
|
|||||||
/* If we have already read some of the signature */
|
/* If we have already read some of the signature */
|
||||||
png_set_sig_bytes(png_ptr, sig_read);
|
png_set_sig_bytes(png_ptr, sig_read);
|
||||||
|
|
||||||
|
#ifdef hilevel
|
||||||
|
/*
|
||||||
|
* If you have enough memory to read in the entire image at once,
|
||||||
|
* and you need to specify only transforms that can be controlled
|
||||||
|
* with one of the PNG_TRANSFORM_* bits (this presently excludes
|
||||||
|
* dithering, filling, setting background, and doing gamma
|
||||||
|
* adjustment), then you can read the entire image (including
|
||||||
|
* pixels) into the info structure with this call:
|
||||||
|
*/
|
||||||
|
png_read_png(png_ptr, info_ptr, png_transforms, NULL);
|
||||||
|
#else
|
||||||
|
/* OK, you're doing it the hard way, with the lower-level functions */
|
||||||
|
|
||||||
/* The call to png_read_info() gives us all of the information from the
|
/* The call to png_read_info() gives us all of the information from the
|
||||||
* PNG file before the first IDAT (image data chunk). REQUIRED
|
* PNG file before the first IDAT (image data chunk). REQUIRED
|
||||||
*/
|
*/
|
||||||
@@ -218,7 +243,7 @@ void read_png(FILE *fp, unsigned int sig_read) /* file is already open */
|
|||||||
screen_gamma = 1.7 or 1.0; /* A good guess for Mac systems */
|
screen_gamma = 1.7 or 1.0; /* A good guess for Mac systems */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Tell libpng to handle the gamma conversion for you. The second call
|
/* Tell libpng to handle the gamma conversion for you. The final call
|
||||||
* is a good guess for PC generated images, but it should be configurable
|
* is a good guess for PC generated images, but it should be configurable
|
||||||
* by the user at run time by the user. It is strongly suggested that
|
* by the user at run time by the user. It is strongly suggested that
|
||||||
* your application support gamma correction.
|
* your application support gamma correction.
|
||||||
@@ -227,7 +252,7 @@ void read_png(FILE *fp, unsigned int sig_read) /* file is already open */
|
|||||||
int intent;
|
int intent;
|
||||||
|
|
||||||
if (png_get_sRGB(png_ptr, info_ptr, &intent))
|
if (png_get_sRGB(png_ptr, info_ptr, &intent))
|
||||||
png_set_sRGB(png_ptr, info_ptr, intent);
|
png_set_gamma(png_ptr, screen_gamma, 0.45455);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
double image_gamma;
|
double image_gamma;
|
||||||
@@ -275,7 +300,7 @@ void read_png(FILE *fp, unsigned int sig_read) /* file is already open */
|
|||||||
*/
|
*/
|
||||||
if (png_get_valid(png_ptr, info_ptr, PNG_INFO_sBIT))
|
if (png_get_valid(png_ptr, info_ptr, PNG_INFO_sBIT))
|
||||||
{
|
{
|
||||||
png_color8p sig_bit;
|
png_color_8p sig_bit;
|
||||||
|
|
||||||
png_get_sBIT(png_ptr, info_ptr, &sig_bit);
|
png_get_sBIT(png_ptr, info_ptr, &sig_bit);
|
||||||
png_set_shift(png_ptr, sig_bit);
|
png_set_shift(png_ptr, sig_bit);
|
||||||
@@ -350,6 +375,9 @@ void read_png(FILE *fp, unsigned int sig_read) /* file is already open */
|
|||||||
|
|
||||||
/* read rest of file, and get additional chunks in info_ptr - REQUIRED */
|
/* read rest of file, and get additional chunks in info_ptr - REQUIRED */
|
||||||
png_read_end(png_ptr, info_ptr);
|
png_read_end(png_ptr, info_ptr);
|
||||||
|
#endif hilevel
|
||||||
|
|
||||||
|
/* At this point you have read the entire image */
|
||||||
|
|
||||||
/* clean up after the read, and free any memory allocated - REQUIRED */
|
/* clean up after the read, and free any memory allocated - REQUIRED */
|
||||||
png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
|
png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
|
||||||
@@ -389,7 +417,7 @@ initialize_png_reader(png_structp *png_ptr, png_infop *info_ptr)
|
|||||||
return ERROR;
|
return ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (setjmp((*png_ptr)->jmpbuf))
|
if (setjmp(png_jmpbuf((*png_ptr))))
|
||||||
{
|
{
|
||||||
png_destroy_read_struct(png_ptr, info_ptr, (png_infopp)NULL);
|
png_destroy_read_struct(png_ptr, info_ptr, (png_infopp)NULL);
|
||||||
return ERROR;
|
return ERROR;
|
||||||
@@ -417,7 +445,7 @@ int
|
|||||||
process_data(png_structp *png_ptr, png_infop *info_ptr,
|
process_data(png_structp *png_ptr, png_infop *info_ptr,
|
||||||
png_bytep buffer, png_uint_32 length)
|
png_bytep buffer, png_uint_32 length)
|
||||||
{
|
{
|
||||||
if (setjmp((*png_ptr)->jmpbuf))
|
if (setjmp(png_jmpbuf((*png_ptr))))
|
||||||
{
|
{
|
||||||
/* Free the png_ptr and info_ptr memory on error */
|
/* Free the png_ptr and info_ptr memory on error */
|
||||||
png_destroy_read_struct(png_ptr, info_ptr, (png_infopp)NULL);
|
png_destroy_read_struct(png_ptr, info_ptr, (png_infopp)NULL);
|
||||||
@@ -499,6 +527,7 @@ void write_png(char *file_name /* , ... other image information ... */)
|
|||||||
FILE *fp;
|
FILE *fp;
|
||||||
png_structp png_ptr;
|
png_structp png_ptr;
|
||||||
png_infop info_ptr;
|
png_infop info_ptr;
|
||||||
|
png_colorp palette;
|
||||||
|
|
||||||
/* open the file */
|
/* open the file */
|
||||||
fp = fopen(file_name, "wb");
|
fp = fopen(file_name, "wb");
|
||||||
@@ -530,13 +559,13 @@ void write_png(char *file_name /* , ... other image information ... */)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Set error handling. REQUIRED if you aren't supplying your own
|
/* Set error handling. REQUIRED if you aren't supplying your own
|
||||||
* error hadnling functions in the png_create_write_struct() call.
|
* error handling functions in the png_create_write_struct() call.
|
||||||
*/
|
*/
|
||||||
if (setjmp(png_ptr->jmpbuf))
|
if (setjmp(png_jmpbuf(png_ptr)))
|
||||||
{
|
{
|
||||||
/* If we get here, we had a problem reading the file */
|
/* If we get here, we had a problem reading the file */
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
png_destroy_write_struct(&png_ptr, (png_infopp)NULL);
|
png_destroy_write_struct(&png_ptr, (png_infopp)info_ptr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -552,6 +581,15 @@ void write_png(char *file_name /* , ... other image information ... */)
|
|||||||
/* where user_io_ptr is a structure you want available to the callbacks */
|
/* where user_io_ptr is a structure you want available to the callbacks */
|
||||||
#endif no_streams /* only use one initialization method */
|
#endif no_streams /* only use one initialization method */
|
||||||
|
|
||||||
|
#ifdef hilevel
|
||||||
|
/* This is the easy way. Use it if you already have all the
|
||||||
|
* image info living info in the structure. You could "|" many
|
||||||
|
* PNG_TRANSFORM flags into the png_transforms integer here.
|
||||||
|
*/
|
||||||
|
png_write_png(png_ptr, info_ptr, png_transforms, NULL);
|
||||||
|
#else
|
||||||
|
/* This is the hard way */
|
||||||
|
|
||||||
/* Set the image information here. Width and height are up to 2^31,
|
/* Set the image information here. Width and height are up to 2^31,
|
||||||
* bit_depth is one of 1, 2, 4, 8, or 16, but valid values also depend on
|
* bit_depth is one of 1, 2, 4, 8, or 16, but valid values also depend on
|
||||||
* the color_type selected. color_type is one of PNG_COLOR_TYPE_GRAY,
|
* the color_type selected. color_type is one of PNG_COLOR_TYPE_GRAY,
|
||||||
@@ -567,6 +605,9 @@ void write_png(char *file_name /* , ... other image information ... */)
|
|||||||
palette = (png_colorp)png_malloc(png_ptr, 256 * sizeof (png_color));
|
palette = (png_colorp)png_malloc(png_ptr, 256 * sizeof (png_color));
|
||||||
/* ... set palette colors ... */
|
/* ... set palette colors ... */
|
||||||
png_set_PLTE(png_ptr, info_ptr, palette, 256);
|
png_set_PLTE(png_ptr, info_ptr, palette, 256);
|
||||||
|
/* You must not free palette here, because png_set_PLTE only makes a link to
|
||||||
|
the palette that you malloced. Wait until you are about to destroy
|
||||||
|
the png structure. */
|
||||||
|
|
||||||
/* optional significant bit chunk */
|
/* optional significant bit chunk */
|
||||||
/* if we are dealing with a grayscale image then */
|
/* if we are dealing with a grayscale image then */
|
||||||
@@ -603,7 +644,7 @@ void write_png(char *file_name /* , ... other image information ... */)
|
|||||||
png_set_text(png_ptr, info_ptr, text_ptr, 3);
|
png_set_text(png_ptr, info_ptr, text_ptr, 3);
|
||||||
|
|
||||||
/* other optional chunks like cHRM, bKGD, tRNS, tIME, oFFs, pHYs, */
|
/* other optional chunks like cHRM, bKGD, tRNS, tIME, oFFs, pHYs, */
|
||||||
/* note that if sRGB is present the cHRM chunk must be ignored
|
/* note that if sRGB is present the gAMA and cHRM chunks must be ignored
|
||||||
* on read and must be written in accordance with the sRGB profile */
|
* on read and must be written in accordance with the sRGB profile */
|
||||||
|
|
||||||
/* Write the file header information. REQUIRED */
|
/* Write the file header information. REQUIRED */
|
||||||
@@ -615,6 +656,9 @@ void write_png(char *file_name /* , ... other image information ... */)
|
|||||||
* png_write_info_before_PLTE(write_ptr, write_info_ptr);
|
* png_write_info_before_PLTE(write_ptr, write_info_ptr);
|
||||||
* write_my_chunk();
|
* write_my_chunk();
|
||||||
* png_write_info(png_ptr, info_ptr);
|
* png_write_info(png_ptr, info_ptr);
|
||||||
|
*
|
||||||
|
* However, given the level of known- and unknown-chunk support in 1.1.0
|
||||||
|
* and up, this should no longer be necessary.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Once we write out the header, the compression type on the text
|
/* Once we write out the header, the compression type on the text
|
||||||
@@ -666,10 +710,10 @@ void write_png(char *file_name /* , ... other image information ... */)
|
|||||||
* use the first method if you aren't handling interlacing yourself.
|
* use the first method if you aren't handling interlacing yourself.
|
||||||
*/
|
*/
|
||||||
png_uint_32 k, height, width;
|
png_uint_32 k, height, width;
|
||||||
png_byte image[height][width];
|
png_byte image[height][width*bytes_per_pixel];
|
||||||
png_bytep row_pointers[height];
|
png_bytep row_pointers[height];
|
||||||
for (k = 0; k < height; k++)
|
for (k = 0; k < height; k++)
|
||||||
row_pointers[k] = image + k*width;
|
row_pointers[k] = image + k*width*bytes_per_pixel;
|
||||||
|
|
||||||
/* One of the following output methods is REQUIRED */
|
/* One of the following output methods is REQUIRED */
|
||||||
#ifdef entire /* write out the entire image data in one call */
|
#ifdef entire /* write out the entire image data in one call */
|
||||||
@@ -695,17 +739,29 @@ void write_png(char *file_name /* , ... other image information ... */)
|
|||||||
#endif no_entire /* use only one output method */
|
#endif no_entire /* use only one output method */
|
||||||
|
|
||||||
/* You can write optional chunks like tEXt, zTXt, and tIME at the end
|
/* You can write optional chunks like tEXt, zTXt, and tIME at the end
|
||||||
* as well.
|
* as well. Shouldn't be necessary in 1.1.0 and up as all the public
|
||||||
|
* chunks are supported and you can use png_set_unknown_chunks() to
|
||||||
|
* register unknown chunks into the info structure to be written out.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* It is REQUIRED to call this to finish writing the rest of the file */
|
/* It is REQUIRED to call this to finish writing the rest of the file */
|
||||||
png_write_end(png_ptr, info_ptr);
|
png_write_end(png_ptr, info_ptr);
|
||||||
|
#endif hilevel
|
||||||
|
|
||||||
/* if you malloced the palette, free it here */
|
/* If you png_malloced a palette, free it here (don't free info_ptr->palette,
|
||||||
free(info_ptr->palette);
|
as recommended in versions 1.0.5m and earlier of this example; if
|
||||||
|
libpng mallocs info_ptr->palette, libpng will free it). If you
|
||||||
|
allocated it with malloc() instead of png_malloc(), use free() instead
|
||||||
|
of png_free(). */
|
||||||
|
png_free(png_ptr, palette);
|
||||||
|
|
||||||
|
/* Similarly, if you png_malloced any data that you passed in with
|
||||||
|
png_set_something(), such as a hist or trans array, free it here,
|
||||||
|
when you can be sure that libpng is through with it. */
|
||||||
|
png_free(png_ptr, trans);
|
||||||
|
|
||||||
/* clean up after the write, and free any memory allocated */
|
/* clean up after the write, and free any memory allocated */
|
||||||
png_destroy_write_struct(&png_ptr, (png_infopp)NULL);
|
png_destroy_write_struct(&png_ptr, (png_infopp)info_ptr);
|
||||||
|
|
||||||
/* close the file */
|
/* close the file */
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
|||||||
752
libpng.txt
752
libpng.txt
File diff suppressed because it is too large
Load Diff
16
libpngpf.3
16
libpngpf.3
@@ -1,6 +1,6 @@
|
|||||||
.TH LIBPNGPF 3 December 10, 1999
|
.TH LIBPNGPF 3 April 14, 2000
|
||||||
.SH NAME
|
.SH NAME
|
||||||
libpng \- Portable Network Graphics (PNG) Reference Library 1.0.5h
|
libpng \- Portable Network Graphics (PNG) Reference Library 1.0.6f
|
||||||
(private functions)
|
(private functions)
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
\fB#include <png.h>\fP
|
\fB#include <png.h>\fP
|
||||||
@@ -55,6 +55,10 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.0.5h
|
|||||||
|
|
||||||
\fI\fB
|
\fI\fB
|
||||||
|
|
||||||
|
\fBpng_charp png_decompress_chunk (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fIcomp_type\fP\fB, png_charp \fP\fIchunkdata\fP\fB, png_size_t \fP\fIchunklength\fP\fB, png_size_t \fP\fIprefix_length\fP\fB, png_size_t \fI*data_length\fP\fB);\fP
|
||||||
|
|
||||||
|
\fI\fB
|
||||||
|
|
||||||
\fBvoid png_destroy_struct (png_voidp \fIstruct_ptr\fP\fB);\fP
|
\fBvoid png_destroy_struct (png_voidp \fIstruct_ptr\fP\fB);\fP
|
||||||
|
|
||||||
\fI\fB
|
\fI\fB
|
||||||
@@ -187,6 +191,10 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.0.5h
|
|||||||
|
|
||||||
\fI\fB
|
\fI\fB
|
||||||
|
|
||||||
|
\fBint png_handle_as_unknown (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fIchunk_name\fP\fB);\fP
|
||||||
|
|
||||||
|
\fI\fB
|
||||||
|
|
||||||
\fBvoid png_handle_bKGD (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
|
\fBvoid png_handle_bKGD (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
|
||||||
|
|
||||||
\fI\fB
|
\fI\fB
|
||||||
@@ -505,9 +513,7 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.0.5h
|
|||||||
|
|
||||||
\fI\fB
|
\fI\fB
|
||||||
|
|
||||||
\fBvoid png_write_sPLT (png_structp \fP\fIpng_ptr\fP\fB, \fIpng_spalette_p
|
\fBvoid png_write_sPLT (png_structp \fP\fIpng_ptr\fP\fB, png_spalette_p \fIpalette\fP\fB);\fP
|
||||||
|
|
||||||
\fI\fBpalette\fP\fB);\fP
|
|
||||||
|
|
||||||
\fI\fB
|
\fI\fB
|
||||||
|
|
||||||
|
|||||||
8
png.5
8
png.5
@@ -1,4 +1,4 @@
|
|||||||
.TH PNG 5 "December 10, 1999"
|
.TH PNG 5 "April 14, 2000"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
png \- Portable Network Graphics (PNG) format
|
png \- Portable Network Graphics (PNG) format
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
@@ -20,10 +20,12 @@ platforms.
|
|||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
.IR libpng(3), zlib(3), deflate(5), and zlib(5)
|
.IR libpng(3), zlib(3), deflate(5), and zlib(5)
|
||||||
.LP
|
.LP
|
||||||
PNG 1.1 specification, January 1999:
|
PNG 1.2 specification, July 1999:
|
||||||
.IP
|
.IP
|
||||||
.br
|
.br
|
||||||
http://www.cdrom.com/pub/png
|
http://www.cdrom.com/pub/png (moving to http://www.libpng.org)
|
||||||
|
.br
|
||||||
|
or ftp://ftp.uu.net/graphics/png/documents
|
||||||
.LP
|
.LP
|
||||||
PNG 1.0 specification, October 1996:
|
PNG 1.0 specification, October 1996:
|
||||||
.IP
|
.IP
|
||||||
|
|||||||
266
png.c
266
png.c
@@ -1,24 +1,27 @@
|
|||||||
|
|
||||||
/* png.c - location for general purpose libpng functions
|
/* png.c - location for general purpose libpng functions
|
||||||
*
|
*
|
||||||
* libpng version 1.0.5h - December 10, 1999
|
* libpng version 1.0.6f - April 14, 2000
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, 1999 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define PNG_INTERNAL
|
#define PNG_INTERNAL
|
||||||
#define PNG_NO_EXTERN
|
#define PNG_NO_EXTERN
|
||||||
|
#include <assert.h>
|
||||||
#include "png.h"
|
#include "png.h"
|
||||||
|
|
||||||
|
/* Generate a compiler error if there is an old png.h in the search path. */
|
||||||
|
typedef version_1_0_6f Your_png_h_is_not_version_1_0_6f;
|
||||||
|
|
||||||
/* Version information for C files. This had better match the version
|
/* Version information for C files. This had better match the version
|
||||||
* string defined in png.h.
|
* string defined in png.h. */
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef PNG_USE_GLOBAL_ARRAYS
|
#ifdef PNG_USE_GLOBAL_ARRAYS
|
||||||
/* png_libpng_ver was changed to a function in version 1.0.5c */
|
/* png_libpng_ver was changed to a function in version 1.0.5c */
|
||||||
char png_libpng_ver[12] = "1.0.5h";
|
char png_libpng_ver[12] = "1.0.6f";
|
||||||
|
|
||||||
/* png_sig was changed to a function in version 1.0.5c */
|
/* png_sig was changed to a function in version 1.0.5c */
|
||||||
/* Place to hold the signature string for a PNG file. */
|
/* Place to hold the signature string for a PNG file. */
|
||||||
@@ -61,10 +64,10 @@ int FARDATA png_pass_ystart[] = {0, 0, 4, 0, 2, 0, 1};
|
|||||||
/* offset to next interlace block in the y direction */
|
/* offset to next interlace block in the y direction */
|
||||||
int FARDATA png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2};
|
int FARDATA png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2};
|
||||||
|
|
||||||
/* Width of interlace block. This is not currently used - if you need
|
/* width of interlace block (used in assembler routines only) */
|
||||||
* it, uncomment it here and in png.h
|
#ifdef PNG_HAVE_ASSEMBLER_COMBINE_ROW
|
||||||
int FARDATA png_pass_width[] = {8, 4, 4, 2, 2, 1, 1};
|
int FARDATA png_pass_width[] = {8, 4, 4, 2, 2, 1, 1};
|
||||||
*/
|
#endif
|
||||||
|
|
||||||
/* Height of interlace block. This is not currently used - if you need
|
/* Height of interlace block. This is not currently used - if you need
|
||||||
* it, uncomment it here and in png.h
|
* it, uncomment it here and in png.h
|
||||||
@@ -258,56 +261,82 @@ png_info_init(png_infop info_ptr)
|
|||||||
png_memset(info_ptr, 0, sizeof (png_info));
|
png_memset(info_ptr, 0, sizeof (png_info));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
png_data_freer(png_structp png_ptr, png_infop info_ptr,
|
||||||
|
int freer, png_uint_32 mask)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_data_freer\n");
|
||||||
|
if (png_ptr == NULL || info_ptr == NULL)
|
||||||
|
return;
|
||||||
|
if(freer == PNG_DESTROY_WILL_FREE_DATA)
|
||||||
|
info_ptr->free_me |= mask;
|
||||||
|
else if(freer == PNG_USER_WILL_FREE_DATA)
|
||||||
|
info_ptr->free_me &= ~mask;
|
||||||
|
else
|
||||||
|
png_warning(png_ptr,
|
||||||
|
"Unknown freer parameter in png_data_freer.");
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
png_free_data(png_structp png_ptr, png_infop info_ptr, png_uint_32 mask, int num)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_free_data\n");
|
||||||
|
if (png_ptr == NULL || info_ptr == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
#if defined(PNG_TEXT_SUPPORTED)
|
#if defined(PNG_TEXT_SUPPORTED)
|
||||||
/* free text item num or (if num == -1) all text items */
|
/* free text item num or (if num == -1) all text items */
|
||||||
void
|
if (mask & info_ptr->free_me & PNG_FREE_TEXT)
|
||||||
png_free_text(png_structp png_ptr, png_infop info_ptr, int num)
|
|
||||||
{
|
{
|
||||||
if (num != -1)
|
if (num != -1)
|
||||||
{
|
{
|
||||||
if (info_ptr->text[num].key)
|
if (info_ptr->text[num].key)
|
||||||
{
|
{
|
||||||
png_free(png_ptr, info_ptr->text[num].key);
|
png_free(png_ptr, info_ptr->text[num].key);
|
||||||
info_ptr->text[num].key = NULL;
|
info_ptr->text[num].key = NULL;
|
||||||
}
|
}
|
||||||
if (info_ptr->text[num].lang)
|
}
|
||||||
{
|
else if (info_ptr->text != NULL)
|
||||||
png_free(png_ptr, info_ptr->text[num].lang);
|
{
|
||||||
info_ptr->text[num].lang = NULL;
|
int i;
|
||||||
}
|
for (i = 0; i < info_ptr->num_text; i++)
|
||||||
}
|
png_free_data(png_ptr, info_ptr, PNG_FREE_TEXT, i);
|
||||||
else if (info_ptr->text != NULL)
|
png_free(png_ptr, info_ptr->text);
|
||||||
{
|
info_ptr->text = NULL;
|
||||||
int i;
|
info_ptr->num_text=0;
|
||||||
for (i = 0; i < info_ptr->num_text; i++)
|
}
|
||||||
png_free_text(png_ptr, info_ptr, i);
|
}
|
||||||
png_free(png_ptr, info_ptr->text);
|
#endif
|
||||||
info_ptr->text = NULL;
|
|
||||||
}
|
#if defined(PNG_tRNS_SUPPORTED)
|
||||||
|
/* free any tRNS entry */
|
||||||
|
if (mask & PNG_FREE_TRNS)
|
||||||
|
{
|
||||||
|
if (info_ptr->valid & PNG_INFO_tRNS)
|
||||||
|
{
|
||||||
|
if (info_ptr->free_me & PNG_FREE_TRNS)
|
||||||
|
png_free(png_ptr, info_ptr->trans);
|
||||||
|
info_ptr->valid &= ~PNG_INFO_tRNS;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PNG_sCAL_SUPPORTED)
|
#if defined(PNG_sCAL_SUPPORTED)
|
||||||
/* free any sCAL entry */
|
/* free any sCAL entry */
|
||||||
void
|
|
||||||
png_free_sCAL(png_structp png_ptr, png_infop info_ptr)
|
|
||||||
{
|
{
|
||||||
if (info_ptr->valid & PNG_INFO_sCAL)
|
if (info_ptr->valid & PNG_INFO_sCAL)
|
||||||
{
|
{
|
||||||
png_free(png_ptr, info_ptr->scal_unit);
|
#if defined(PNG_FIXED_POINT_SUPPORTED) && !defined(PNG_FLOATING_POINT_SUPPORTED)
|
||||||
#ifdef PNG_FIXED_POINT_SUPPORTED
|
|
||||||
png_free(png_ptr, info_ptr->scal_s_width);
|
png_free(png_ptr, info_ptr->scal_s_width);
|
||||||
png_free(png_ptr, info_ptr->scal_s_height);
|
png_free(png_ptr, info_ptr->scal_s_height);
|
||||||
#endif
|
#endif
|
||||||
info_ptr->valid &= ~PNG_INFO_sCAL;
|
info_ptr->valid &= ~PNG_INFO_sCAL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PNG_pCAL_SUPPORTED)
|
#if defined(PNG_pCAL_SUPPORTED)
|
||||||
/* free any pCAL entry */
|
/* free any pCAL entry */
|
||||||
void
|
|
||||||
png_free_pCAL(png_structp png_ptr, png_infop info_ptr)
|
|
||||||
{
|
{
|
||||||
if (info_ptr->valid & PNG_INFO_pCAL)
|
if (info_ptr->valid & PNG_INFO_pCAL)
|
||||||
{
|
{
|
||||||
@@ -317,9 +346,9 @@ png_free_pCAL(png_structp png_ptr, png_infop info_ptr)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < (int)info_ptr->pcal_nparams; i++)
|
for (i = 0; i < (int)info_ptr->pcal_nparams; i++)
|
||||||
{
|
{
|
||||||
png_free(png_ptr, info_ptr->pcal_params[i]);
|
png_free(png_ptr, info_ptr->pcal_params[i]);
|
||||||
}
|
}
|
||||||
png_free(png_ptr, info_ptr->pcal_params);
|
png_free(png_ptr, info_ptr->pcal_params);
|
||||||
}
|
}
|
||||||
info_ptr->valid &= ~PNG_INFO_pCAL;
|
info_ptr->valid &= ~PNG_INFO_pCAL;
|
||||||
@@ -328,14 +357,16 @@ png_free_pCAL(png_structp png_ptr, png_infop info_ptr)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PNG_iCCP_SUPPORTED)
|
#if defined(PNG_iCCP_SUPPORTED)
|
||||||
/* free any pCAL entry */
|
/* free any iCCP entry */
|
||||||
void
|
if (mask & PNG_FREE_ICCP)
|
||||||
png_free_iCCP(png_structp png_ptr, png_infop info_ptr)
|
|
||||||
{
|
{
|
||||||
if (info_ptr->valid & PNG_INFO_iCCP)
|
if (info_ptr->valid & PNG_INFO_iCCP)
|
||||||
{
|
{
|
||||||
png_free(png_ptr, info_ptr->iccp_name);
|
if (info_ptr->free_me & PNG_FREE_ICCP)
|
||||||
png_free(png_ptr, info_ptr->iccp_profile);
|
{
|
||||||
|
png_free(png_ptr, info_ptr->iccp_name);
|
||||||
|
png_free(png_ptr, info_ptr->iccp_profile);
|
||||||
|
}
|
||||||
info_ptr->valid &= ~PNG_INFO_iCCP;
|
info_ptr->valid &= ~PNG_INFO_iCCP;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -343,30 +374,31 @@ png_free_iCCP(png_structp png_ptr, png_infop info_ptr)
|
|||||||
|
|
||||||
#if defined(PNG_sPLT_SUPPORTED)
|
#if defined(PNG_sPLT_SUPPORTED)
|
||||||
/* free a given sPLT entry, or (if num == -1) all sPLT entries */
|
/* free a given sPLT entry, or (if num == -1) all sPLT entries */
|
||||||
void
|
if (mask & PNG_FREE_SPLT)
|
||||||
png_free_spalette(png_structp png_ptr, png_infop info_ptr, int num)
|
|
||||||
{
|
{
|
||||||
if (num != -1)
|
if (num != -1)
|
||||||
{
|
{
|
||||||
png_free(png_ptr, info_ptr->splt_palettes[num].name);
|
png_free(png_ptr, info_ptr->splt_palettes[num].name);
|
||||||
png_free(png_ptr, info_ptr->splt_palettes[num].entries);
|
png_free(png_ptr, info_ptr->splt_palettes[num].entries);
|
||||||
|
info_ptr->valid &= ~PNG_INFO_sPLT;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
png_uint_32 i;
|
if(info_ptr->splt_palettes_num)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < (int)info_ptr->splt_palettes_num; i++)
|
||||||
|
png_free_data(png_ptr, info_ptr, PNG_FREE_SPLT, i);
|
||||||
|
|
||||||
for (i = 0; i < info_ptr->splt_palettes_num; i++)
|
png_free(png_ptr, info_ptr->splt_palettes);
|
||||||
png_free_spalette(png_ptr, info_ptr, num);
|
info_ptr->splt_palettes_num = 0;
|
||||||
|
}
|
||||||
png_free(png_ptr, info_ptr->splt_palettes);
|
|
||||||
info_ptr->splt_palettes_num = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
|
#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
|
||||||
void
|
if (mask & PNG_FREE_UNKN)
|
||||||
png_free_unknown_chunk(png_structp png_ptr, png_infop info_ptr, int num)
|
|
||||||
{
|
{
|
||||||
if (num != -1)
|
if (num != -1)
|
||||||
{
|
{
|
||||||
@@ -375,17 +407,63 @@ png_free_unknown_chunk(png_structp png_ptr, png_infop info_ptr, int num)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
png_uint_32 i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < info_ptr->unknown_chunks_num; i++)
|
if(info_ptr->unknown_chunks_num)
|
||||||
png_free_unknown_chunk(png_ptr, info_ptr, num);
|
{
|
||||||
|
for (i = 0; i < (int)info_ptr->unknown_chunks_num; i++)
|
||||||
|
png_free_data(png_ptr, info_ptr, PNG_FREE_UNKN, i);
|
||||||
|
|
||||||
png_free(png_ptr, info_ptr->unknown_chunks);
|
png_free(png_ptr, info_ptr->unknown_chunks);
|
||||||
info_ptr->unknown_chunks_num = 0;
|
info_ptr->unknown_chunks_num = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_hIST_SUPPORTED)
|
||||||
|
/* free any hIST entry */
|
||||||
|
if (mask & PNG_FREE_HIST)
|
||||||
|
{
|
||||||
|
if (info_ptr->valid & PNG_INFO_hIST)
|
||||||
|
{
|
||||||
|
if (info_ptr->free_me & PNG_FREE_HIST)
|
||||||
|
png_free(png_ptr, info_ptr->hist);
|
||||||
|
info_ptr->valid &= ~PNG_INFO_hIST;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* free any PLTE entry that was internally allocated */
|
||||||
|
if (mask & PNG_FREE_PLTE)
|
||||||
|
{
|
||||||
|
if (info_ptr->valid & PNG_INFO_PLTE)
|
||||||
|
{
|
||||||
|
if (info_ptr->free_me & PNG_FREE_PLTE)
|
||||||
|
png_zfree(png_ptr, info_ptr->palette);
|
||||||
|
info_ptr->valid &= ~(PNG_INFO_PLTE);
|
||||||
|
info_ptr->num_palette = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(PNG_INFO_IMAGE_SUPPORTED)
|
||||||
|
/* free any image bits attached to the info structure */
|
||||||
|
if (mask & PNG_FREE_ROWS)
|
||||||
|
{
|
||||||
|
if (info_ptr->free_me & PNG_FREE_ROWS)
|
||||||
|
{
|
||||||
|
int row;
|
||||||
|
|
||||||
|
for (row = 0; row < (int)info_ptr->height; row++)
|
||||||
|
png_free(png_ptr, info_ptr->row_pointers[row]);
|
||||||
|
png_free(png_ptr, info_ptr->row_pointers);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if(num == -1)
|
||||||
|
info_ptr->free_me &= ~mask;
|
||||||
|
}
|
||||||
|
|
||||||
/* This is an internal routine to free any memory that the info struct is
|
/* This is an internal routine to free any memory that the info struct is
|
||||||
* pointing to before re-using it or freeing the struct itself. Recall
|
* pointing to before re-using it or freeing the struct itself. Recall
|
||||||
* that png_free() checks for NULL pointers for us.
|
* that png_free() checks for NULL pointers for us.
|
||||||
@@ -394,24 +472,17 @@ void
|
|||||||
png_info_destroy(png_structp png_ptr, png_infop info_ptr)
|
png_info_destroy(png_structp png_ptr, png_infop info_ptr)
|
||||||
{
|
{
|
||||||
png_debug(1, "in png_info_destroy\n");
|
png_debug(1, "in png_info_destroy\n");
|
||||||
#if defined(PNG_READ_TEXT_SUPPORTED)
|
|
||||||
png_free_text(png_ptr, info_ptr, -1);
|
png_free_data(png_ptr, info_ptr, PNG_FREE_ALL, -1);
|
||||||
#endif
|
|
||||||
#if defined(PNG_READ_sCAL_SUPPORTED)
|
|
||||||
png_free_sCAL(png_ptr, info_ptr);
|
|
||||||
#endif
|
|
||||||
#if defined(PNG_READ_pCAL_SUPPORTED)
|
|
||||||
png_free_pCAL(png_ptr, info_ptr);
|
|
||||||
#endif
|
|
||||||
#if defined(PNG_READ_iCCP_SUPPORTED)
|
|
||||||
png_free_iCCP(png_ptr, info_ptr);
|
|
||||||
#endif
|
|
||||||
#if defined(PNG_READ_sPLT_SUPPORTED)
|
|
||||||
png_free_spalette(png_ptr, info_ptr, -1);
|
|
||||||
#endif
|
|
||||||
#if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
|
#if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
|
||||||
png_free_unknown_chunk(png_ptr, info_ptr, -1);
|
if (png_ptr->num_chunk_list)
|
||||||
|
{
|
||||||
|
png_free(png_ptr, png_ptr->chunk_list);
|
||||||
|
png_ptr->num_chunk_list=0;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
png_info_init(info_ptr);
|
png_info_init(info_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -428,7 +499,9 @@ png_get_io_ptr(png_structp png_ptr)
|
|||||||
#if !defined(PNG_NO_STDIO)
|
#if !defined(PNG_NO_STDIO)
|
||||||
/* Initialize the default input/output functions for the PNG file. If you
|
/* Initialize the default input/output functions for the PNG file. If you
|
||||||
* use your own read or write routines, you can call either png_set_read_fn()
|
* use your own read or write routines, you can call either png_set_read_fn()
|
||||||
* or png_set_write_fn() instead of png_init_io().
|
* or png_set_write_fn() instead of png_init_io(). If you have defined
|
||||||
|
* PNG_NO_STDIO, you must use a function of your own because "FILE *" isn't
|
||||||
|
* necessarily available.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
png_init_io(png_structp png_ptr, FILE *fp)
|
png_init_io(png_structp png_ptr, FILE *fp)
|
||||||
@@ -475,24 +548,23 @@ png_convert_to_rfc1123(png_structp png_ptr, png_timep ptime)
|
|||||||
}
|
}
|
||||||
#endif /* PNG_TIME_RFC1123_SUPPORTED */
|
#endif /* PNG_TIME_RFC1123_SUPPORTED */
|
||||||
|
|
||||||
|
#if 0
|
||||||
/* Signature string for a PNG file. */
|
/* Signature string for a PNG file. */
|
||||||
png_bytep
|
png_bytep
|
||||||
png_sig_bytes(png_structp png_ptr)
|
png_sig_bytes(void)
|
||||||
{
|
{
|
||||||
const png_byte png_sig_numbers[9] = {137, 80, 78, 71, 13, 10, 26, 10, 0};
|
return ((png_bytep)"\211\120\116\107\015\012\032\012");
|
||||||
if (png_ptr == NULL) /* silence compiler warning */
|
|
||||||
return ((png_bytep) strdup((png_const_charp)png_sig_numbers));
|
|
||||||
return ((png_bytep) strdup((png_const_charp)png_sig_numbers));
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
png_charp
|
png_charp
|
||||||
png_get_copyright(png_structp png_ptr)
|
png_get_copyright(png_structp png_ptr)
|
||||||
{
|
{
|
||||||
if (png_ptr != NULL || png_ptr == NULL) /* silence compiler warning */
|
if (png_ptr != NULL || png_ptr == NULL) /* silence compiler warning */
|
||||||
return ("\n libpng version 1.0.5h - December 10, 1999\n\
|
return ("\n libpng version 1.0.6f - April 14, 2000\n\
|
||||||
Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.\n\
|
Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.\n\
|
||||||
Copyright (c) 1996, 1997 Andreas Dilger\n\
|
Copyright (c) 1996, 1997 Andreas Dilger\n\
|
||||||
Copyright (c) 1998, 1999 Glenn Randers-Pehrson\n");
|
Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson\n");
|
||||||
return ("");
|
return ("");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -507,8 +579,8 @@ png_get_libpng_ver(png_structp png_ptr)
|
|||||||
{
|
{
|
||||||
/* Version of *.c files used when building libpng */
|
/* Version of *.c files used when building libpng */
|
||||||
if(png_ptr != NULL) /* silence compiler warning about unused png_ptr */
|
if(png_ptr != NULL) /* silence compiler warning about unused png_ptr */
|
||||||
return("1.0.5h");
|
return("1.0.6f");
|
||||||
return("1.0.5h");
|
return("1.0.6f");
|
||||||
}
|
}
|
||||||
|
|
||||||
png_charp
|
png_charp
|
||||||
@@ -529,11 +601,19 @@ png_get_header_version(png_structp png_ptr)
|
|||||||
return(PNG_HEADER_VERSION_STRING);
|
return(PNG_HEADER_VERSION_STRING);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Generate a compiler error if there is an old png.h in the search path. */
|
#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
|
||||||
void
|
int
|
||||||
png_check_version
|
png_handle_as_unknown(png_structp png_ptr, png_bytep chunk_name)
|
||||||
(version_1_0_5h png_h_is_not_version_1_0_5h)
|
|
||||||
{
|
{
|
||||||
if(png_h_is_not_version_1_0_5h == NULL)
|
/* check chunk_name and return "keep" value if it's on the list, else 0 */
|
||||||
return;
|
int i;
|
||||||
|
png_bytep p;
|
||||||
|
if((png_ptr == NULL && chunk_name == NULL) || png_ptr->num_chunk_list<=0)
|
||||||
|
return 0;
|
||||||
|
p=png_ptr->chunk_list+png_ptr->num_chunk_list*5-5;
|
||||||
|
for (i = png_ptr->num_chunk_list; i; i--, p-=5)
|
||||||
|
if (!png_memcmp(chunk_name, p, 4))
|
||||||
|
return ((int)*(p+4));
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|||||||
29
pngasmrd.h
29
pngasmrd.h
@@ -1,32 +1,35 @@
|
|||||||
/* pngasmrd.h - assembler version of utilities to read a PNG file
|
/* pngasmrd.h - assembler version of utilities to read a PNG file
|
||||||
*
|
*
|
||||||
* libpng 1.0.5h - December 10, 1999
|
* libpng 1.0.6f - April 14, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1999 Glenn Randers-Pehrson
|
* Copyright (c) 1999, 2000 Glenn Randers-Pehrson
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef PNG_ASSEMBLER_CODE_SUPPORTED
|
#ifdef PNG_ASSEMBLER_CODE_SUPPORTED
|
||||||
|
|
||||||
/* Set this in the makefile for VC++ on Pentium, not in pngconf.h */
|
/* Set this in the makefile for VC++ on Pentium, not in pngconf.h */
|
||||||
#ifdef PNG_USE_PNGVCRD
|
|
||||||
/* Platform must be Pentium. Makefile must assemble and load pngvcrd.c .
|
/* Platform must be Pentium. Makefile must assemble and load pngvcrd.c .
|
||||||
* MMX will be detected at run time and used if present.
|
* MMX will be detected at run time and used if present.
|
||||||
*/
|
*/
|
||||||
#define PNG_HAVE_ASSEMBLER_COMBINE_ROW
|
#ifdef PNG_USE_PNGVCRD
|
||||||
#define PNG_HAVE_ASSEMBLER_READ_INTERLACE
|
# define PNG_HAVE_ASSEMBLER_COMBINE_ROW
|
||||||
#define PNG_HAVE_ASSEMBLER_READ_FILTER_ROW
|
# define PNG_HAVE_ASSEMBLER_READ_INTERLACE
|
||||||
|
# define PNG_HAVE_ASSEMBLER_READ_FILTER_ROW
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Set this in the makefile for gcc on Pentium, not in pngconf.h */
|
/* Set this in the makefile for gcc/as on Pentium, not in pngconf.h */
|
||||||
#ifdef PNG_USE_PNGGCCRD
|
/* Platform must be Pentium. Makefile must assemble and load pnggccrd.c .
|
||||||
/* Platform must be Pentium. Makefile must assemble and load pnggccrd.c
|
|
||||||
* (not available in libpng 1.0.5h).
|
|
||||||
* MMX will be detected at run time and used if present.
|
* MMX will be detected at run time and used if present.
|
||||||
*/
|
*/
|
||||||
#define PNG_HAVE_ASSEMBLER_COMBINE_ROW
|
#ifdef PNG_USE_PNGGCCRD
|
||||||
#define PNG_HAVE_ASSEMBLER_READ_INTERLACE
|
# define PNG_HAVE_ASSEMBLER_COMBINE_ROW
|
||||||
#define PNG_HAVE_ASSEMBLER_READ_FILTER_ROW
|
# define PNG_HAVE_ASSEMBLER_READ_INTERLACE
|
||||||
|
# define PNG_HAVE_ASSEMBLER_READ_FILTER_ROW
|
||||||
#endif
|
#endif
|
||||||
|
/*
|
||||||
|
GRR notes:
|
||||||
|
- see pnggccrd.c for info about what is currently enabled
|
||||||
|
*/
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
377
pngconf.h
377
pngconf.h
@@ -1,11 +1,11 @@
|
|||||||
|
|
||||||
/* pngconf.h - machine configurable file for libpng
|
/* pngconf.h - machine configurable file for libpng
|
||||||
*
|
*
|
||||||
* libpng 1.0.5h - December 10, 1999
|
* libpng 1.0.6f - April 14, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, 1999 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Any machine specific code is near the front of this file, so if you
|
/* Any machine specific code is near the front of this file, so if you
|
||||||
@@ -111,29 +111,35 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef PNG_SETJMP_NOT_SUPPORTED
|
||||||
|
# define PNG_SETJMP_SUPPORTED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef PNG_SETJMP_SUPPORTED
|
||||||
/* This is an attempt to force a single setjmp behaviour on Linux. If
|
/* This is an attempt to force a single setjmp behaviour on Linux. If
|
||||||
* the X config stuff didn't define _BSD_SOURCE we wouldn't need this.
|
* the X config stuff didn't define _BSD_SOURCE we wouldn't need this.
|
||||||
*/
|
*/
|
||||||
#ifdef __linux__
|
# ifdef __linux__
|
||||||
#ifdef _BSD_SOURCE
|
# ifdef _BSD_SOURCE
|
||||||
#define _PNG_SAVE_BSD_SOURCE
|
# define _PNG_SAVE_BSD_SOURCE
|
||||||
#undef _BSD_SOURCE
|
# undef _BSD_SOURCE
|
||||||
#endif
|
# endif
|
||||||
#ifdef _SETJMP_H
|
# ifdef _SETJMP_H
|
||||||
__png.h__ already includes setjmp.h
|
__png.h__ already includes setjmp.h
|
||||||
__dont__ include it again
|
__dont__ include it again
|
||||||
#endif
|
# endif
|
||||||
#endif /* __linux__ */
|
#endif /* __linux__ */
|
||||||
|
|
||||||
/* include setjmp.h for error handling */
|
/* include setjmp.h for error handling */
|
||||||
#include <setjmp.h>
|
#include <setjmp.h>
|
||||||
|
|
||||||
#ifdef __linux__
|
# ifdef __linux__
|
||||||
#ifdef _PNG_SAVE_BSD_SOURCE
|
# ifdef _PNG_SAVE_BSD_SOURCE
|
||||||
#define _BSD_SOURCE
|
# define _BSD_SOURCE
|
||||||
#undef _PNG_SAVE_BSD_SOURCE
|
# undef _PNG_SAVE_BSD_SOURCE
|
||||||
#endif
|
# endif
|
||||||
#endif /* __linux__ */
|
# endif /* __linux__ */
|
||||||
|
#endif /* PNG_SETJMP_SUPPORTED */
|
||||||
|
|
||||||
#ifdef BSD
|
#ifdef BSD
|
||||||
#include <strings.h>
|
#include <strings.h>
|
||||||
@@ -158,6 +164,7 @@ __dont__ include it again
|
|||||||
* them inside an appropriate ifdef/endif pair for portability.
|
* them inside an appropriate ifdef/endif pair for portability.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if !defined(PNG_NO_FLOATING_POINT_SUPPORTED)
|
||||||
#if defined(MACOS)
|
#if defined(MACOS)
|
||||||
/* We need to check that <math.h> hasn't already been included earlier
|
/* We need to check that <math.h> hasn't already been included earlier
|
||||||
* as it seems it doesn't agree with <fp.h>, yet we should really use
|
* as it seems it doesn't agree with <fp.h>, yet we should really use
|
||||||
@@ -169,6 +176,7 @@ __dont__ include it again
|
|||||||
#else
|
#else
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Codewarrior on NT has linking problems without this. */
|
/* Codewarrior on NT has linking problems without this. */
|
||||||
#if (defined(__MWERKS__) && defined(WIN32)) || defined(__STDC__)
|
#if (defined(__MWERKS__) && defined(WIN32)) || defined(__STDC__)
|
||||||
@@ -247,7 +255,7 @@ __dont__ include it again
|
|||||||
* things to happen if the library and/or application ever change.
|
* things to happen if the library and/or application ever change.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Any transformations you will not be using can be undef'ed here */
|
/* Any features you will not be using can be undef'ed here */
|
||||||
|
|
||||||
/* GR-P, 0.96a: Set "*TRANSFORMS_SUPPORTED as default but allow user
|
/* GR-P, 0.96a: Set "*TRANSFORMS_SUPPORTED as default but allow user
|
||||||
to turn it off with "*TRANSFORMS_NOT_SUPPORTED" or *PNG_NO_*_TRANSFORMS
|
to turn it off with "*TRANSFORMS_NOT_SUPPORTED" or *PNG_NO_*_TRANSFORMS
|
||||||
@@ -259,7 +267,13 @@ __dont__ include it again
|
|||||||
1.0.1c, for consistency)
|
1.0.1c, for consistency)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef PNG_NO_FLOATING_POINT_SUPPORTED
|
||||||
|
#define PNG_FLOATING_POINT_SUPPORTED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef PNG_NO_FIXED_POINT_SUPPORTED
|
||||||
|
#define PNG_FIXED_POINT_SUPPORTED
|
||||||
|
#endif
|
||||||
|
|
||||||
#if !defined(PNG_READ_TRANSFORMS_NOT_SUPPORTED) && \
|
#if !defined(PNG_READ_TRANSFORMS_NOT_SUPPORTED) && \
|
||||||
!defined(PNG_NO_READ_TRANSFORMS)
|
!defined(PNG_NO_READ_TRANSFORMS)
|
||||||
@@ -379,7 +393,8 @@ __dont__ include it again
|
|||||||
encoders, but can cause trouble
|
encoders, but can cause trouble
|
||||||
if left undefined */
|
if left undefined */
|
||||||
|
|
||||||
#ifndef PNG_NO_WRITE_WEIGHTED_FILTER
|
#if !defined(PNG_NO_WRITE_WEIGHTED_FILTER) && \
|
||||||
|
defined(PNG_FLOATING_POINT_SUPPORTED)
|
||||||
#define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
|
#define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -415,26 +430,24 @@ __dont__ include it again
|
|||||||
#define PNG_EASY_ACCESS_SUPPORTED
|
#define PNG_EASY_ACCESS_SUPPORTED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef PNG_NO_ASSEMBLER_CODE
|
#if defined(PNG_USE_PNGVCRD) || defined(PNG_USE_PNGGCCRD) && \
|
||||||
|
!defined(PNG_NO_ASSEMBLER_CODE)
|
||||||
#define PNG_ASSEMBLER_CODE_SUPPORTED
|
#define PNG_ASSEMBLER_CODE_SUPPORTED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef PNG_NO_FLOATING_POINT_SUPPORTED
|
|
||||||
#define PNG_FLOATING_POINT_SUPPORTED
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef PNG_NO_FIXED_POINT_SUPPORTED
|
|
||||||
#define PNG_FIXED_POINT_SUPPORTED
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Do not use global arrays (helps with building DLL's)
|
/* Do not use global arrays (helps with building DLL's)
|
||||||
* They are no longer used in libpng itself, since version 1.0.5c,
|
* They are no longer used in libpng itself, since version 1.0.5c,
|
||||||
* but might be required for some pre-1.0.5c applications.
|
* but might be required for some pre-1.0.5c applications.
|
||||||
*/
|
*/
|
||||||
#ifdef PNG_NO_GLOBAL_ARRAYS
|
#ifdef PNG_NO_GLOBAL_ARRAYS
|
||||||
#define PNG_USE_LOCAL_ARRAYS
|
# define PNG_USE_LOCAL_ARRAYS
|
||||||
#else
|
#else
|
||||||
#define PNG_USE_GLOBAL_ARRAYS
|
# if defined(__GNUC__) && defined(WIN32)
|
||||||
|
# define PNG_NO_GLOBAL_ARRAYS
|
||||||
|
# define PNG_USE_LOCAL_ARRAYS
|
||||||
|
# else
|
||||||
|
# define PNG_USE_GLOBAL_ARRAYS
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* These are currently experimental features, define them if you want */
|
/* These are currently experimental features, define them if you want */
|
||||||
@@ -473,209 +486,246 @@ __dont__ include it again
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_READ_ANCILLARY_CHUNKS_SUPPORTED
|
#ifdef PNG_READ_ANCILLARY_CHUNKS_SUPPORTED
|
||||||
|
|
||||||
|
#ifdef PNG_NO_READ_TEXT
|
||||||
|
# define PNG_NO_READ_iTXt
|
||||||
|
# define PNG_NO_READ_tEXt
|
||||||
|
# define PNG_NO_READ_zTXt
|
||||||
|
#endif
|
||||||
#ifndef PNG_NO_READ_bKGD
|
#ifndef PNG_NO_READ_bKGD
|
||||||
#define PNG_READ_bKGD_SUPPORTED
|
# define PNG_READ_bKGD_SUPPORTED
|
||||||
#define PNG_bKGD_SUPPORTED
|
# define PNG_bKGD_SUPPORTED
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_READ_cHRM
|
#ifndef PNG_NO_READ_cHRM
|
||||||
#define PNG_READ_cHRM_SUPPORTED
|
# define PNG_READ_cHRM_SUPPORTED
|
||||||
#define PNG_cHRM_SUPPORTED
|
# define PNG_cHRM_SUPPORTED
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_READ_gAMA
|
#ifndef PNG_NO_READ_gAMA
|
||||||
#define PNG_READ_gAMA_SUPPORTED
|
# define PNG_READ_gAMA_SUPPORTED
|
||||||
#define PNG_gAMA_SUPPORTED
|
# define PNG_gAMA_SUPPORTED
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_READ_hIST
|
#ifndef PNG_NO_READ_hIST
|
||||||
#define PNG_READ_hIST_SUPPORTED
|
# define PNG_READ_hIST_SUPPORTED
|
||||||
#define PNG_hIST_SUPPORTED
|
# define PNG_hIST_SUPPORTED
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_READ_iCCP
|
#ifndef PNG_NO_READ_iCCP
|
||||||
#define PNG_READ_iCCP_SUPPORTED
|
# define PNG_READ_iCCP_SUPPORTED
|
||||||
#define PNG_iCCP_SUPPORTED
|
# define PNG_iCCP_SUPPORTED
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_READ_iTXt
|
#ifndef PNG_NO_READ_iTXt
|
||||||
#define PNG_READ_iTXt_SUPPORTED
|
# define PNG_READ_iTXt_SUPPORTED
|
||||||
#define PNG_iTXt_SUPPORTED
|
# define PNG_iTXt_SUPPORTED
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_READ_oFFs
|
#ifndef PNG_NO_READ_oFFs
|
||||||
#define PNG_READ_oFFs_SUPPORTED
|
# define PNG_READ_oFFs_SUPPORTED
|
||||||
#define PNG_oFFs_SUPPORTED
|
# define PNG_oFFs_SUPPORTED
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_READ_pCAL
|
#ifndef PNG_NO_READ_pCAL
|
||||||
#define PNG_READ_pCAL_SUPPORTED
|
# define PNG_READ_pCAL_SUPPORTED
|
||||||
#define PNG_pCAL_SUPPORTED
|
# define PNG_pCAL_SUPPORTED
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_READ_sCAL
|
#ifndef PNG_NO_READ_sCAL
|
||||||
#define PNG_READ_sCAL_SUPPORTED
|
# define PNG_READ_sCAL_SUPPORTED
|
||||||
#define PNG_sCAL_SUPPORTED
|
# define PNG_sCAL_SUPPORTED
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_READ_pHYs
|
#ifndef PNG_NO_READ_pHYs
|
||||||
#define PNG_READ_pHYs_SUPPORTED
|
# define PNG_READ_pHYs_SUPPORTED
|
||||||
#define PNG_pHYs_SUPPORTED
|
# define PNG_pHYs_SUPPORTED
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_READ_sBIT
|
#ifndef PNG_NO_READ_sBIT
|
||||||
#define PNG_READ_sBIT_SUPPORTED
|
# define PNG_READ_sBIT_SUPPORTED
|
||||||
#define PNG_sBIT_SUPPORTED
|
# define PNG_sBIT_SUPPORTED
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_READ_sPLT
|
#ifndef PNG_NO_READ_sPLT
|
||||||
#define PNG_READ_sPLT_SUPPORTED
|
# define PNG_READ_sPLT_SUPPORTED
|
||||||
#define PNG_sPLT_SUPPORTED
|
# define PNG_sPLT_SUPPORTED
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_READ_sRGB
|
#ifndef PNG_NO_READ_sRGB
|
||||||
#define PNG_READ_sRGB_SUPPORTED
|
# define PNG_READ_sRGB_SUPPORTED
|
||||||
#define PNG_sRGB_SUPPORTED
|
# define PNG_sRGB_SUPPORTED
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_READ_tEXt
|
#ifndef PNG_NO_READ_tEXt
|
||||||
#define PNG_READ_tEXt_SUPPORTED
|
# define PNG_READ_tEXt_SUPPORTED
|
||||||
#define PNG_tEXt_SUPPORTED
|
# define PNG_tEXt_SUPPORTED
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_READ_tIME
|
#ifndef PNG_NO_READ_tIME
|
||||||
#define PNG_READ_tIME_SUPPORTED
|
# define PNG_READ_tIME_SUPPORTED
|
||||||
#define PNG_tIME_SUPPORTED
|
# define PNG_tIME_SUPPORTED
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_READ_tRNS
|
#ifndef PNG_NO_READ_tRNS
|
||||||
#define PNG_READ_tRNS_SUPPORTED
|
# define PNG_READ_tRNS_SUPPORTED
|
||||||
#define PNG_tRNS_SUPPORTED
|
# define PNG_tRNS_SUPPORTED
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_READ_zTXt
|
#ifndef PNG_NO_READ_zTXt
|
||||||
#define PNG_READ_zTXt_SUPPORTED
|
# define PNG_READ_zTXt_SUPPORTED
|
||||||
#define PNG_zTXt_SUPPORTED
|
# define PNG_zTXt_SUPPORTED
|
||||||
|
#endif
|
||||||
|
#ifndef PNG_NO_READ_USER_CHUNKS
|
||||||
|
# define PNG_READ_USER_CHUNKS_SUPPORTED
|
||||||
|
# define PNG_USER_CHUNKS_SUPPORTED
|
||||||
|
# ifdef PNG_NO_READ_UNKNOWN_CHUNKS
|
||||||
|
# undef PNG_NO_READ_UNKNOWN_CHUNKS
|
||||||
|
# endif
|
||||||
|
# ifdef PNG_NO_HANDLE_AS_UNKNOWN
|
||||||
|
# undef PNG_NO_HANDLE_AS_UNKNOWN
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_READ_UNKNOWN_CHUNKS
|
#ifndef PNG_NO_READ_UNKNOWN_CHUNKS
|
||||||
#define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
|
# define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
|
||||||
#define PNG_UNKNOWN_CHUNKS_SUPPORTED
|
# define PNG_UNKNOWN_CHUNKS_SUPPORTED
|
||||||
|
# ifndef PNG_NO_HANDLE_AS_UNKNOWN
|
||||||
|
# define PNG_HANDLE_AS_UNKNOWN_SUPPORTED
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_READ_OPT_PLTE
|
#ifndef PNG_NO_READ_OPT_PLTE
|
||||||
#define PNG_READ_OPT_PLTE_SUPPORTED /* only affects support of the optional */
|
# define PNG_READ_OPT_PLTE_SUPPORTED /* only affects support of the */
|
||||||
#endif /* PLTE chunk in RGB and RGBA images */
|
#endif /* optional PLTE chunk in RGB and RGBA images */
|
||||||
#if defined(PNG_READ_iTXt_SUPPORTED) || defined(PNG_READ_tEXt_SUPPORTED) || \
|
#if defined(PNG_READ_iTXt_SUPPORTED) || defined(PNG_READ_tEXt_SUPPORTED) || \
|
||||||
defined(PNG_READ_zTXt_SUPPORTED)
|
defined(PNG_READ_zTXt_SUPPORTED)
|
||||||
#define PNG_READ_TEXT_SUPPORTED
|
# define PNG_READ_TEXT_SUPPORTED
|
||||||
#define PNG_TEXT_SUPPORTED
|
# define PNG_TEXT_SUPPORTED
|
||||||
#endif
|
#endif
|
||||||
#endif /* PNG_READ_ANCILLARY_CHUNKS_SUPPORTED */
|
#endif /* PNG_READ_ANCILLARY_CHUNKS_SUPPORTED */
|
||||||
|
|
||||||
#ifdef PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED
|
#ifdef PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED
|
||||||
#ifndef PNG_NO_WRITE_bKGD
|
#ifdef PNG_NO_WRITE_TEXT
|
||||||
#define PNG_WRITE_bKGD_SUPPORTED
|
# define PNG_NO_WRITE_iTXt
|
||||||
#ifndef PNG_bKGD_SUPPORTED
|
# define PNG_NO_WRITE_tEXt
|
||||||
# define PNG_bKGD_SUPPORTED
|
# define PNG_NO_WRITE_zTXt
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef PNG_NO_WRITE_bKGD
|
||||||
|
# define PNG_WRITE_bKGD_SUPPORTED
|
||||||
|
# ifndef PNG_bKGD_SUPPORTED
|
||||||
|
# define PNG_bKGD_SUPPORTED
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_WRITE_cHRM
|
#ifndef PNG_NO_WRITE_cHRM
|
||||||
#define PNG_WRITE_cHRM_SUPPORTED
|
# define PNG_WRITE_cHRM_SUPPORTED
|
||||||
#ifndef PNG_cHRM_SUPPORTED
|
# ifndef PNG_cHRM_SUPPORTED
|
||||||
# define PNG_cHRM_SUPPORTED
|
# define PNG_cHRM_SUPPORTED
|
||||||
#endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_WRITE_gAMA
|
#ifndef PNG_NO_WRITE_gAMA
|
||||||
#define PNG_WRITE_gAMA_SUPPORTED
|
# define PNG_WRITE_gAMA_SUPPORTED
|
||||||
#ifndef PNG_gAMA_SUPPORTED
|
# ifndef PNG_gAMA_SUPPORTED
|
||||||
# define PNG_gAMA_SUPPORTED
|
# define PNG_gAMA_SUPPORTED
|
||||||
#endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_WRITE_hIST
|
#ifndef PNG_NO_WRITE_hIST
|
||||||
#define PNG_WRITE_hIST_SUPPORTED
|
# define PNG_WRITE_hIST_SUPPORTED
|
||||||
#ifndef PNG_hIST_SUPPORTED
|
# ifndef PNG_hIST_SUPPORTED
|
||||||
# define PNG_hIST_SUPPORTED
|
# define PNG_hIST_SUPPORTED
|
||||||
#endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_WRITE_iCCP
|
#ifndef PNG_NO_WRITE_iCCP
|
||||||
#define PNG_WRITE_iCCP_SUPPORTED
|
# define PNG_WRITE_iCCP_SUPPORTED
|
||||||
#ifndef PNG_iCCP_SUPPORTED
|
# ifndef PNG_iCCP_SUPPORTED
|
||||||
# define PNG_iCCP_SUPPORTED
|
# define PNG_iCCP_SUPPORTED
|
||||||
#endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_WRITE_iTXt
|
#ifndef PNG_NO_WRITE_iTXt
|
||||||
#define PNG_WRITE_iTXt_SUPPORTED
|
# define PNG_WRITE_iTXt_SUPPORTED
|
||||||
#ifndef PNG_iTXt_SUPPORTED
|
# ifndef PNG_iTXt_SUPPORTED
|
||||||
# define PNG_iTXt_SUPPORTED
|
# define PNG_iTXt_SUPPORTED
|
||||||
#endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_WRITE_oFFs
|
#ifndef PNG_NO_WRITE_oFFs
|
||||||
#define PNG_WRITE_oFFs_SUPPORTED
|
# define PNG_WRITE_oFFs_SUPPORTED
|
||||||
#ifndef PNG_oFFs_SUPPORTED
|
# ifndef PNG_oFFs_SUPPORTED
|
||||||
# define PNG_oFFs_SUPPORTED
|
# define PNG_oFFs_SUPPORTED
|
||||||
#endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_WRITE_pCAL
|
#ifndef PNG_NO_WRITE_pCAL
|
||||||
#define PNG_WRITE_pCAL_SUPPORTED
|
# define PNG_WRITE_pCAL_SUPPORTED
|
||||||
#ifndef PNG_pCAL_SUPPORTED
|
# ifndef PNG_pCAL_SUPPORTED
|
||||||
# define PNG_pCAL_SUPPORTED
|
# define PNG_pCAL_SUPPORTED
|
||||||
#endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_WRITE_sCAL
|
#ifndef PNG_NO_WRITE_sCAL
|
||||||
#define PNG_WRITE_sCAL_SUPPORTED
|
# define PNG_WRITE_sCAL_SUPPORTED
|
||||||
#ifndef PNG_sCAL_SUPPORTED
|
# ifndef PNG_sCAL_SUPPORTED
|
||||||
# define PNG_sCAL_SUPPORTED
|
# define PNG_sCAL_SUPPORTED
|
||||||
#endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_WRITE_pHYs
|
#ifndef PNG_NO_WRITE_pHYs
|
||||||
#define PNG_WRITE_pHYs_SUPPORTED
|
# define PNG_WRITE_pHYs_SUPPORTED
|
||||||
#ifndef PNG_pHYs_SUPPORTED
|
# ifndef PNG_pHYs_SUPPORTED
|
||||||
# define PNG_pHYs_SUPPORTED
|
# define PNG_pHYs_SUPPORTED
|
||||||
#endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_WRITE_sBIT
|
#ifndef PNG_NO_WRITE_sBIT
|
||||||
#define PNG_WRITE_sBIT_SUPPORTED
|
# define PNG_WRITE_sBIT_SUPPORTED
|
||||||
#ifndef PNG_sBIT_SUPPORTED
|
# ifndef PNG_sBIT_SUPPORTED
|
||||||
# define PNG_sBIT_SUPPORTED
|
# define PNG_sBIT_SUPPORTED
|
||||||
#endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_WRITE_sPLT
|
#ifndef PNG_NO_WRITE_sPLT
|
||||||
#define PNG_WRITE_sPLT_SUPPORTED
|
# define PNG_WRITE_sPLT_SUPPORTED
|
||||||
#ifndef PNG_sPLT_SUPPORTED
|
# ifndef PNG_sPLT_SUPPORTED
|
||||||
# define PNG_sPLT_SUPPORTED
|
# define PNG_sPLT_SUPPORTED
|
||||||
#endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_WRITE_sRGB
|
#ifndef PNG_NO_WRITE_sRGB
|
||||||
#define PNG_WRITE_sRGB_SUPPORTED
|
# define PNG_WRITE_sRGB_SUPPORTED
|
||||||
#ifndef PNG_sRGB_SUPPORTED
|
# ifndef PNG_sRGB_SUPPORTED
|
||||||
# define PNG_sRGB_SUPPORTED
|
# define PNG_sRGB_SUPPORTED
|
||||||
#endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_WRITE_tEXt
|
#ifndef PNG_NO_WRITE_tEXt
|
||||||
#define PNG_WRITE_tEXt_SUPPORTED
|
# define PNG_WRITE_tEXt_SUPPORTED
|
||||||
#ifndef PNG_tEXt_SUPPORTED
|
# ifndef PNG_tEXt_SUPPORTED
|
||||||
# define PNG_tEXt_SUPPORTED
|
# define PNG_tEXt_SUPPORTED
|
||||||
#endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_WRITE_tIME
|
#ifndef PNG_NO_WRITE_tIME
|
||||||
#define PNG_WRITE_tIME_SUPPORTED
|
# define PNG_WRITE_tIME_SUPPORTED
|
||||||
#ifndef PNG_tIME_SUPPORTED
|
# ifndef PNG_tIME_SUPPORTED
|
||||||
# define PNG_tIME_SUPPORTED
|
# define PNG_tIME_SUPPORTED
|
||||||
#endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_WRITE_tRNS
|
#ifndef PNG_NO_WRITE_tRNS
|
||||||
#define PNG_WRITE_tRNS_SUPPORTED
|
# define PNG_WRITE_tRNS_SUPPORTED
|
||||||
#ifndef PNG_tRNS_SUPPORTED
|
# ifndef PNG_tRNS_SUPPORTED
|
||||||
# define PNG_tRNS_SUPPORTED
|
# define PNG_tRNS_SUPPORTED
|
||||||
#endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_WRITE_zTXt
|
#ifndef PNG_NO_WRITE_zTXt
|
||||||
#define PNG_WRITE_zTXt_SUPPORTED
|
# define PNG_WRITE_zTXt_SUPPORTED
|
||||||
#ifndef PNG_zTXt_SUPPORTED
|
# ifndef PNG_zTXt_SUPPORTED
|
||||||
# define PNG_zTXt_SUPPORTED
|
# define PNG_zTXt_SUPPORTED
|
||||||
#endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_NO_WRITE_UNKNOWN_CHUNKS
|
#ifndef PNG_NO_WRITE_UNKNOWN_CHUNKS
|
||||||
#define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
|
# define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
|
||||||
#ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED
|
# ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED
|
||||||
# define PNG_UNKNOWN_CHUNKS_SUPPORTED
|
# define PNG_UNKNOWN_CHUNKS_SUPPORTED
|
||||||
#endif
|
# endif
|
||||||
|
# ifndef PNG_NO_HANDLE_AS_UNKNOWN
|
||||||
|
# ifndef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
|
||||||
|
# define PNG_HANDLE_AS_UNKNOWN_SUPPORTED
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#if defined(PNG_WRITE_iTXt_SUPPORTED) || defined(PNG_WRITE_tEXt_SUPPORTED) || \
|
#if defined(PNG_WRITE_iTXt_SUPPORTED) || defined(PNG_WRITE_tEXt_SUPPORTED) || \
|
||||||
defined(PNG_WRITE_zTXt_SUPPORTED)
|
defined(PNG_WRITE_zTXt_SUPPORTED)
|
||||||
#define PNG_WRITE_TEXT_SUPPORTED
|
# define PNG_WRITE_TEXT_SUPPORTED
|
||||||
#ifndef PNG_TEXT_SUPPORTED
|
# ifndef PNG_TEXT_SUPPORTED
|
||||||
# define PNG_TEXT_SUPPORTED
|
# define PNG_TEXT_SUPPORTED
|
||||||
#endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#endif /* PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED */
|
#endif /* PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED */
|
||||||
|
|
||||||
|
/* Turn this off to disable png_read_png() and
|
||||||
|
* png_write_png() and leave the row_pointers member
|
||||||
|
* out of the info structure.
|
||||||
|
*/
|
||||||
|
#ifndef PNG_NO_INFO_IMAGE
|
||||||
|
# define PNG_INFO_IMAGE_SUPPORTED
|
||||||
|
#endif
|
||||||
|
|
||||||
/* need the time information for reading tIME chunks */
|
/* need the time information for reading tIME chunks */
|
||||||
#if defined(PNG_READ_tIME_SUPPORTED) || defined(PNG_WRITE_tIME_SUPPORTED)
|
#if defined(PNG_tIME_SUPPORTED)
|
||||||
#include <time.h>
|
# include <time.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Some typedefs to get us started. These should be safe on most of the
|
/* Some typedefs to get us started. These should be safe on most of the
|
||||||
@@ -758,6 +808,10 @@ typedef size_t png_size_t;
|
|||||||
#define FARDATA
|
#define FARDATA
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Typedef for floating-point numbers that are converted
|
||||||
|
to fixed-point with a multiple of 100,000, e.g., int_gamma */
|
||||||
|
typedef png_int_32 png_fixed_point;
|
||||||
|
|
||||||
/* Add typedefs for pointers */
|
/* Add typedefs for pointers */
|
||||||
typedef void FAR * png_voidp;
|
typedef void FAR * png_voidp;
|
||||||
typedef png_byte FAR * png_bytep;
|
typedef png_byte FAR * png_bytep;
|
||||||
@@ -767,6 +821,7 @@ typedef png_uint_16 FAR * png_uint_16p;
|
|||||||
typedef png_int_16 FAR * png_int_16p;
|
typedef png_int_16 FAR * png_int_16p;
|
||||||
typedef PNG_CONST char FAR * png_const_charp;
|
typedef PNG_CONST char FAR * png_const_charp;
|
||||||
typedef char FAR * png_charp;
|
typedef char FAR * png_charp;
|
||||||
|
typedef png_fixed_point FAR * png_fixed_point_p;
|
||||||
#ifdef PNG_FLOATING_POINT_SUPPORTED
|
#ifdef PNG_FLOATING_POINT_SUPPORTED
|
||||||
typedef double FAR * png_doublep;
|
typedef double FAR * png_doublep;
|
||||||
#endif
|
#endif
|
||||||
@@ -779,6 +834,7 @@ typedef png_uint_16 FAR * FAR * png_uint_16pp;
|
|||||||
typedef png_int_16 FAR * FAR * png_int_16pp;
|
typedef png_int_16 FAR * FAR * png_int_16pp;
|
||||||
typedef PNG_CONST char FAR * FAR * png_const_charpp;
|
typedef PNG_CONST char FAR * FAR * png_const_charpp;
|
||||||
typedef char FAR * FAR * png_charpp;
|
typedef char FAR * FAR * png_charpp;
|
||||||
|
typedef png_fixed_point FAR * FAR * png_fixed_point_pp;
|
||||||
#ifdef PNG_FLOATING_POINT_SUPPORTED
|
#ifdef PNG_FLOATING_POINT_SUPPORTED
|
||||||
typedef double FAR * FAR * png_doublepp;
|
typedef double FAR * FAR * png_doublepp;
|
||||||
#endif
|
#endif
|
||||||
@@ -796,8 +852,13 @@ typedef z_stream FAR * png_zstreamp;
|
|||||||
|
|
||||||
|
|
||||||
#ifndef PNG_EXPORT
|
#ifndef PNG_EXPORT
|
||||||
/* allow for compilation as dll under MS Windows */
|
/* GRR 20000206: based on zconf.h and MSVC 5.0 docs */
|
||||||
# ifdef __WIN32DLL__
|
# if defined(_MSC_VER) && defined(_DLL)
|
||||||
|
# define PNG_EXPORT(type,symbol) type __declspec(dllexport) symbol
|
||||||
|
# endif
|
||||||
|
|
||||||
|
/* allow for compilation as a DLL under MS Windows */
|
||||||
|
# ifdef __WIN32DLL__ /* Borland? */
|
||||||
# define PNG_EXPORT(type,symbol) __declspec(dllexport) type symbol
|
# define PNG_EXPORT(type,symbol) __declspec(dllexport) type symbol
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
@@ -806,7 +867,7 @@ typedef z_stream FAR * png_zstreamp;
|
|||||||
# define PNG_EXPORT(type,symbol) type __attribute__((dllexport)) symbol
|
# define PNG_EXPORT(type,symbol) type __attribute__((dllexport)) symbol
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
/* allow for compilation as dll with Borland C++ 5.0 */
|
/* allow for compilation as a DLL with Borland C++ 5.0 */
|
||||||
# if defined(__BORLANDC__) && defined(_Windows) && defined(__DLL__)
|
# if defined(__BORLANDC__) && defined(_Windows) && defined(__DLL__)
|
||||||
# define PNG_EXPORT(type,symbol) type _export symbol
|
# define PNG_EXPORT(type,symbol) type _export symbol
|
||||||
# endif
|
# endif
|
||||||
@@ -826,6 +887,9 @@ typedef z_stream FAR * png_zstreamp;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef PNG_EXPORT_VAR
|
#ifndef PNG_EXPORT_VAR
|
||||||
|
# if defined(_MSC_VER) && defined(_DLL) /* GRR 20000206 */
|
||||||
|
# define PNG_EXPORT_VAR(type) extern type __declspec(dllexport)
|
||||||
|
# endif
|
||||||
# ifdef PNG_DECL_DLLEXP
|
# ifdef PNG_DECL_DLLEXP
|
||||||
# define PNG_EXPORT_VAR(type) extern __declspec(dllexport) type
|
# define PNG_EXPORT_VAR(type) extern __declspec(dllexport) type
|
||||||
# endif
|
# endif
|
||||||
@@ -848,6 +912,17 @@ typedef z_stream FAR * png_zstreamp;
|
|||||||
* that are passed far data must be model independent.
|
* that are passed far data must be model independent.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef PNG_ABORT
|
||||||
|
# define PNG_ABORT() abort()
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef PNG_SETJMP_SUPPORTED
|
||||||
|
# define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf)
|
||||||
|
#else
|
||||||
|
# define png_jmpbuf(png_ptr) \
|
||||||
|
(LIBPNG_WAS_COMPILED_WITH__PNG_SETJMP_NOT_SUPPORTED)
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(USE_FAR_KEYWORD) /* memory model independent fns */
|
#if defined(USE_FAR_KEYWORD) /* memory model independent fns */
|
||||||
/* use this to make far-to-near assignments */
|
/* use this to make far-to-near assignments */
|
||||||
# define CHECK 1
|
# define CHECK 1
|
||||||
|
|||||||
29
pngerror.c
29
pngerror.c
@@ -1,11 +1,11 @@
|
|||||||
|
|
||||||
/* pngerror.c - stub functions for i/o and memory allocation
|
/* pngerror.c - stub functions for i/o and memory allocation
|
||||||
*
|
*
|
||||||
* libpng 1.0.5h - December 10, 1999
|
* libpng 1.0.6f - April 14, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, 1999 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
*
|
*
|
||||||
* This file provides a location for all error handling. Users who
|
* This file provides a location for all error handling. Users who
|
||||||
* need special error handling are expected to write replacement functions
|
* need special error handling are expected to write replacement functions
|
||||||
@@ -67,21 +67,26 @@ png_format_buffer(png_structp png_ptr, png_charp buffer, png_const_charp message
|
|||||||
{
|
{
|
||||||
int iout = 0, iin = 0;
|
int iout = 0, iin = 0;
|
||||||
|
|
||||||
while (iin < 4) {
|
while (iin < 4)
|
||||||
|
{
|
||||||
int c = png_ptr->chunk_name[iin++];
|
int c = png_ptr->chunk_name[iin++];
|
||||||
if (isnonalpha(c)) {
|
if (isnonalpha(c))
|
||||||
|
{
|
||||||
buffer[iout++] = '[';
|
buffer[iout++] = '[';
|
||||||
buffer[iout++] = png_digit[(c & 0xf0) >> 4];
|
buffer[iout++] = png_digit[(c & 0xf0) >> 4];
|
||||||
buffer[iout++] = png_digit[c & 0xf];
|
buffer[iout++] = png_digit[c & 0x0f];
|
||||||
buffer[iout++] = ']';
|
buffer[iout++] = ']';
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
buffer[iout++] = (png_byte)c;
|
buffer[iout++] = (png_byte)c;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (message == NULL)
|
if (message == NULL)
|
||||||
buffer[iout] = 0;
|
buffer[iout] = 0;
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
buffer[iout++] = ':';
|
buffer[iout++] = ':';
|
||||||
buffer[iout++] = ' ';
|
buffer[iout++] = ' ';
|
||||||
png_memcpy(buffer+iout, message, 64);
|
png_memcpy(buffer+iout, message, 64);
|
||||||
@@ -117,14 +122,20 @@ png_default_error(png_structp png_ptr, png_const_charp message)
|
|||||||
fprintf(stderr, "libpng error: %s\n", message);
|
fprintf(stderr, "libpng error: %s\n", message);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USE_FAR_KEYWORD
|
#ifdef PNG_SETJMP_SUPPORTED
|
||||||
|
# ifdef USE_FAR_KEYWORD
|
||||||
{
|
{
|
||||||
jmp_buf jmpbuf;
|
jmp_buf jmpbuf;
|
||||||
png_memcpy(jmpbuf,png_ptr->jmpbuf,sizeof(jmp_buf));
|
png_memcpy(jmpbuf,png_ptr->jmpbuf,sizeof(jmp_buf));
|
||||||
longjmp(jmpbuf, 1);
|
longjmp(jmpbuf, 1);
|
||||||
}
|
}
|
||||||
#else
|
# else
|
||||||
longjmp(png_ptr->jmpbuf, 1);
|
longjmp(png_ptr->jmpbuf, 1);
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
if (png_ptr == NULL)
|
||||||
|
/* make compiler happy */ ;
|
||||||
|
PNG_ABORT();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
4644
pnggccrd.c
Normal file
4644
pnggccrd.c
Normal file
File diff suppressed because it is too large
Load Diff
98
pngget.c
98
pngget.c
@@ -1,11 +1,11 @@
|
|||||||
|
|
||||||
/* pngget.c - retrieval of values from info struct
|
/* pngget.c - retrieval of values from info struct
|
||||||
*
|
*
|
||||||
* libpng 1.0.5h - December 10, 1999
|
* libpng 1.0.6f - April 14, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, 1999 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define PNG_INTERNAL
|
#define PNG_INTERNAL
|
||||||
@@ -29,6 +29,17 @@ png_get_rowbytes(png_structp png_ptr, png_infop info_ptr)
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(PNG_INFO_IMAGE_SUPPORTED)
|
||||||
|
png_bytepp
|
||||||
|
png_get_rows(png_structp png_ptr, png_infop info_ptr)
|
||||||
|
{
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL)
|
||||||
|
return(info_ptr->row_pointers);
|
||||||
|
else
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_EASY_ACCESS_SUPPORTED
|
#ifdef PNG_EASY_ACCESS_SUPPORTED
|
||||||
/* easy access to info, added in libpng-0.99 */
|
/* easy access to info, added in libpng-0.99 */
|
||||||
png_uint_32
|
png_uint_32
|
||||||
@@ -239,35 +250,35 @@ png_uint_32
|
|||||||
png_get_pixels_per_inch(png_structp png_ptr, png_infop info_ptr)
|
png_get_pixels_per_inch(png_structp png_ptr, png_infop info_ptr)
|
||||||
{
|
{
|
||||||
return ((png_uint_32)((float)png_get_pixels_per_meter(png_ptr, info_ptr)
|
return ((png_uint_32)((float)png_get_pixels_per_meter(png_ptr, info_ptr)
|
||||||
*.03937 +.5)
|
*.0254 +.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
png_uint_32
|
png_uint_32
|
||||||
png_get_x_pixels_per_inch(png_structp png_ptr, png_infop info_ptr)
|
png_get_x_pixels_per_inch(png_structp png_ptr, png_infop info_ptr)
|
||||||
{
|
{
|
||||||
return ((png_uint_32)((float)png_get_x_pixels_per_meter(png_ptr, info_ptr)
|
return ((png_uint_32)((float)png_get_x_pixels_per_meter(png_ptr, info_ptr)
|
||||||
*.03937 +.5)
|
*.0254 +.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
png_uint_32
|
png_uint_32
|
||||||
png_get_y_pixels_per_inch(png_structp png_ptr, png_infop info_ptr)
|
png_get_y_pixels_per_inch(png_structp png_ptr, png_infop info_ptr)
|
||||||
{
|
{
|
||||||
return ((png_uint_32)((float)png_get_y_pixels_per_meter(png_ptr, info_ptr)
|
return ((png_uint_32)((float)png_get_y_pixels_per_meter(png_ptr, info_ptr)
|
||||||
*.03937 +.5)
|
*.0254 +.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
float
|
float
|
||||||
png_get_x_offset_inches(png_structp png_ptr, png_infop info_ptr)
|
png_get_x_offset_inches(png_structp png_ptr, png_infop info_ptr)
|
||||||
{
|
{
|
||||||
return ((float)png_get_x_offset_microns(png_ptr, info_ptr)
|
return ((float)png_get_x_offset_microns(png_ptr, info_ptr)
|
||||||
*.03937/1000000. +.5)
|
*.00003937);
|
||||||
}
|
}
|
||||||
|
|
||||||
float
|
float
|
||||||
png_get_y_offset_inches(png_structp png_ptr, png_infop info_ptr)
|
png_get_y_offset_inches(png_structp png_ptr, png_infop info_ptr)
|
||||||
{
|
{
|
||||||
return ((float)png_get_y_offset_microns(png_ptr, info_ptr)
|
return ((float)png_get_y_offset_microns(png_ptr, info_ptr)
|
||||||
*.03937/1000000. +.5)
|
*.00003937)
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(PNG_READ_pHYs_SUPPORTED)
|
#if defined(PNG_READ_pHYs_SUPPORTED)
|
||||||
@@ -277,7 +288,7 @@ png_get_pHYs_dpi(png_structp png_ptr, png_infop info_ptr,
|
|||||||
{
|
{
|
||||||
png_uint_32 retval = 0;
|
png_uint_32 retval = 0;
|
||||||
|
|
||||||
if (png_ptr != NULL && info_ptr != NULL && info_ptr->valid & PNG_INFO_pHYs)
|
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs))
|
||||||
{
|
{
|
||||||
png_debug1(1, "in %s retrieval function\n", "pHYs");
|
png_debug1(1, "in %s retrieval function\n", "pHYs");
|
||||||
if (res_x != NULL)
|
if (res_x != NULL)
|
||||||
@@ -296,15 +307,15 @@ png_get_pHYs_dpi(png_structp png_ptr, png_infop info_ptr,
|
|||||||
retval |= PNG_INFO_pHYs;
|
retval |= PNG_INFO_pHYs;
|
||||||
if(unit_type == 1)
|
if(unit_type == 1)
|
||||||
{
|
{
|
||||||
if (res_x != NULL) *res_x = (png_uint_32)(*res_x * 39.37 + .50);
|
if (res_x != NULL) *res_x = (png_uint_32)(*res_x * .0254 + .50);
|
||||||
if (res_y != NULL) *res_y = (png_uint_32)(*res_y * 39.37 + .50);
|
if (res_y != NULL) *res_y = (png_uint_32)(*res_y * .0254 + .50);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return (retval);
|
return (retval);
|
||||||
}
|
}
|
||||||
#endif /* PNG_READ_pHYs_SUPPORTED */
|
#endif /* PNG_READ_pHYs_SUPPORTED */
|
||||||
#endif /* PNG_INCH_CONVERSIONS $$ PNG_FLOATING_POINT_SUPPORTED */
|
#endif /* PNG_INCH_CONVERSIONS && PNG_FLOATING_POINT_SUPPORTED */
|
||||||
|
|
||||||
/* png_get_channels really belongs in here, too, but it's been around longer */
|
/* png_get_channels really belongs in here, too, but it's been around longer */
|
||||||
|
|
||||||
@@ -378,9 +389,9 @@ png_get_cHRM(png_structp png_ptr, png_infop info_ptr,
|
|||||||
#ifdef PNG_FIXED_POINT_SUPPORTED
|
#ifdef PNG_FIXED_POINT_SUPPORTED
|
||||||
png_uint_32
|
png_uint_32
|
||||||
png_get_cHRM_fixed(png_structp png_ptr, png_infop info_ptr,
|
png_get_cHRM_fixed(png_structp png_ptr, png_infop info_ptr,
|
||||||
png_uint_32 *white_x, png_uint_32 *white_y, png_uint_32 *red_x,
|
png_fixed_point *white_x, png_fixed_point *white_y, png_fixed_point *red_x,
|
||||||
png_uint_32 *red_y, png_uint_32 *green_x, png_uint_32 *green_y,
|
png_fixed_point *red_y, png_fixed_point *green_x, png_fixed_point *green_y,
|
||||||
png_uint_32 *blue_x, png_uint_32 *blue_y)
|
png_fixed_point *blue_x, png_fixed_point *blue_y)
|
||||||
{
|
{
|
||||||
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_cHRM))
|
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_cHRM))
|
||||||
{
|
{
|
||||||
@@ -423,10 +434,9 @@ png_get_gAMA(png_structp png_ptr, png_infop info_ptr, double *file_gamma)
|
|||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef PNG_FIXED_POINT_SUPPORTED
|
|
||||||
png_uint_32
|
png_uint_32
|
||||||
png_get_gAMA_fixed(png_structp png_ptr, png_infop info_ptr,
|
png_get_gAMA_fixed(png_structp png_ptr, png_infop info_ptr,
|
||||||
png_uint_32 *int_file_gamma)
|
png_fixed_point *int_file_gamma)
|
||||||
{
|
{
|
||||||
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_gAMA)
|
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_gAMA)
|
||||||
&& int_file_gamma != NULL)
|
&& int_file_gamma != NULL)
|
||||||
@@ -438,7 +448,6 @@ png_get_gAMA_fixed(png_structp png_ptr, png_infop info_ptr,
|
|||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(PNG_READ_sRGB_SUPPORTED)
|
#if defined(PNG_READ_sRGB_SUPPORTED)
|
||||||
png_uint_32
|
png_uint_32
|
||||||
@@ -459,7 +468,7 @@ png_get_sRGB(png_structp png_ptr, png_infop info_ptr, int *file_srgb_intent)
|
|||||||
png_uint_32
|
png_uint_32
|
||||||
png_get_iCCP(png_structp png_ptr, png_infop info_ptr,
|
png_get_iCCP(png_structp png_ptr, png_infop info_ptr,
|
||||||
png_charpp name, int *compression_type,
|
png_charpp name, int *compression_type,
|
||||||
png_charpp profile, png_int_32 *proflen)
|
png_charpp profile, png_uint_32 *proflen)
|
||||||
{
|
{
|
||||||
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_iCCP)
|
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_iCCP)
|
||||||
&& name != NULL && profile != NULL && proflen != NULL)
|
&& name != NULL && profile != NULL && proflen != NULL)
|
||||||
@@ -477,10 +486,10 @@ png_get_iCCP(png_structp png_ptr, png_infop info_ptr,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PNG_READ_sPLT_SUPPORTED) || defined(PNG_READ_zTXt_SUPPORTED)
|
#if defined(PNG_READ_sPLT_SUPPORTED)
|
||||||
png_uint_32
|
png_uint_32
|
||||||
png_get_spalettes(png_structp png_ptr, png_infop info_ptr,
|
png_get_sPLT(png_structp png_ptr, png_infop info_ptr,
|
||||||
png_spalette_pp spalettes)
|
png_sPLT_tpp spalettes)
|
||||||
{
|
{
|
||||||
if (png_ptr != NULL && info_ptr != NULL && spalettes != NULL)
|
if (png_ptr != NULL && info_ptr != NULL && spalettes != NULL)
|
||||||
*spalettes = info_ptr->splt_palettes;
|
*spalettes = info_ptr->splt_palettes;
|
||||||
@@ -573,8 +582,8 @@ png_get_pCAL(png_structp png_ptr, png_infop info_ptr,
|
|||||||
png_charp *purpose, png_int_32 *X0, png_int_32 *X1, int *type, int *nparams,
|
png_charp *purpose, png_int_32 *X0, png_int_32 *X1, int *type, int *nparams,
|
||||||
png_charp *units, png_charpp *params)
|
png_charp *units, png_charpp *params)
|
||||||
{
|
{
|
||||||
if (png_ptr != NULL && info_ptr != NULL && info_ptr->valid & PNG_INFO_pCAL &&
|
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pCAL)
|
||||||
purpose != NULL && X0 != NULL && X1 != NULL && type != NULL &&
|
&& purpose != NULL && X0 != NULL && X1 != NULL && type != NULL &&
|
||||||
nparams != NULL && units != NULL && params != NULL)
|
nparams != NULL && units != NULL && params != NULL)
|
||||||
{
|
{
|
||||||
png_debug1(1, "in %s retrieval function\n", "pCAL");
|
png_debug1(1, "in %s retrieval function\n", "pCAL");
|
||||||
@@ -595,9 +604,10 @@ png_get_pCAL(png_structp png_ptr, png_infop info_ptr,
|
|||||||
#ifdef PNG_FLOATING_POINT_SUPPORTED
|
#ifdef PNG_FLOATING_POINT_SUPPORTED
|
||||||
png_uint_32
|
png_uint_32
|
||||||
png_get_sCAL(png_structp png_ptr, png_infop info_ptr,
|
png_get_sCAL(png_structp png_ptr, png_infop info_ptr,
|
||||||
png_charpp unit, double *width, double *height)
|
int *unit, double *width, double *height)
|
||||||
{
|
{
|
||||||
if (png_ptr != NULL && info_ptr != NULL && info_ptr->valid & PNG_INFO_sCAL)
|
if (png_ptr != NULL && info_ptr != NULL &&
|
||||||
|
(info_ptr->valid & PNG_INFO_sCAL))
|
||||||
{
|
{
|
||||||
*unit = info_ptr->scal_unit;
|
*unit = info_ptr->scal_unit;
|
||||||
*width = info_ptr->scal_pixel_width;
|
*width = info_ptr->scal_pixel_width;
|
||||||
@@ -606,12 +616,14 @@ png_get_sCAL(png_structp png_ptr, png_infop info_ptr,
|
|||||||
}
|
}
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
#endif
|
#else
|
||||||
|
#ifdef PNG_FIXED_POINT_SUPPORTED
|
||||||
png_uint_32
|
png_uint_32
|
||||||
png_get_sCAL_s(png_structp png_ptr, png_infop info_ptr,
|
png_get_sCAL_s(png_structp png_ptr, png_infop info_ptr,
|
||||||
png_charpp unit, png_charpp width, png_charpp height)
|
int *unit, png_charpp width, png_charpp height)
|
||||||
{
|
{
|
||||||
if (png_ptr != NULL && info_ptr != NULL && info_ptr->valid & PNG_INFO_sCAL)
|
if (png_ptr != NULL && info_ptr != NULL &&
|
||||||
|
(info_ptr->valid & PNG_INFO_sCAL))
|
||||||
{
|
{
|
||||||
*unit = info_ptr->scal_unit;
|
*unit = info_ptr->scal_unit;
|
||||||
*width = info_ptr->scal_s_width;
|
*width = info_ptr->scal_s_width;
|
||||||
@@ -621,6 +633,8 @@ png_get_sCAL_s(png_structp png_ptr, png_infop info_ptr,
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(PNG_READ_pHYs_SUPPORTED)
|
#if defined(PNG_READ_pHYs_SUPPORTED)
|
||||||
png_uint_32
|
png_uint_32
|
||||||
@@ -629,7 +643,8 @@ png_get_pHYs(png_structp png_ptr, png_infop info_ptr,
|
|||||||
{
|
{
|
||||||
png_uint_32 retval = 0;
|
png_uint_32 retval = 0;
|
||||||
|
|
||||||
if (png_ptr != NULL && info_ptr != NULL && info_ptr->valid & PNG_INFO_pHYs)
|
if (png_ptr != NULL && info_ptr != NULL &&
|
||||||
|
(info_ptr->valid & PNG_INFO_pHYs))
|
||||||
{
|
{
|
||||||
png_debug1(1, "in %s retrieval function\n", "pHYs");
|
png_debug1(1, "in %s retrieval function\n", "pHYs");
|
||||||
if (res_x != NULL)
|
if (res_x != NULL)
|
||||||
@@ -656,8 +671,8 @@ png_uint_32
|
|||||||
png_get_PLTE(png_structp png_ptr, png_infop info_ptr, png_colorp *palette,
|
png_get_PLTE(png_structp png_ptr, png_infop info_ptr, png_colorp *palette,
|
||||||
int *num_palette)
|
int *num_palette)
|
||||||
{
|
{
|
||||||
if (png_ptr != NULL && info_ptr != NULL && info_ptr->valid & PNG_INFO_PLTE &&
|
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_PLTE)
|
||||||
palette != NULL)
|
&& palette != NULL)
|
||||||
{
|
{
|
||||||
png_debug1(1, "in %s retrieval function\n", "PLTE");
|
png_debug1(1, "in %s retrieval function\n", "PLTE");
|
||||||
*palette = info_ptr->palette;
|
*palette = info_ptr->palette;
|
||||||
@@ -672,8 +687,8 @@ png_get_PLTE(png_structp png_ptr, png_infop info_ptr, png_colorp *palette,
|
|||||||
png_uint_32
|
png_uint_32
|
||||||
png_get_sBIT(png_structp png_ptr, png_infop info_ptr, png_color_8p *sig_bit)
|
png_get_sBIT(png_structp png_ptr, png_infop info_ptr, png_color_8p *sig_bit)
|
||||||
{
|
{
|
||||||
if (png_ptr != NULL && info_ptr != NULL && info_ptr->valid & PNG_INFO_sBIT &&
|
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_sBIT)
|
||||||
sig_bit != NULL)
|
&& sig_bit != NULL)
|
||||||
{
|
{
|
||||||
png_debug1(1, "in %s retrieval function\n", "sBIT");
|
png_debug1(1, "in %s retrieval function\n", "sBIT");
|
||||||
*sig_bit = &(info_ptr->sig_bit);
|
*sig_bit = &(info_ptr->sig_bit);
|
||||||
@@ -699,6 +714,8 @@ png_get_text(png_structp png_ptr, png_infop info_ptr, png_textp *text_ptr,
|
|||||||
*num_text = info_ptr->num_text;
|
*num_text = info_ptr->num_text;
|
||||||
return ((png_uint_32)info_ptr->num_text);
|
return ((png_uint_32)info_ptr->num_text);
|
||||||
}
|
}
|
||||||
|
if (num_text != NULL)
|
||||||
|
*num_text = 0;
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -707,8 +724,8 @@ png_get_text(png_structp png_ptr, png_infop info_ptr, png_textp *text_ptr,
|
|||||||
png_uint_32
|
png_uint_32
|
||||||
png_get_tIME(png_structp png_ptr, png_infop info_ptr, png_timep *mod_time)
|
png_get_tIME(png_structp png_ptr, png_infop info_ptr, png_timep *mod_time)
|
||||||
{
|
{
|
||||||
if (png_ptr != NULL && info_ptr != NULL && info_ptr->valid & PNG_INFO_tIME &&
|
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_tIME)
|
||||||
mod_time != NULL)
|
&& mod_time != NULL)
|
||||||
{
|
{
|
||||||
png_debug1(1, "in %s retrieval function\n", "tIME");
|
png_debug1(1, "in %s retrieval function\n", "tIME");
|
||||||
*mod_time = &(info_ptr->mod_time);
|
*mod_time = &(info_ptr->mod_time);
|
||||||
@@ -724,7 +741,7 @@ png_get_tRNS(png_structp png_ptr, png_infop info_ptr,
|
|||||||
png_bytep *trans, int *num_trans, png_color_16p *trans_values)
|
png_bytep *trans, int *num_trans, png_color_16p *trans_values)
|
||||||
{
|
{
|
||||||
png_uint_32 retval = 0;
|
png_uint_32 retval = 0;
|
||||||
if (png_ptr != NULL && info_ptr != NULL && info_ptr->valid & PNG_INFO_tRNS)
|
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_tRNS))
|
||||||
{
|
{
|
||||||
png_debug1(1, "in %s retrieval function\n", "tRNS");
|
png_debug1(1, "in %s retrieval function\n", "tRNS");
|
||||||
if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
|
if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
|
||||||
@@ -775,3 +792,12 @@ png_get_rgb_to_gray_status (png_structp png_ptr)
|
|||||||
return png_ptr->rgb_to_gray_status;
|
return png_ptr->rgb_to_gray_status;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_USER_CHUNKS_SUPPORTED)
|
||||||
|
png_voidp
|
||||||
|
png_get_user_chunk_ptr(png_structp png_ptr)
|
||||||
|
{
|
||||||
|
return (png_ptr->user_chunk_ptr);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|||||||
4
pngmem.c
4
pngmem.c
@@ -1,11 +1,11 @@
|
|||||||
|
|
||||||
/* pngmem.c - stub functions for memory allocation
|
/* pngmem.c - stub functions for memory allocation
|
||||||
*
|
*
|
||||||
* libpng 1.0.5h - December 10, 1999
|
* libpng 1.0.6f - April 14, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, 1999 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
*
|
*
|
||||||
* This file provides a location for all memory allocation. Users who
|
* This file provides a location for all memory allocation. Users who
|
||||||
* need special memory handling are expected to supply replacement
|
* need special memory handling are expected to supply replacement
|
||||||
|
|||||||
BIN
pngnow.png
BIN
pngnow.png
Binary file not shown.
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
125
pngpread.c
125
pngpread.c
@@ -1,11 +1,11 @@
|
|||||||
|
|
||||||
/* pngpread.c - read a png file in push mode
|
/* pngpread.c - read a png file in push mode
|
||||||
*
|
*
|
||||||
* libpng 1.0.5h - December 10, 1999
|
* libpng 1.0.6f - April 14, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, 1999 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define PNG_INTERNAL
|
#define PNG_INTERNAL
|
||||||
@@ -151,27 +151,30 @@ png_push_read_chunk(png_structp png_ptr, png_infop info_ptr)
|
|||||||
#if defined(PNG_READ_hIST_SUPPORTED)
|
#if defined(PNG_READ_hIST_SUPPORTED)
|
||||||
PNG_hIST;
|
PNG_hIST;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(PNG_READ_iCCP_SUPPORTED)
|
||||||
|
PNG_iCCP;
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_iTXt_SUPPORTED)
|
||||||
|
PNG_iTXt;
|
||||||
|
#endif
|
||||||
#if defined(PNG_READ_oFFs_SUPPORTED)
|
#if defined(PNG_READ_oFFs_SUPPORTED)
|
||||||
PNG_oFFs;
|
PNG_oFFs;
|
||||||
#endif
|
#endif
|
||||||
#if defined(PNG_READ_pCAL_SUPPORTED)
|
#if defined(PNG_READ_pCAL_SUPPORTED)
|
||||||
PNG_pCAL;
|
PNG_pCAL;
|
||||||
#endif
|
#endif
|
||||||
#if defined(PNG_READ_sCAL_SUPPORTED)
|
|
||||||
PNG_sCAL;
|
|
||||||
#endif
|
|
||||||
#if defined(PNG_READ_pHYs_SUPPORTED)
|
#if defined(PNG_READ_pHYs_SUPPORTED)
|
||||||
PNG_pHYs;
|
PNG_pHYs;
|
||||||
#endif
|
#endif
|
||||||
#if defined(PNG_READ_sBIT_SUPPORTED)
|
#if defined(PNG_READ_sBIT_SUPPORTED)
|
||||||
PNG_sBIT;
|
PNG_sBIT;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(PNG_READ_sCAL_SUPPORTED)
|
||||||
|
PNG_sCAL;
|
||||||
|
#endif
|
||||||
#if defined(PNG_READ_sRGB_SUPPORTED)
|
#if defined(PNG_READ_sRGB_SUPPORTED)
|
||||||
PNG_sRGB;
|
PNG_sRGB;
|
||||||
#endif
|
#endif
|
||||||
#if defined(PNG_READ_iCCP_SUPPORTED)
|
|
||||||
PNG_iCCP;
|
|
||||||
#endif
|
|
||||||
#if defined(PNG_READ_sPLT_SUPPORTED)
|
#if defined(PNG_READ_sPLT_SUPPORTED)
|
||||||
PNG_sPLT;
|
PNG_sPLT;
|
||||||
#endif
|
#endif
|
||||||
@@ -447,7 +450,7 @@ png_push_read_chunk(png_structp png_ptr, png_infop info_ptr)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if defined(PNG_READ_iTXt_SUPPORTED)
|
#if defined(PNG_READ_iTXt_SUPPORTED)
|
||||||
else if (!png_memcmp(png_ptr->chunk_name, png_zTXt, 4))
|
else if (!png_memcmp(png_ptr->chunk_name, png_iTXt, 4))
|
||||||
{
|
{
|
||||||
png_push_handle_iTXt(png_ptr, info_ptr, png_ptr->push_length);
|
png_push_handle_iTXt(png_ptr, info_ptr, png_ptr->push_length);
|
||||||
}
|
}
|
||||||
@@ -949,7 +952,7 @@ png_read_push_finish_row(png_structp png_ptr)
|
|||||||
void
|
void
|
||||||
png_push_handle_tEXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
png_push_handle_tEXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
||||||
{
|
{
|
||||||
if (png_ptr->mode == PNG_BEFORE_IHDR || png_ptr->mode & PNG_HAVE_IEND)
|
if (!(png_ptr->mode & PNG_HAVE_IHDR) || (png_ptr->mode & PNG_HAVE_IEND))
|
||||||
{
|
{
|
||||||
png_error(png_ptr, "Out of place tEXt");
|
png_error(png_ptr, "Out of place tEXt");
|
||||||
/* to quiet some compiler warnings */
|
/* to quiet some compiler warnings */
|
||||||
@@ -1023,6 +1026,7 @@ png_push_read_tEXt(png_structp png_ptr, png_infop info_ptr)
|
|||||||
text_ptr->compression = PNG_TEXT_COMPRESSION_NONE;
|
text_ptr->compression = PNG_TEXT_COMPRESSION_NONE;
|
||||||
text_ptr->lang = (char *)NULL;
|
text_ptr->lang = (char *)NULL;
|
||||||
text_ptr->key = key;
|
text_ptr->key = key;
|
||||||
|
text_ptr->lang_key = (char *)NULL;
|
||||||
text_ptr->text = text;
|
text_ptr->text = text;
|
||||||
|
|
||||||
png_set_text(png_ptr, info_ptr, text_ptr, 1);
|
png_set_text(png_ptr, info_ptr, text_ptr, 1);
|
||||||
@@ -1036,7 +1040,7 @@ png_push_read_tEXt(png_structp png_ptr, png_infop info_ptr)
|
|||||||
void
|
void
|
||||||
png_push_handle_zTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
png_push_handle_zTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
||||||
{
|
{
|
||||||
if (png_ptr->mode == PNG_BEFORE_IHDR || png_ptr->mode & PNG_HAVE_IEND)
|
if (!(png_ptr->mode & PNG_HAVE_IHDR) || (png_ptr->mode & PNG_HAVE_IEND))
|
||||||
{
|
{
|
||||||
png_error(png_ptr, "Out of place zTXt");
|
png_error(png_ptr, "Out of place zTXt");
|
||||||
/* to quiet some compiler warnings */
|
/* to quiet some compiler warnings */
|
||||||
@@ -1201,8 +1205,9 @@ png_push_read_zTXt(png_structp png_ptr, png_infop info_ptr)
|
|||||||
|
|
||||||
text_ptr = (png_textp)png_malloc(png_ptr, (png_uint_32)sizeof(png_text));
|
text_ptr = (png_textp)png_malloc(png_ptr, (png_uint_32)sizeof(png_text));
|
||||||
text_ptr->compression = PNG_TEXT_COMPRESSION_zTXt;
|
text_ptr->compression = PNG_TEXT_COMPRESSION_zTXt;
|
||||||
text_ptr->lang = (char *)NULL;
|
|
||||||
text_ptr->key = key;
|
text_ptr->key = key;
|
||||||
|
text_ptr->lang = (char *)NULL;
|
||||||
|
text_ptr->lang_key = (char *)NULL;
|
||||||
text_ptr->text = text;
|
text_ptr->text = text;
|
||||||
|
|
||||||
png_set_text(png_ptr, info_ptr, text_ptr, 1);
|
png_set_text(png_ptr, info_ptr, text_ptr, 1);
|
||||||
@@ -1216,7 +1221,7 @@ png_push_read_zTXt(png_structp png_ptr, png_infop info_ptr)
|
|||||||
void
|
void
|
||||||
png_push_handle_iTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
png_push_handle_iTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
||||||
{
|
{
|
||||||
if (png_ptr->mode == PNG_BEFORE_IHDR || png_ptr->mode & PNG_HAVE_IEND)
|
if (!(png_ptr->mode & PNG_HAVE_IHDR) || (png_ptr->mode & PNG_HAVE_IEND))
|
||||||
{
|
{
|
||||||
png_error(png_ptr, "Out of place iTXt");
|
png_error(png_ptr, "Out of place iTXt");
|
||||||
/* to quiet some compiler warnings */
|
/* to quiet some compiler warnings */
|
||||||
@@ -1246,6 +1251,7 @@ png_push_handle_iTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length
|
|||||||
void
|
void
|
||||||
png_push_read_iTXt(png_structp png_ptr, png_infop info_ptr)
|
png_push_read_iTXt(png_structp png_ptr, png_infop info_ptr)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (png_ptr->buffer_size && png_ptr->current_text_left)
|
if (png_ptr->buffer_size && png_ptr->current_text_left)
|
||||||
{
|
{
|
||||||
png_size_t text_size;
|
png_size_t text_size;
|
||||||
@@ -1261,9 +1267,11 @@ png_push_read_iTXt(png_structp png_ptr, png_infop info_ptr)
|
|||||||
if (!(png_ptr->current_text_left))
|
if (!(png_ptr->current_text_left))
|
||||||
{
|
{
|
||||||
png_textp text_ptr;
|
png_textp text_ptr;
|
||||||
png_charp text;
|
|
||||||
png_charp lang;
|
|
||||||
png_charp key;
|
png_charp key;
|
||||||
|
int comp_flag;
|
||||||
|
png_charp lang;
|
||||||
|
png_charp lang_key;
|
||||||
|
png_charp text;
|
||||||
|
|
||||||
if (png_ptr->buffer_size < 4)
|
if (png_ptr->buffer_size < 4)
|
||||||
{
|
{
|
||||||
@@ -1278,26 +1286,36 @@ png_push_read_iTXt(png_structp png_ptr, png_infop info_ptr)
|
|||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
lang = png_ptr->current_text;
|
key = png_ptr->current_text;
|
||||||
png_ptr->current_text = 0;
|
png_ptr->current_text = 0;
|
||||||
|
|
||||||
for (key = lang; *key; key++)
|
for (lang = key; *lang; lang++)
|
||||||
/* empty loop */ ;
|
/* empty loop */ ;
|
||||||
|
|
||||||
if (key != lang + png_ptr->current_text_size)
|
if (lang != key + png_ptr->current_text_size)
|
||||||
key++;
|
lang++;
|
||||||
|
|
||||||
for (text = key; *text; text++)
|
comp_flag = *lang++;
|
||||||
|
lang++; /* skip comp_type, always zero */
|
||||||
|
|
||||||
|
for (lang_key = lang; *lang_key; lang_key++)
|
||||||
|
/* empty loop */ ;
|
||||||
|
lang_key++; /* skip NUL separator */
|
||||||
|
|
||||||
|
for (text = lang_key; *text; text++)
|
||||||
/* empty loop */ ;
|
/* empty loop */ ;
|
||||||
|
|
||||||
if (text != key + png_ptr->current_text_size)
|
if (text != key + png_ptr->current_text_size)
|
||||||
text++;
|
text++;
|
||||||
|
|
||||||
text_ptr = (png_textp)png_malloc(png_ptr, (png_uint_32)sizeof(png_text));
|
text_ptr = (png_textp)png_malloc(png_ptr, (png_uint_32)sizeof(png_text));
|
||||||
text_ptr->compression = PNG_TEXT_COMPRESSION_NONE;
|
text_ptr->compression = comp_flag + 2;
|
||||||
text_ptr->lang = lang;
|
|
||||||
text_ptr->key = key;
|
text_ptr->key = key;
|
||||||
|
text_ptr->lang = lang;
|
||||||
|
text_ptr->lang_key = lang_key;
|
||||||
text_ptr->text = text;
|
text_ptr->text = text;
|
||||||
|
text_ptr->text_length = 0;
|
||||||
|
text_ptr->itxt_length = png_strlen(text);
|
||||||
|
|
||||||
png_set_text(png_ptr, info_ptr, text_ptr, 1);
|
png_set_text(png_ptr, info_ptr, text_ptr, 1);
|
||||||
|
|
||||||
@@ -1307,25 +1325,70 @@ png_push_read_iTXt(png_structp png_ptr, png_infop info_ptr)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* This function is called when we haven't found a handler for this
|
/* This function is called when we haven't found a handler for this
|
||||||
* chunk. In the future we will have code here that can handle
|
* chunk. If there isn't a problem with the chunk itself (ie a bad chunk
|
||||||
* user-defined callback functions for unknown chunks before they are
|
* name or a critical chunk), the chunk is (currently) silently ignored.
|
||||||
* ignored or cause an error. If there isn't a problem with the
|
|
||||||
* chunk itself (ie a bad chunk name or a critical chunk), the chunk
|
|
||||||
* is (currently) silently ignored.
|
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
png_push_handle_unknown(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
png_push_handle_unknown(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
||||||
{
|
{
|
||||||
|
png_uint_32 skip=0;
|
||||||
png_check_chunk_name(png_ptr, png_ptr->chunk_name);
|
png_check_chunk_name(png_ptr, png_ptr->chunk_name);
|
||||||
|
|
||||||
if (!(png_ptr->chunk_name[0] & 0x20))
|
if (!(png_ptr->chunk_name[0] & 0x20))
|
||||||
{
|
{
|
||||||
png_chunk_error(png_ptr, "unknown critical chunk");
|
if(png_handle_as_unknown(png_ptr, png_ptr->chunk_name) !=
|
||||||
/* to quiet some compiler warnings */
|
HANDLE_CHUNK_ALWAYS
|
||||||
if(info_ptr == NULL) return;
|
#if defined(PNG_READ_USER_CHUNKS_SUPPORTED)
|
||||||
|
&& png_ptr->read_user_chunk_fn == (png_user_chunk_ptr)NULL
|
||||||
|
#endif
|
||||||
|
)
|
||||||
|
png_chunk_error(png_ptr, "unknown critical chunk");
|
||||||
|
|
||||||
|
/* to quiet compiler warnings about unused info_ptr */
|
||||||
|
if (info_ptr == NULL)
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
png_push_crc_skip(png_ptr, length);
|
#if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
|
||||||
|
if (png_ptr->flags & PNG_FLAG_KEEP_UNKNOWN_CHUNKS)
|
||||||
|
{
|
||||||
|
png_unknown_chunk chunk;
|
||||||
|
|
||||||
|
#ifdef PNG_MAX_MALLOC_64K
|
||||||
|
if (length > (png_uint_32)65535L)
|
||||||
|
{
|
||||||
|
png_warning(png_ptr, "unknown chunk too large to fit in memory");
|
||||||
|
skip = length - (png_uint_32)65535L;
|
||||||
|
length = (png_uint_32)65535L;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
strcpy((png_charp)chunk.name, (png_charp)png_ptr->chunk_name);
|
||||||
|
chunk.data = (png_bytep)png_malloc(png_ptr, length);
|
||||||
|
png_crc_read(png_ptr, chunk.data, length);
|
||||||
|
chunk.size = length;
|
||||||
|
#if defined(PNG_READ_USER_CHUNKS_SUPPORTED)
|
||||||
|
if(png_ptr->read_user_chunk_fn != (png_user_chunk_ptr)NULL)
|
||||||
|
{
|
||||||
|
/* callback to user unknown chunk handler */
|
||||||
|
if ((*(png_ptr->read_user_chunk_fn)) (png_ptr, &chunk) <= 0)
|
||||||
|
{
|
||||||
|
if (!(png_ptr->chunk_name[0] & 0x20))
|
||||||
|
if(png_handle_as_unknown(png_ptr, png_ptr->chunk_name) !=
|
||||||
|
HANDLE_CHUNK_ALWAYS)
|
||||||
|
png_chunk_error(png_ptr, "unknown critical chunk");
|
||||||
|
}
|
||||||
|
png_set_unknown_chunks(png_ptr, info_ptr, &chunk, 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
png_set_unknown_chunks(png_ptr, info_ptr, &chunk, 1);
|
||||||
|
png_free(png_ptr, chunk.data);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
skip=length;
|
||||||
|
png_push_crc_skip(png_ptr, skip);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|||||||
233
pngread.c
233
pngread.c
@@ -1,11 +1,11 @@
|
|||||||
|
|
||||||
/* pngread.c - read a PNG file
|
/* pngread.c - read a PNG file
|
||||||
*
|
*
|
||||||
* libpng 1.0.5h - December 10, 1999
|
* libpng 1.0.6f - April 14, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, 1999 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
*
|
*
|
||||||
* This file contains routines that an application calls directly to
|
* This file contains routines that an application calls directly to
|
||||||
* read a PNG file or stream.
|
* read a PNG file or stream.
|
||||||
@@ -34,9 +34,13 @@ png_create_read_struct_2(png_const_charp user_png_ver, png_voidp error_ptr,
|
|||||||
#endif /* PNG_USER_MEM_SUPPORTED */
|
#endif /* PNG_USER_MEM_SUPPORTED */
|
||||||
|
|
||||||
png_structp png_ptr;
|
png_structp png_ptr;
|
||||||
|
|
||||||
|
#ifdef PNG_SETJMP_SUPPORTED
|
||||||
#ifdef USE_FAR_KEYWORD
|
#ifdef USE_FAR_KEYWORD
|
||||||
jmp_buf jmpbuf;
|
jmp_buf jmpbuf;
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
png_debug(1, "in png_create_read_struct\n");
|
png_debug(1, "in png_create_read_struct\n");
|
||||||
#ifdef PNG_USER_MEM_SUPPORTED
|
#ifdef PNG_USER_MEM_SUPPORTED
|
||||||
if ((png_ptr = (png_structp)png_create_struct_2(PNG_STRUCT_PNG,
|
if ((png_ptr = (png_structp)png_create_struct_2(PNG_STRUCT_PNG,
|
||||||
@@ -47,6 +51,8 @@ png_create_read_struct_2(png_const_charp user_png_ver, png_voidp error_ptr,
|
|||||||
{
|
{
|
||||||
return (png_structp)NULL;
|
return (png_structp)NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef PNG_SETJMP_SUPPORTED
|
||||||
#ifdef USE_FAR_KEYWORD
|
#ifdef USE_FAR_KEYWORD
|
||||||
if (setjmp(jmpbuf))
|
if (setjmp(jmpbuf))
|
||||||
#else
|
#else
|
||||||
@@ -60,6 +66,7 @@ png_create_read_struct_2(png_const_charp user_png_ver, png_voidp error_ptr,
|
|||||||
#ifdef USE_FAR_KEYWORD
|
#ifdef USE_FAR_KEYWORD
|
||||||
png_memcpy(png_ptr->jmpbuf,jmpbuf,sizeof(jmp_buf));
|
png_memcpy(png_ptr->jmpbuf,jmpbuf,sizeof(jmp_buf));
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_USER_MEM_SUPPORTED
|
#ifdef PNG_USER_MEM_SUPPORTED
|
||||||
png_set_mem_fn(png_ptr, mem_ptr, malloc_fn, free_fn);
|
png_set_mem_fn(png_ptr, mem_ptr, malloc_fn, free_fn);
|
||||||
@@ -110,17 +117,24 @@ png_create_read_struct_2(png_const_charp user_png_ver, png_voidp error_ptr,
|
|||||||
void
|
void
|
||||||
png_read_init(png_structp png_ptr)
|
png_read_init(png_structp png_ptr)
|
||||||
{
|
{
|
||||||
|
#ifdef PNG_SETJMP_SUPPORTED
|
||||||
jmp_buf tmp_jmp; /* to save current jump buffer */
|
jmp_buf tmp_jmp; /* to save current jump buffer */
|
||||||
|
#endif
|
||||||
|
|
||||||
png_debug(1, "in png_read_init\n");
|
png_debug(1, "in png_read_init\n");
|
||||||
|
|
||||||
|
#ifdef PNG_SETJMP_SUPPORTED
|
||||||
/* save jump buffer and error functions */
|
/* save jump buffer and error functions */
|
||||||
png_memcpy(tmp_jmp, png_ptr->jmpbuf, sizeof (jmp_buf));
|
png_memcpy(tmp_jmp, png_ptr->jmpbuf, sizeof (jmp_buf));
|
||||||
|
#endif
|
||||||
|
|
||||||
/* reset all variables to 0 */
|
/* reset all variables to 0 */
|
||||||
png_memset(png_ptr, 0, sizeof (png_struct));
|
png_memset(png_ptr, 0, sizeof (png_struct));
|
||||||
|
|
||||||
|
#ifdef PNG_SETJMP_SUPPORTED
|
||||||
/* restore jump buffer */
|
/* restore jump buffer */
|
||||||
png_memcpy(png_ptr->jmpbuf, tmp_jmp, sizeof (jmp_buf));
|
png_memcpy(png_ptr->jmpbuf, tmp_jmp, sizeof (jmp_buf));
|
||||||
|
#endif
|
||||||
|
|
||||||
/* initialize zbuf - compression buffer */
|
/* initialize zbuf - compression buffer */
|
||||||
png_ptr->zbuf_size = PNG_ZBUF_SIZE;
|
png_ptr->zbuf_size = PNG_ZBUF_SIZE;
|
||||||
@@ -214,7 +228,7 @@ png_read_info(png_structp png_ptr, png_infop info_ptr)
|
|||||||
#if defined(PNG_READ_sBIT_SUPPORTED)
|
#if defined(PNG_READ_sBIT_SUPPORTED)
|
||||||
PNG_sBIT;
|
PNG_sBIT;
|
||||||
#endif
|
#endif
|
||||||
#if defined(PNG_READ_pCAL_SUPPORTED)
|
#if defined(PNG_READ_sCAL_SUPPORTED)
|
||||||
PNG_sCAL;
|
PNG_sCAL;
|
||||||
#endif
|
#endif
|
||||||
#if defined(PNG_READ_sPLT_SUPPORTED)
|
#if defined(PNG_READ_sPLT_SUPPORTED)
|
||||||
@@ -253,10 +267,29 @@ png_read_info(png_structp png_ptr, png_infop info_ptr)
|
|||||||
*/
|
*/
|
||||||
if (!png_memcmp(png_ptr->chunk_name, png_IHDR, 4))
|
if (!png_memcmp(png_ptr->chunk_name, png_IHDR, 4))
|
||||||
png_handle_IHDR(png_ptr, info_ptr, length);
|
png_handle_IHDR(png_ptr, info_ptr, length);
|
||||||
else if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4))
|
|
||||||
png_handle_PLTE(png_ptr, info_ptr, length);
|
|
||||||
else if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4))
|
else if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4))
|
||||||
png_handle_IEND(png_ptr, info_ptr, length);
|
png_handle_IEND(png_ptr, info_ptr, length);
|
||||||
|
#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
|
||||||
|
else if (png_handle_as_unknown(png_ptr, png_ptr->chunk_name))
|
||||||
|
{
|
||||||
|
if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
|
||||||
|
png_ptr->mode |= PNG_HAVE_IDAT;
|
||||||
|
png_handle_unknown(png_ptr, info_ptr, length);
|
||||||
|
if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4))
|
||||||
|
png_ptr->mode |= PNG_HAVE_PLTE;
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
|
||||||
|
{
|
||||||
|
if (!(png_ptr->mode & PNG_HAVE_IHDR))
|
||||||
|
png_error(png_ptr, "Missing IHDR before IDAT");
|
||||||
|
else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE &&
|
||||||
|
!(png_ptr->mode & PNG_HAVE_PLTE))
|
||||||
|
png_error(png_ptr, "Missing PLTE before IDAT");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4))
|
||||||
|
png_handle_PLTE(png_ptr, info_ptr, length);
|
||||||
else if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
|
else if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
|
||||||
{
|
{
|
||||||
if (!(png_ptr->mode & PNG_HAVE_IHDR))
|
if (!(png_ptr->mode & PNG_HAVE_IHDR))
|
||||||
@@ -421,7 +454,7 @@ png_read_row(png_structp png_ptr, png_bytep row, png_bytep dsp_row)
|
|||||||
switch (png_ptr->pass)
|
switch (png_ptr->pass)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
if (png_ptr->row_number & 7)
|
if (png_ptr->row_number & 0x07)
|
||||||
{
|
{
|
||||||
if (dsp_row != NULL)
|
if (dsp_row != NULL)
|
||||||
png_combine_row(png_ptr, dsp_row,
|
png_combine_row(png_ptr, dsp_row,
|
||||||
@@ -431,7 +464,7 @@ png_read_row(png_structp png_ptr, png_bytep row, png_bytep dsp_row)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
if ((png_ptr->row_number & 7) || png_ptr->width < 5)
|
if ((png_ptr->row_number & 0x07) || png_ptr->width < 5)
|
||||||
{
|
{
|
||||||
if (dsp_row != NULL)
|
if (dsp_row != NULL)
|
||||||
png_combine_row(png_ptr, dsp_row,
|
png_combine_row(png_ptr, dsp_row,
|
||||||
@@ -441,7 +474,7 @@ png_read_row(png_structp png_ptr, png_bytep row, png_bytep dsp_row)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if ((png_ptr->row_number & 7) != 4)
|
if ((png_ptr->row_number & 0x07) != 4)
|
||||||
{
|
{
|
||||||
if (dsp_row != NULL && (png_ptr->row_number & 4))
|
if (dsp_row != NULL && (png_ptr->row_number & 4))
|
||||||
png_combine_row(png_ptr, dsp_row,
|
png_combine_row(png_ptr, dsp_row,
|
||||||
@@ -546,6 +579,7 @@ png_read_row(png_structp png_ptr, png_bytep row, png_bytep dsp_row)
|
|||||||
png_ptr->row_info.rowbytes = ((png_ptr->row_info.width *
|
png_ptr->row_info.rowbytes = ((png_ptr->row_info.width *
|
||||||
(png_uint_32)png_ptr->row_info.pixel_depth + 7) >> 3);
|
(png_uint_32)png_ptr->row_info.pixel_depth + 7) >> 3);
|
||||||
|
|
||||||
|
if(png_ptr->row_buf[0])
|
||||||
png_read_filter_row(png_ptr, &(png_ptr->row_info),
|
png_read_filter_row(png_ptr, &(png_ptr->row_info),
|
||||||
png_ptr->row_buf + 1, png_ptr->prev_row + 1,
|
png_ptr->row_buf + 1, png_ptr->prev_row + 1,
|
||||||
(int)(png_ptr->row_buf[0]));
|
(int)(png_ptr->row_buf[0]));
|
||||||
@@ -607,7 +641,7 @@ png_read_row(png_structp png_ptr, png_bytep row, png_bytep dsp_row)
|
|||||||
* not called png_set_interlace_handling(), the display_row buffer will
|
* not called png_set_interlace_handling(), the display_row buffer will
|
||||||
* be ignored, so pass NULL to it.
|
* be ignored, so pass NULL to it.
|
||||||
*
|
*
|
||||||
* [*] png_handle_alpha() does not exist yet, as of libpng version 1.0.5h.
|
* [*] png_handle_alpha() does not exist yet, as of libpng version 1.0.6f.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -656,7 +690,7 @@ png_read_rows(png_structp png_ptr, png_bytepp row,
|
|||||||
* only call this function once. If you desire to have an image for
|
* only call this function once. If you desire to have an image for
|
||||||
* each pass of a interlaced image, use png_read_rows() instead.
|
* each pass of a interlaced image, use png_read_rows() instead.
|
||||||
*
|
*
|
||||||
* [*] png_handle_alpha() does not exist yet, as of libpng version 1.0.5h.
|
* [*] png_handle_alpha() does not exist yet, as of libpng version 1.0.6f.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
png_read_image(png_structp png_ptr, png_bytepp image)
|
png_read_image(png_structp png_ptr, png_bytepp image)
|
||||||
@@ -743,7 +777,7 @@ png_read_end(png_structp png_ptr, png_infop info_ptr)
|
|||||||
#if defined(PNG_READ_sBIT_SUPPORTED)
|
#if defined(PNG_READ_sBIT_SUPPORTED)
|
||||||
PNG_sBIT;
|
PNG_sBIT;
|
||||||
#endif
|
#endif
|
||||||
#if defined(PNG_READ_pCAL_SUPPORTED)
|
#if defined(PNG_READ_sCAL_SUPPORTED)
|
||||||
PNG_sCAL;
|
PNG_sCAL;
|
||||||
#endif
|
#endif
|
||||||
#if defined(PNG_READ_sPLT_SUPPORTED)
|
#if defined(PNG_READ_sPLT_SUPPORTED)
|
||||||
@@ -776,6 +810,23 @@ png_read_end(png_structp png_ptr, png_infop info_ptr)
|
|||||||
|
|
||||||
if (!png_memcmp(png_ptr->chunk_name, png_IHDR, 4))
|
if (!png_memcmp(png_ptr->chunk_name, png_IHDR, 4))
|
||||||
png_handle_IHDR(png_ptr, info_ptr, length);
|
png_handle_IHDR(png_ptr, info_ptr, length);
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4))
|
||||||
|
png_handle_IEND(png_ptr, info_ptr, length);
|
||||||
|
#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
|
||||||
|
else if (png_handle_as_unknown(png_ptr, png_ptr->chunk_name))
|
||||||
|
{
|
||||||
|
if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
|
||||||
|
{
|
||||||
|
if (length > 0 || png_ptr->mode & PNG_AFTER_IDAT)
|
||||||
|
png_error(png_ptr, "Too many IDAT's found");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
png_ptr->mode |= PNG_AFTER_IDAT;
|
||||||
|
png_handle_unknown(png_ptr, info_ptr, length);
|
||||||
|
if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4))
|
||||||
|
png_ptr->mode |= PNG_HAVE_PLTE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
else if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
|
else if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
|
||||||
{
|
{
|
||||||
/* Zero length IDATs are legal after the last IDAT has been
|
/* Zero length IDATs are legal after the last IDAT has been
|
||||||
@@ -783,13 +834,10 @@ png_read_end(png_structp png_ptr, png_infop info_ptr)
|
|||||||
*/
|
*/
|
||||||
if (length > 0 || png_ptr->mode & PNG_AFTER_IDAT)
|
if (length > 0 || png_ptr->mode & PNG_AFTER_IDAT)
|
||||||
png_error(png_ptr, "Too many IDAT's found");
|
png_error(png_ptr, "Too many IDAT's found");
|
||||||
else
|
png_crc_finish(png_ptr, length);
|
||||||
png_crc_finish(png_ptr, 0);
|
|
||||||
}
|
}
|
||||||
else if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4))
|
else if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4))
|
||||||
png_handle_PLTE(png_ptr, info_ptr, length);
|
png_handle_PLTE(png_ptr, info_ptr, length);
|
||||||
else if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4))
|
|
||||||
png_handle_IEND(png_ptr, info_ptr, length);
|
|
||||||
#if defined(PNG_READ_bKGD_SUPPORTED)
|
#if defined(PNG_READ_bKGD_SUPPORTED)
|
||||||
else if (!png_memcmp(png_ptr->chunk_name, png_bKGD, 4))
|
else if (!png_memcmp(png_ptr->chunk_name, png_bKGD, 4))
|
||||||
png_handle_bKGD(png_ptr, info_ptr, length);
|
png_handle_bKGD(png_ptr, info_ptr, length);
|
||||||
@@ -894,7 +942,7 @@ png_destroy_read_struct(png_structpp png_ptr_ptr, png_infopp info_ptr_ptr,
|
|||||||
if (info_ptr != NULL)
|
if (info_ptr != NULL)
|
||||||
{
|
{
|
||||||
#if defined(PNG_TEXT_SUPPORTED)
|
#if defined(PNG_TEXT_SUPPORTED)
|
||||||
png_free(png_ptr, info_ptr->text);
|
png_free_data(png_ptr, info_ptr, PNG_FREE_TEXT, -1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_USER_MEM_SUPPORTED
|
#ifdef PNG_USER_MEM_SUPPORTED
|
||||||
@@ -908,7 +956,7 @@ png_destroy_read_struct(png_structpp png_ptr_ptr, png_infopp info_ptr_ptr,
|
|||||||
if (end_info_ptr != NULL)
|
if (end_info_ptr != NULL)
|
||||||
{
|
{
|
||||||
#if defined(PNG_READ_TEXT_SUPPORTED)
|
#if defined(PNG_READ_TEXT_SUPPORTED)
|
||||||
png_free(png_ptr, end_info_ptr->text);
|
png_free_data(png_ptr, end_info_ptr, PNG_FREE_TEXT, -1);
|
||||||
#endif
|
#endif
|
||||||
#ifdef PNG_USER_MEM_SUPPORTED
|
#ifdef PNG_USER_MEM_SUPPORTED
|
||||||
png_destroy_struct_2((png_voidp)end_info_ptr, free_fn);
|
png_destroy_struct_2((png_voidp)end_info_ptr, free_fn);
|
||||||
@@ -933,7 +981,9 @@ png_destroy_read_struct(png_structpp png_ptr_ptr, png_infopp info_ptr_ptr,
|
|||||||
void
|
void
|
||||||
png_read_destroy(png_structp png_ptr, png_infop info_ptr, png_infop end_info_ptr)
|
png_read_destroy(png_structp png_ptr, png_infop info_ptr, png_infop end_info_ptr)
|
||||||
{
|
{
|
||||||
|
#ifdef PNG_SETJMP_SUPPORTED
|
||||||
jmp_buf tmp_jmp;
|
jmp_buf tmp_jmp;
|
||||||
|
#endif
|
||||||
png_error_ptr error_fn;
|
png_error_ptr error_fn;
|
||||||
png_error_ptr warning_fn;
|
png_error_ptr warning_fn;
|
||||||
png_voidp error_ptr;
|
png_voidp error_ptr;
|
||||||
@@ -963,16 +1013,19 @@ png_read_destroy(png_structp png_ptr, png_infop info_ptr, png_infop end_info_ptr
|
|||||||
png_free(png_ptr, png_ptr->gamma_from_1);
|
png_free(png_ptr, png_ptr->gamma_from_1);
|
||||||
png_free(png_ptr, png_ptr->gamma_to_1);
|
png_free(png_ptr, png_ptr->gamma_to_1);
|
||||||
#endif
|
#endif
|
||||||
if (png_ptr->flags & PNG_FLAG_FREE_PALETTE)
|
if (png_ptr->free_me & PNG_FREE_PLTE)
|
||||||
png_zfree(png_ptr, png_ptr->palette);
|
png_zfree(png_ptr, png_ptr->palette);
|
||||||
|
png_ptr->free_me &= ~PNG_FREE_PLTE;
|
||||||
#if defined(PNG_tRNS_SUPPORTED) || \
|
#if defined(PNG_tRNS_SUPPORTED) || \
|
||||||
defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
|
defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
|
||||||
if (png_ptr->flags & PNG_FLAG_FREE_TRANS)
|
if (png_ptr->free_me & PNG_FREE_TRNS)
|
||||||
png_free(png_ptr, png_ptr->trans);
|
png_free(png_ptr, png_ptr->trans);
|
||||||
|
png_ptr->free_me &= ~PNG_FREE_TRNS;
|
||||||
#endif
|
#endif
|
||||||
#if defined(PNG_READ_hIST_SUPPORTED)
|
#if defined(PNG_READ_hIST_SUPPORTED)
|
||||||
if (png_ptr->flags & PNG_FLAG_FREE_HIST)
|
if (png_ptr->free_me & PNG_FREE_HIST)
|
||||||
png_free(png_ptr, png_ptr->hist);
|
png_free(png_ptr, png_ptr->hist);
|
||||||
|
png_ptr->free_me &= ~PNG_FREE_HIST;
|
||||||
#endif
|
#endif
|
||||||
#if defined(PNG_READ_GAMMA_SUPPORTED)
|
#if defined(PNG_READ_GAMMA_SUPPORTED)
|
||||||
if (png_ptr->gamma_16_table != NULL)
|
if (png_ptr->gamma_16_table != NULL)
|
||||||
@@ -1020,7 +1073,9 @@ png_read_destroy(png_structp png_ptr, png_infop info_ptr, png_infop end_info_ptr
|
|||||||
/* Save the important info out of the png_struct, in case it is
|
/* Save the important info out of the png_struct, in case it is
|
||||||
* being used again.
|
* being used again.
|
||||||
*/
|
*/
|
||||||
|
#ifdef PNG_SETJMP_SUPPORTED
|
||||||
png_memcpy(tmp_jmp, png_ptr->jmpbuf, sizeof (jmp_buf));
|
png_memcpy(tmp_jmp, png_ptr->jmpbuf, sizeof (jmp_buf));
|
||||||
|
#endif
|
||||||
|
|
||||||
error_fn = png_ptr->error_fn;
|
error_fn = png_ptr->error_fn;
|
||||||
warning_fn = png_ptr->warning_fn;
|
warning_fn = png_ptr->warning_fn;
|
||||||
@@ -1038,7 +1093,10 @@ png_read_destroy(png_structp png_ptr, png_infop info_ptr, png_infop end_info_ptr
|
|||||||
png_ptr->free_fn = free_fn;
|
png_ptr->free_fn = free_fn;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef PNG_SETJMP_SUPPORTED
|
||||||
png_memcpy(png_ptr->jmpbuf, tmp_jmp, sizeof (jmp_buf));
|
png_memcpy(png_ptr->jmpbuf, tmp_jmp, sizeof (jmp_buf));
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -1046,3 +1104,138 @@ png_set_read_status_fn(png_structp png_ptr, png_read_status_ptr read_row_fn)
|
|||||||
{
|
{
|
||||||
png_ptr->read_row_fn = read_row_fn;
|
png_ptr->read_row_fn = read_row_fn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(PNG_INFO_IMAGE_SUPPORTED)
|
||||||
|
void png_read_png(png_structp png_ptr, png_infop info_ptr,
|
||||||
|
int transforms,
|
||||||
|
voidp params)
|
||||||
|
{
|
||||||
|
int row;
|
||||||
|
|
||||||
|
#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED)
|
||||||
|
/* invert the alpha channel from opacity to transparency */
|
||||||
|
if (transforms & PNG_TRANSFORM_INVERT_ALPHA)
|
||||||
|
png_set_invert_alpha(png_ptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* The call to png_read_info() gives us all of the information from the
|
||||||
|
* PNG file before the first IDAT (image data chunk).
|
||||||
|
*/
|
||||||
|
png_read_info(png_ptr, info_ptr);
|
||||||
|
|
||||||
|
/* -------------- image transformations start here ------------------- */
|
||||||
|
|
||||||
|
#if defined(PNG_READ_16_TO_8_SUPPORTED)
|
||||||
|
/* tell libpng to strip 16 bit/color files down to 8 bits/color */
|
||||||
|
if (transforms & PNG_TRANSFORM_STRIP_16)
|
||||||
|
png_set_strip_16(png_ptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_STRIP_ALPHA_SUPPORTED)
|
||||||
|
/* Strip alpha bytes from the input data without combining with the
|
||||||
|
* background (not recommended).
|
||||||
|
*/
|
||||||
|
if (transforms & PNG_TRANSFORM_STRIP_ALPHA)
|
||||||
|
png_set_strip_alpha(png_ptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_PACK_SUPPORTED) && !defined(PNG_READ_EXPAND_SUPPORTED)
|
||||||
|
/* Extract multiple pixels with bit depths of 1, 2, and 4 from a single
|
||||||
|
* byte into separate bytes (useful for paletted and grayscale images).
|
||||||
|
*/
|
||||||
|
if (transforms & PNG_TRANSFORM_PACKING)
|
||||||
|
png_set_packing(png_ptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_PACKSWAP_SUPPORTED)
|
||||||
|
/* Change the order of packed pixels to least significant bit first
|
||||||
|
* (not useful if you are using png_set_packing). */
|
||||||
|
if (transforms & PNG_TRANSFORM_PACKSWAP)
|
||||||
|
png_set_packswap(png_ptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_EXPAND_SUPPORTED)
|
||||||
|
/* Expand paletted colors into true RGB triplets
|
||||||
|
* Expand grayscale images to full 8 bits from 1, 2, or 4 bits/pixel
|
||||||
|
* Expand paletted or RGB images with transparency to full alpha
|
||||||
|
* channels so the data will be available as RGBA quartets.
|
||||||
|
*/
|
||||||
|
if (transforms & PNG_TRANSFORM_EXPAND)
|
||||||
|
if ((png_ptr->bit_depth < 8) ||
|
||||||
|
(png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) ||
|
||||||
|
(png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)))
|
||||||
|
png_set_expand(png_ptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* We don't handle background color or gamma transformation or dithering. */
|
||||||
|
|
||||||
|
#if defined(PNG_READ_INVERT_SUPPORTED)
|
||||||
|
/* invert monochrome files to have 0 as white and 1 as black */
|
||||||
|
if (transforms & PNG_TRANSFORM_INVERT_MONO)
|
||||||
|
png_set_invert_mono(png_ptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_SHIFT_SUPPORTED)
|
||||||
|
/* If you want to shift the pixel values from the range [0,255] or
|
||||||
|
* [0,65535] to the original [0,7] or [0,31], or whatever range the
|
||||||
|
* colors were originally in:
|
||||||
|
*/
|
||||||
|
if ((transforms & PNG_TRANSFORM_SHIFT)
|
||||||
|
&& png_get_valid(png_ptr, info_ptr, PNG_INFO_sBIT))
|
||||||
|
{
|
||||||
|
png_color_8p sig_bit;
|
||||||
|
|
||||||
|
png_get_sBIT(png_ptr, info_ptr, &sig_bit);
|
||||||
|
png_set_shift(png_ptr, sig_bit);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_BGR_SUPPORTED)
|
||||||
|
/* flip the RGB pixels to BGR (or RGBA to BGRA) */
|
||||||
|
if (transforms & PNG_TRANSFORM_BGR)
|
||||||
|
png_set_bgr(png_ptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED)
|
||||||
|
/* swap the RGBA or GA data to ARGB or AG (or BGRA to ABGR) */
|
||||||
|
if (transforms & PNG_TRANSFORM_SWAP_ALPHA)
|
||||||
|
png_set_swap_alpha(png_ptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_SWAP_SUPPORTED)
|
||||||
|
/* swap bytes of 16 bit files to least significant byte first */
|
||||||
|
if (transforms & PNG_TRANSFORM_SWAP_ENDIAN)
|
||||||
|
png_set_swap(png_ptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* We don't handle adding filler bytes */
|
||||||
|
|
||||||
|
/* Optional call to gamma correct and add the background to the palette
|
||||||
|
* and update info structure. REQUIRED if you are expecting libpng to
|
||||||
|
* update the palette for you (ie you selected such a transform above).
|
||||||
|
*/
|
||||||
|
png_read_update_info(png_ptr, info_ptr);
|
||||||
|
|
||||||
|
/* -------------- image transformations end here ------------------- */
|
||||||
|
|
||||||
|
if(info_ptr->row_pointers == NULL)
|
||||||
|
{
|
||||||
|
info_ptr->row_pointers = (png_bytepp)png_malloc(png_ptr,
|
||||||
|
info_ptr->height * sizeof(png_bytep));
|
||||||
|
info_ptr->free_me |= PNG_FREE_ROWS;
|
||||||
|
}
|
||||||
|
for (row = 0; row < (int)info_ptr->height; row++)
|
||||||
|
info_ptr->row_pointers[row] = png_malloc(png_ptr,
|
||||||
|
png_get_rowbytes(png_ptr, info_ptr));
|
||||||
|
|
||||||
|
png_read_image(png_ptr, info_ptr->row_pointers);
|
||||||
|
info_ptr->valid |= PNG_INFO_IDAT;
|
||||||
|
|
||||||
|
/* read rest of file, and get additional chunks in info_ptr - REQUIRED */
|
||||||
|
png_read_end(png_ptr, info_ptr);
|
||||||
|
|
||||||
|
if(transforms == 0 || params == (voidp)NULL)
|
||||||
|
/* quiet compiler warnings */ return;
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|||||||
4
pngrio.c
4
pngrio.c
@@ -1,11 +1,11 @@
|
|||||||
|
|
||||||
/* pngrio.c - functions for data input
|
/* pngrio.c - functions for data input
|
||||||
*
|
*
|
||||||
* libpng 1.0.5h - December 10, 1999
|
* libpng 1.0.6f - April 14, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, 1999 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
*
|
*
|
||||||
* This file provides a location for all input. Users who need
|
* This file provides a location for all input. Users who need
|
||||||
* special handling are expected to write a function that has the same
|
* special handling are expected to write a function that has the same
|
||||||
|
|||||||
170
pngrtran.c
170
pngrtran.c
@@ -1,11 +1,11 @@
|
|||||||
|
|
||||||
/* pngrtran.c - transforms the data in a row for PNG readers
|
/* pngrtran.c - transforms the data in a row for PNG readers
|
||||||
*
|
*
|
||||||
* libpng 1.0.5h - December 10, 1999
|
* libpng 1.0.6f - April 14, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, 1999 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
*
|
*
|
||||||
* This file contains functions optionally called by an application
|
* This file contains functions optionally called by an application
|
||||||
* in order to tell libpng how to handle data when reading a PNG.
|
* in order to tell libpng how to handle data when reading a PNG.
|
||||||
@@ -367,7 +367,7 @@ png_set_dither(png_structp png_ptr, png_colorp palette,
|
|||||||
{
|
{
|
||||||
int j, next_j;
|
int j, next_j;
|
||||||
|
|
||||||
if (num_new_palette & 1)
|
if (num_new_palette & 0x01)
|
||||||
{
|
{
|
||||||
j = p->left;
|
j = p->left;
|
||||||
next_j = p->right;
|
next_j = p->right;
|
||||||
@@ -582,14 +582,25 @@ png_set_gray_to_rgb(png_structp png_ptr)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) && \
|
#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
|
||||||
defined(PNG_FLOATING_POINT_SUPPORTED)
|
#if defined(PNG_FLOATING_POINT_SUPPORTED)
|
||||||
/* Convert a RGB image to a grayscale of the same width. This allows us,
|
/* Convert a RGB image to a grayscale of the same width. This allows us,
|
||||||
* for example, to convert a 24 bpp RGB image into an 8 bpp grayscale image.
|
* for example, to convert a 24 bpp RGB image into an 8 bpp grayscale image.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void
|
void
|
||||||
png_set_rgb_to_gray(png_structp png_ptr, int error_action, double red,
|
png_set_rgb_to_gray(png_structp png_ptr, int error_action, double red,
|
||||||
double green)
|
double green)
|
||||||
|
{
|
||||||
|
int red_fixed = (int)((float)red*100000.0 + 0.5);
|
||||||
|
int green_fixed = (int)((float)green*100000.0 + 0.5);
|
||||||
|
png_set_rgb_to_gray_fixed(png_ptr, error_action, red_fixed, green_fixed);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void
|
||||||
|
png_set_rgb_to_gray_fixed(png_structp png_ptr, int error_action,
|
||||||
|
png_fixed_point red, png_fixed_point green)
|
||||||
{
|
{
|
||||||
png_debug(1, "in png_set_rgb_to_gray\n");
|
png_debug(1, "in png_set_rgb_to_gray\n");
|
||||||
switch(error_action)
|
switch(error_action)
|
||||||
@@ -610,22 +621,26 @@ png_set_rgb_to_gray(png_structp png_ptr, int error_action, double red,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
png_byte red_byte = (png_byte)((float)red*255.0 + 0.5);
|
png_uint_16 red_int, green_int;
|
||||||
png_byte green_byte = (png_byte)((float)green*255.0 + 0.5);
|
if(red < 0 || green < 0)
|
||||||
if(red < 0.0 || green < 0.0)
|
|
||||||
{
|
{
|
||||||
red_byte = 54;
|
red_int = 6968; /* .212671 * 32768 + .5 */
|
||||||
green_byte = 183;
|
green_int = 23434; /* .715160 * 32768 + .5 */
|
||||||
}
|
}
|
||||||
else if(red_byte + green_byte > 255)
|
else if(red + green < 100000L)
|
||||||
|
{
|
||||||
|
red_int = (png_uint_16)(((png_uint_32)red*32768L)/100000L);
|
||||||
|
green_int = (png_uint_16)(((png_uint_32)green*32768L)/100000L);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
png_warning(png_ptr, "ignoring out of range rgb_to_gray coefficients");
|
png_warning(png_ptr, "ignoring out of range rgb_to_gray coefficients");
|
||||||
red_byte = 54;
|
red_int = 6968;
|
||||||
green_byte = 183;
|
green_int = 23434;
|
||||||
}
|
}
|
||||||
png_ptr->rgb_to_gray_red_coeff = red_byte;
|
png_ptr->rgb_to_gray_red_coeff = red_int;
|
||||||
png_ptr->rgb_to_gray_green_coeff = green_byte;
|
png_ptr->rgb_to_gray_green_coeff = green_int;
|
||||||
png_ptr->rgb_to_gray_blue_coeff = (png_byte)(255-red_byte-green_byte);
|
png_ptr->rgb_to_gray_blue_coeff = (png_uint_16)(32768-red_int-green_int);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -658,7 +673,8 @@ png_init_read_transformations(png_structp png_ptr)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PNG_READ_EXPAND_SUPPORTED) && defined(PNG_READ_BACKGROUND_SUPPORTED)
|
#if defined(PNG_READ_EXPAND_SUPPORTED) && defined(PNG_READ_BACKGROUND_SUPPORTED)
|
||||||
if (png_ptr->transformations & PNG_BACKGROUND_EXPAND)
|
if ((png_ptr->transformations & PNG_BACKGROUND_EXPAND) &&
|
||||||
|
(png_ptr->transformations & PNG_EXPAND))
|
||||||
{
|
{
|
||||||
if (!(color_type & PNG_COLOR_MASK_COLOR)) /* i.e., GRAY or GRAY_ALPHA */
|
if (!(color_type & PNG_COLOR_MASK_COLOR)) /* i.e., GRAY or GRAY_ALPHA */
|
||||||
{
|
{
|
||||||
@@ -897,8 +913,8 @@ png_init_read_transformations(png_structp png_ptr)
|
|||||||
#endif
|
#endif
|
||||||
#if defined(PNG_READ_BACKGROUND_SUPPORTED)
|
#if defined(PNG_READ_BACKGROUND_SUPPORTED)
|
||||||
/* No GAMMA transformation */
|
/* No GAMMA transformation */
|
||||||
if (png_ptr->transformations & PNG_BACKGROUND &&
|
if ((png_ptr->transformations & PNG_BACKGROUND) &&
|
||||||
color_type == PNG_COLOR_TYPE_PALETTE)
|
(color_type == PNG_COLOR_TYPE_PALETTE))
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int istop = (int)png_ptr->num_trans;
|
int istop = (int)png_ptr->num_trans;
|
||||||
@@ -931,7 +947,7 @@ png_init_read_transformations(png_structp png_ptr)
|
|||||||
|
|
||||||
#if defined(PNG_READ_SHIFT_SUPPORTED)
|
#if defined(PNG_READ_SHIFT_SUPPORTED)
|
||||||
if ((png_ptr->transformations & PNG_SHIFT) &&
|
if ((png_ptr->transformations & PNG_SHIFT) &&
|
||||||
color_type == PNG_COLOR_TYPE_PALETTE)
|
(color_type == PNG_COLOR_TYPE_PALETTE))
|
||||||
{
|
{
|
||||||
png_uint_16 i;
|
png_uint_16 i;
|
||||||
png_uint_16 istop = png_ptr->num_palette;
|
png_uint_16 istop = png_ptr->num_palette;
|
||||||
@@ -1009,7 +1025,7 @@ png_read_transform_info(png_structp png_ptr, png_infop info_ptr)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PNG_READ_16_TO_8_SUPPORTED)
|
#if defined(PNG_READ_16_TO_8_SUPPORTED)
|
||||||
if ((png_ptr->transformations & PNG_16_TO_8) && info_ptr->bit_depth == 16)
|
if ((png_ptr->transformations & PNG_16_TO_8) && (info_ptr->bit_depth == 16))
|
||||||
info_ptr->bit_depth = 8;
|
info_ptr->bit_depth = 8;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -1026,7 +1042,7 @@ png_read_transform_info(png_structp png_ptr, png_infop info_ptr)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PNG_READ_PACK_SUPPORTED)
|
#if defined(PNG_READ_PACK_SUPPORTED)
|
||||||
if ((png_ptr->transformations & PNG_PACK) && info_ptr->bit_depth < 8)
|
if ((png_ptr->transformations & PNG_PACK) && (info_ptr->bit_depth < 8))
|
||||||
info_ptr->bit_depth = 8;
|
info_ptr->bit_depth = 8;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -1057,9 +1073,9 @@ png_read_transform_info(png_structp png_ptr, png_infop info_ptr)
|
|||||||
|
|
||||||
#if defined(PNG_READ_FILLER_SUPPORTED)
|
#if defined(PNG_READ_FILLER_SUPPORTED)
|
||||||
/* STRIP_ALPHA and FILLER allowed: MASK_ALPHA bit stripped above */
|
/* STRIP_ALPHA and FILLER allowed: MASK_ALPHA bit stripped above */
|
||||||
if (png_ptr->transformations & PNG_FILLER &&
|
if ((png_ptr->transformations & PNG_FILLER) &&
|
||||||
(info_ptr->color_type == PNG_COLOR_TYPE_RGB ||
|
((info_ptr->color_type == PNG_COLOR_TYPE_RGB) ||
|
||||||
info_ptr->color_type == PNG_COLOR_TYPE_GRAY))
|
(info_ptr->color_type == PNG_COLOR_TYPE_GRAY)))
|
||||||
info_ptr->channels++;
|
info_ptr->channels++;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -1177,7 +1193,7 @@ From Andreas Dilger e-mail to png-implement, 26 March 1998:
|
|||||||
#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED)
|
#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED)
|
||||||
/* if gray -> RGB, do so now only if background is non-gray; else do later
|
/* if gray -> RGB, do so now only if background is non-gray; else do later
|
||||||
* for performance reasons */
|
* for performance reasons */
|
||||||
if (png_ptr->transformations & PNG_GRAY_TO_RGB &&
|
if ((png_ptr->transformations & PNG_GRAY_TO_RGB) &&
|
||||||
!(png_ptr->mode & PNG_BACKGROUND_IS_GRAY))
|
!(png_ptr->mode & PNG_BACKGROUND_IS_GRAY))
|
||||||
png_do_gray_to_rgb(&(png_ptr->row_info), png_ptr->row_buf + 1);
|
png_do_gray_to_rgb(&(png_ptr->row_info), png_ptr->row_buf + 1);
|
||||||
#endif
|
#endif
|
||||||
@@ -1251,8 +1267,8 @@ From Andreas Dilger e-mail to png-implement, 26 March 1998:
|
|||||||
|
|
||||||
#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED)
|
#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED)
|
||||||
/* if gray -> RGB, do so now only if we did not do so above */
|
/* if gray -> RGB, do so now only if we did not do so above */
|
||||||
if (png_ptr->transformations & PNG_GRAY_TO_RGB &&
|
if ((png_ptr->transformations & PNG_GRAY_TO_RGB) &&
|
||||||
png_ptr->mode & PNG_BACKGROUND_IS_GRAY)
|
(png_ptr->mode & PNG_BACKGROUND_IS_GRAY))
|
||||||
png_do_gray_to_rgb(&(png_ptr->row_info), png_ptr->row_buf + 1);
|
png_do_gray_to_rgb(&(png_ptr->row_info), png_ptr->row_buf + 1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -1330,10 +1346,10 @@ png_do_unpack(png_row_infop row_info, png_bytep row)
|
|||||||
{
|
{
|
||||||
png_bytep sp = row + (png_size_t)((row_width - 1) >> 3);
|
png_bytep sp = row + (png_size_t)((row_width - 1) >> 3);
|
||||||
png_bytep dp = row + (png_size_t)row_width - 1;
|
png_bytep dp = row + (png_size_t)row_width - 1;
|
||||||
png_uint_32 shift = 7 - (int)((row_width + 7) & 7);
|
png_uint_32 shift = 7 - (int)((row_width + 7) & 0x07);
|
||||||
for (i = 0; i < row_width; i++)
|
for (i = 0; i < row_width; i++)
|
||||||
{
|
{
|
||||||
*dp = (png_byte)((*sp >> shift) & 0x1);
|
*dp = (png_byte)((*sp >> shift) & 0x01);
|
||||||
if (shift == 7)
|
if (shift == 7)
|
||||||
{
|
{
|
||||||
shift = 0;
|
shift = 0;
|
||||||
@@ -1351,10 +1367,10 @@ png_do_unpack(png_row_infop row_info, png_bytep row)
|
|||||||
|
|
||||||
png_bytep sp = row + (png_size_t)((row_width - 1) >> 2);
|
png_bytep sp = row + (png_size_t)((row_width - 1) >> 2);
|
||||||
png_bytep dp = row + (png_size_t)row_width - 1;
|
png_bytep dp = row + (png_size_t)row_width - 1;
|
||||||
png_uint_32 shift = (int)((3 - ((row_width + 3) & 3)) << 1);
|
png_uint_32 shift = (int)((3 - ((row_width + 3) & 0x03)) << 1);
|
||||||
for (i = 0; i < row_width; i++)
|
for (i = 0; i < row_width; i++)
|
||||||
{
|
{
|
||||||
*dp = (png_byte)((*sp >> shift) & 0x3);
|
*dp = (png_byte)((*sp >> shift) & 0x03);
|
||||||
if (shift == 6)
|
if (shift == 6)
|
||||||
{
|
{
|
||||||
shift = 0;
|
shift = 0;
|
||||||
@@ -1371,10 +1387,10 @@ png_do_unpack(png_row_infop row_info, png_bytep row)
|
|||||||
{
|
{
|
||||||
png_bytep sp = row + (png_size_t)((row_width - 1) >> 1);
|
png_bytep sp = row + (png_size_t)((row_width - 1) >> 1);
|
||||||
png_bytep dp = row + (png_size_t)row_width - 1;
|
png_bytep dp = row + (png_size_t)row_width - 1;
|
||||||
png_uint_32 shift = (int)((1 - ((row_width + 1) & 1)) << 2);
|
png_uint_32 shift = (int)((1 - ((row_width + 1) & 0x01)) << 2);
|
||||||
for (i = 0; i < row_width; i++)
|
for (i = 0; i < row_width; i++)
|
||||||
{
|
{
|
||||||
*dp = (png_byte)((*sp >> shift) & 0xf);
|
*dp = (png_byte)((*sp >> shift) & 0x0f);
|
||||||
if (shift == 4)
|
if (shift == 4)
|
||||||
{
|
{
|
||||||
shift = 0;
|
shift = 0;
|
||||||
@@ -1674,9 +1690,15 @@ png_do_read_invert_alpha(png_row_infop row_info, png_bytep row)
|
|||||||
for (i = 0; i < row_width; i++)
|
for (i = 0; i < row_width; i++)
|
||||||
{
|
{
|
||||||
*(--dp) = (png_byte)(255 - *(--sp));
|
*(--dp) = (png_byte)(255 - *(--sp));
|
||||||
|
|
||||||
|
/* This does nothing:
|
||||||
*(--dp) = *(--sp);
|
*(--dp) = *(--sp);
|
||||||
*(--dp) = *(--sp);
|
*(--dp) = *(--sp);
|
||||||
*(--dp) = *(--sp);
|
*(--dp) = *(--sp);
|
||||||
|
We can replace it with:
|
||||||
|
*/
|
||||||
|
sp-=3;
|
||||||
|
dp=sp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* This inverts the alpha channel in RRGGBBAA */
|
/* This inverts the alpha channel in RRGGBBAA */
|
||||||
@@ -1690,12 +1712,18 @@ png_do_read_invert_alpha(png_row_infop row_info, png_bytep row)
|
|||||||
{
|
{
|
||||||
*(--dp) = (png_byte)(255 - *(--sp));
|
*(--dp) = (png_byte)(255 - *(--sp));
|
||||||
*(--dp) = (png_byte)(255 - *(--sp));
|
*(--dp) = (png_byte)(255 - *(--sp));
|
||||||
|
|
||||||
|
/* This does nothing:
|
||||||
*(--dp) = *(--sp);
|
*(--dp) = *(--sp);
|
||||||
*(--dp) = *(--sp);
|
*(--dp) = *(--sp);
|
||||||
*(--dp) = *(--sp);
|
*(--dp) = *(--sp);
|
||||||
*(--dp) = *(--sp);
|
*(--dp) = *(--sp);
|
||||||
*(--dp) = *(--sp);
|
*(--dp) = *(--sp);
|
||||||
*(--dp) = *(--sp);
|
*(--dp) = *(--sp);
|
||||||
|
We can replace it with:
|
||||||
|
*/
|
||||||
|
sp-=6;
|
||||||
|
dp=sp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1725,8 +1753,12 @@ png_do_read_invert_alpha(png_row_infop row_info, png_bytep row)
|
|||||||
{
|
{
|
||||||
*(--dp) = (png_byte)(255 - *(--sp));
|
*(--dp) = (png_byte)(255 - *(--sp));
|
||||||
*(--dp) = (png_byte)(255 - *(--sp));
|
*(--dp) = (png_byte)(255 - *(--sp));
|
||||||
|
/*
|
||||||
*(--dp) = *(--sp);
|
*(--dp) = *(--sp);
|
||||||
*(--dp) = *(--sp);
|
*(--dp) = *(--sp);
|
||||||
|
*/
|
||||||
|
sp-=2;
|
||||||
|
dp=sp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2004,11 +2036,11 @@ png_do_gray_to_rgb(png_row_infop row_info, png_bytep row)
|
|||||||
*
|
*
|
||||||
* We approximate this with
|
* We approximate this with
|
||||||
*
|
*
|
||||||
* Y = 0.211 * R + 0.715 * G + 0.074 * B
|
* Y = 0.21268 * R + 0.7151 * G + 0.07217 * B
|
||||||
*
|
*
|
||||||
* which can be expressed with integers as
|
* which can be expressed with integers as
|
||||||
*
|
*
|
||||||
* Y = (54 * R + 183 * G + 19 * B)/256
|
* Y = (6969 * R + 23434 * G + 2365 * B)/32768
|
||||||
*
|
*
|
||||||
* The calculation is to be done in a linear colorspace.
|
* The calculation is to be done in a linear colorspace.
|
||||||
*
|
*
|
||||||
@@ -2030,9 +2062,9 @@ png_do_rgb_to_gray(png_structp png_ptr, png_row_infop row_info, png_bytep row)
|
|||||||
#endif
|
#endif
|
||||||
(row_info->color_type & PNG_COLOR_MASK_COLOR))
|
(row_info->color_type & PNG_COLOR_MASK_COLOR))
|
||||||
{
|
{
|
||||||
png_byte rc = png_ptr->rgb_to_gray_red_coeff;
|
png_uint_32 rc = png_ptr->rgb_to_gray_red_coeff;
|
||||||
png_byte gc = png_ptr->rgb_to_gray_green_coeff;
|
png_uint_32 gc = png_ptr->rgb_to_gray_green_coeff;
|
||||||
png_byte bc = png_ptr->rgb_to_gray_blue_coeff;
|
png_uint_32 bc = png_ptr->rgb_to_gray_blue_coeff;
|
||||||
|
|
||||||
if (row_info->color_type == PNG_COLOR_TYPE_RGB)
|
if (row_info->color_type == PNG_COLOR_TYPE_RGB)
|
||||||
{
|
{
|
||||||
@@ -2053,7 +2085,7 @@ png_do_rgb_to_gray(png_structp png_ptr, png_row_infop row_info, png_bytep row)
|
|||||||
{
|
{
|
||||||
rgb_error |= 1;
|
rgb_error |= 1;
|
||||||
*(dp++) = png_ptr->gamma_from_1[
|
*(dp++) = png_ptr->gamma_from_1[
|
||||||
(rc*red+gc*green+bc*blue)>>8];
|
(rc*red+gc*green+bc*blue)>>15];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
*(dp++) = *(sp-1);
|
*(dp++) = *(sp-1);
|
||||||
@@ -2072,7 +2104,7 @@ png_do_rgb_to_gray(png_structp png_ptr, png_row_infop row_info, png_bytep row)
|
|||||||
if(red != green || red != blue)
|
if(red != green || red != blue)
|
||||||
{
|
{
|
||||||
rgb_error |= 1;
|
rgb_error |= 1;
|
||||||
*(dp++) = (png_byte)((rc*red+gc*green+bc*blue)>>8);
|
*(dp++) = (png_byte)((rc*red+gc*green+bc*blue)>>15);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
*(dp++) = *(sp-1);
|
*(dp++) = *(sp-1);
|
||||||
@@ -2107,7 +2139,7 @@ png_do_rgb_to_gray(png_structp png_ptr, png_row_infop row_info, png_bytep row)
|
|||||||
png_uint_16 blue_1 = png_ptr->gamma_16_to_1[(blue&0xff) >>
|
png_uint_16 blue_1 = png_ptr->gamma_16_to_1[(blue&0xff) >>
|
||||||
png_ptr->gamma_shift][blue>>8];
|
png_ptr->gamma_shift][blue>>8];
|
||||||
png_uint_16 gray16 = (png_uint_16)((rc*red_1 + gc*green_1
|
png_uint_16 gray16 = (png_uint_16)((rc*red_1 + gc*green_1
|
||||||
+ bc*blue_1)>>8);
|
+ bc*blue_1)>>15);
|
||||||
w = png_ptr->gamma_16_from_1[(gray16&0xff) >>
|
w = png_ptr->gamma_16_from_1[(gray16&0xff) >>
|
||||||
png_ptr->gamma_shift][gray16 >> 8];
|
png_ptr->gamma_shift][gray16 >> 8];
|
||||||
rgb_error |= 1;
|
rgb_error |= 1;
|
||||||
@@ -2132,7 +2164,7 @@ png_do_rgb_to_gray(png_structp png_ptr, png_row_infop row_info, png_bytep row)
|
|||||||
|
|
||||||
if(red != green || red != blue)
|
if(red != green || red != blue)
|
||||||
rgb_error |= 1;
|
rgb_error |= 1;
|
||||||
gray16 = (png_uint_16)((rc*red + gc*green + bc*blue)>>8);
|
gray16 = (png_uint_16)((rc*red + gc*green + bc*blue)>>15);
|
||||||
*(dp++) = (png_byte)((gray16>>8) & 0xff);
|
*(dp++) = (png_byte)((gray16>>8) & 0xff);
|
||||||
*(dp++) = (png_byte)(gray16 & 0xff);
|
*(dp++) = (png_byte)(gray16 & 0xff);
|
||||||
}
|
}
|
||||||
@@ -2156,7 +2188,7 @@ png_do_rgb_to_gray(png_structp png_ptr, png_row_infop row_info, png_bytep row)
|
|||||||
if(red != green || red != blue)
|
if(red != green || red != blue)
|
||||||
rgb_error |= 1;
|
rgb_error |= 1;
|
||||||
*(dp++) = png_ptr->gamma_from_1
|
*(dp++) = png_ptr->gamma_from_1
|
||||||
[(rc*red + gc*green + bc*blue)>>8];
|
[(rc*red + gc*green + bc*blue)>>15];
|
||||||
*(dp++) = *(sp++); /* alpha */
|
*(dp++) = *(sp++); /* alpha */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2204,7 +2236,7 @@ png_do_rgb_to_gray(png_structp png_ptr, png_row_infop row_info, png_bytep row)
|
|||||||
png_uint_16 blue_1 = png_ptr->gamma_16_to_1[(blue&0xff) >>
|
png_uint_16 blue_1 = png_ptr->gamma_16_to_1[(blue&0xff) >>
|
||||||
png_ptr->gamma_shift][blue>>8];
|
png_ptr->gamma_shift][blue>>8];
|
||||||
png_uint_16 gray16 = (png_uint_16)((rc * red_1
|
png_uint_16 gray16 = (png_uint_16)((rc * red_1
|
||||||
+ gc * green_1 + bc * blue_1)>>8);
|
+ gc * green_1 + bc * blue_1)>>15);
|
||||||
w = png_ptr->gamma_16_from_1[(gray16&0xff) >>
|
w = png_ptr->gamma_16_from_1[(gray16&0xff) >>
|
||||||
png_ptr->gamma_shift][gray16 >> 8];
|
png_ptr->gamma_shift][gray16 >> 8];
|
||||||
rgb_error |= 1;
|
rgb_error |= 1;
|
||||||
@@ -2229,7 +2261,7 @@ png_do_rgb_to_gray(png_structp png_ptr, png_row_infop row_info, png_bytep row)
|
|||||||
blue = (png_uint_16)((*(sp)<<8) | *(sp+1)); sp+=2;
|
blue = (png_uint_16)((*(sp)<<8) | *(sp+1)); sp+=2;
|
||||||
if(red != green || red != blue)
|
if(red != green || red != blue)
|
||||||
rgb_error |= 1;
|
rgb_error |= 1;
|
||||||
gray16 = (png_uint_16)((rc*red + gc*green + bc*blue)>>8);
|
gray16 = (png_uint_16)((rc*red + gc*green + bc*blue)>>15);
|
||||||
*(dp++) = (png_byte)((gray16>>8) & 0xff);
|
*(dp++) = (png_byte)((gray16>>8) & 0xff);
|
||||||
*(dp++) = (png_byte)(gray16 & 0xff);
|
*(dp++) = (png_byte)(gray16 & 0xff);
|
||||||
*(dp++) = *(sp++); /* alpha */
|
*(dp++) = *(sp++); /* alpha */
|
||||||
@@ -2518,7 +2550,7 @@ png_do_background(png_row_infop row_info, png_bytep row,
|
|||||||
shift = 7;
|
shift = 7;
|
||||||
for (i = 0; i < row_width; i++)
|
for (i = 0; i < row_width; i++)
|
||||||
{
|
{
|
||||||
if ((png_uint_16)((*sp >> shift) & 0x1)
|
if ((png_uint_16)((*sp >> shift) & 0x01)
|
||||||
== trans_values->gray)
|
== trans_values->gray)
|
||||||
{
|
{
|
||||||
*sp &= (png_byte)((0x7f7f >> (7 - shift)) & 0xff);
|
*sp &= (png_byte)((0x7f7f >> (7 - shift)) & 0xff);
|
||||||
@@ -2543,7 +2575,7 @@ png_do_background(png_row_infop row_info, png_bytep row,
|
|||||||
shift = 6;
|
shift = 6;
|
||||||
for (i = 0; i < row_width; i++)
|
for (i = 0; i < row_width; i++)
|
||||||
{
|
{
|
||||||
if ((png_uint_16)((*sp >> shift) & 0x3)
|
if ((png_uint_16)((*sp >> shift) & 0x03)
|
||||||
== trans_values->gray)
|
== trans_values->gray)
|
||||||
{
|
{
|
||||||
*sp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff);
|
*sp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff);
|
||||||
@@ -2551,9 +2583,9 @@ png_do_background(png_row_infop row_info, png_bytep row,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
png_byte p = (png_byte)((*sp >> shift) & 0x3);
|
png_byte p = (png_byte)((*sp >> shift) & 0x03);
|
||||||
png_byte g = (png_byte)((gamma_table [p | (p << 2) |
|
png_byte g = (png_byte)((gamma_table [p | (p << 2) |
|
||||||
(p << 4) | (p << 6)] >> 6) & 0x3);
|
(p << 4) | (p << 6)] >> 6) & 0x03);
|
||||||
*sp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff);
|
*sp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff);
|
||||||
*sp |= (png_byte)(g << shift);
|
*sp |= (png_byte)(g << shift);
|
||||||
}
|
}
|
||||||
@@ -2573,7 +2605,7 @@ png_do_background(png_row_infop row_info, png_bytep row,
|
|||||||
shift = 6;
|
shift = 6;
|
||||||
for (i = 0; i < row_width; i++)
|
for (i = 0; i < row_width; i++)
|
||||||
{
|
{
|
||||||
if ((png_uint_16)((*sp >> shift) & 0x3)
|
if ((png_uint_16)((*sp >> shift) & 0x03)
|
||||||
== trans_values->gray)
|
== trans_values->gray)
|
||||||
{
|
{
|
||||||
*sp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff);
|
*sp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff);
|
||||||
@@ -2599,7 +2631,7 @@ png_do_background(png_row_infop row_info, png_bytep row,
|
|||||||
shift = 4;
|
shift = 4;
|
||||||
for (i = 0; i < row_width; i++)
|
for (i = 0; i < row_width; i++)
|
||||||
{
|
{
|
||||||
if ((png_uint_16)((*sp >> shift) & 0xf)
|
if ((png_uint_16)((*sp >> shift) & 0x0f)
|
||||||
== trans_values->gray)
|
== trans_values->gray)
|
||||||
{
|
{
|
||||||
*sp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff);
|
*sp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff);
|
||||||
@@ -2607,9 +2639,9 @@ png_do_background(png_row_infop row_info, png_bytep row,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
png_byte p = (png_byte)((*sp >> shift) & 0xf);
|
png_byte p = (png_byte)((*sp >> shift) & 0x0f);
|
||||||
png_byte g = (png_byte)((gamma_table[p |
|
png_byte g = (png_byte)((gamma_table[p |
|
||||||
(p << 4)] >> 4) & 0xf);
|
(p << 4)] >> 4) & 0x0f);
|
||||||
*sp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff);
|
*sp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff);
|
||||||
*sp |= (png_byte)(g << shift);
|
*sp |= (png_byte)(g << shift);
|
||||||
}
|
}
|
||||||
@@ -2629,7 +2661,7 @@ png_do_background(png_row_infop row_info, png_bytep row,
|
|||||||
shift = 4;
|
shift = 4;
|
||||||
for (i = 0; i < row_width; i++)
|
for (i = 0; i < row_width; i++)
|
||||||
{
|
{
|
||||||
if ((png_uint_16)((*sp >> shift) & 0xf)
|
if ((png_uint_16)((*sp >> shift) & 0x0f)
|
||||||
== trans_values->gray)
|
== trans_values->gray)
|
||||||
{
|
{
|
||||||
*sp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff);
|
*sp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff);
|
||||||
@@ -3362,10 +3394,10 @@ png_do_expand_palette(png_row_infop row_info, png_bytep row,
|
|||||||
{
|
{
|
||||||
sp = row + (png_size_t)((row_width - 1) >> 3);
|
sp = row + (png_size_t)((row_width - 1) >> 3);
|
||||||
dp = row + (png_size_t)row_width - 1;
|
dp = row + (png_size_t)row_width - 1;
|
||||||
shift = 7 - (int)((row_width + 7) & 7);
|
shift = 7 - (int)((row_width + 7) & 0x07);
|
||||||
for (i = 0; i < row_width; i++)
|
for (i = 0; i < row_width; i++)
|
||||||
{
|
{
|
||||||
if ((*sp >> shift) & 0x1)
|
if ((*sp >> shift) & 0x01)
|
||||||
*dp = 1;
|
*dp = 1;
|
||||||
else
|
else
|
||||||
*dp = 0;
|
*dp = 0;
|
||||||
@@ -3385,10 +3417,10 @@ png_do_expand_palette(png_row_infop row_info, png_bytep row,
|
|||||||
{
|
{
|
||||||
sp = row + (png_size_t)((row_width - 1) >> 2);
|
sp = row + (png_size_t)((row_width - 1) >> 2);
|
||||||
dp = row + (png_size_t)row_width - 1;
|
dp = row + (png_size_t)row_width - 1;
|
||||||
shift = (int)((3 - ((row_width + 3) & 3)) << 1);
|
shift = (int)((3 - ((row_width + 3) & 0x03)) << 1);
|
||||||
for (i = 0; i < row_width; i++)
|
for (i = 0; i < row_width; i++)
|
||||||
{
|
{
|
||||||
value = (*sp >> shift) & 0x3;
|
value = (*sp >> shift) & 0x03;
|
||||||
*dp = (png_byte)value;
|
*dp = (png_byte)value;
|
||||||
if (shift == 6)
|
if (shift == 6)
|
||||||
{
|
{
|
||||||
@@ -3406,10 +3438,10 @@ png_do_expand_palette(png_row_infop row_info, png_bytep row,
|
|||||||
{
|
{
|
||||||
sp = row + (png_size_t)((row_width - 1) >> 1);
|
sp = row + (png_size_t)((row_width - 1) >> 1);
|
||||||
dp = row + (png_size_t)row_width - 1;
|
dp = row + (png_size_t)row_width - 1;
|
||||||
shift = (int)((row_width & 1) << 2);
|
shift = (int)((row_width & 0x01) << 2);
|
||||||
for (i = 0; i < row_width; i++)
|
for (i = 0; i < row_width; i++)
|
||||||
{
|
{
|
||||||
value = (*sp >> shift) & 0xf;
|
value = (*sp >> shift) & 0x0f;
|
||||||
*dp = (png_byte)value;
|
*dp = (png_byte)value;
|
||||||
if (shift == 4)
|
if (shift == 4)
|
||||||
{
|
{
|
||||||
@@ -3508,10 +3540,10 @@ png_do_expand(png_row_infop row_info, png_bytep row,
|
|||||||
gray = (png_uint_16)(gray*0xff);
|
gray = (png_uint_16)(gray*0xff);
|
||||||
sp = row + (png_size_t)((row_width - 1) >> 3);
|
sp = row + (png_size_t)((row_width - 1) >> 3);
|
||||||
dp = row + (png_size_t)row_width - 1;
|
dp = row + (png_size_t)row_width - 1;
|
||||||
shift = 7 - (int)((row_width + 7) & 7);
|
shift = 7 - (int)((row_width + 7) & 0x07);
|
||||||
for (i = 0; i < row_width; i++)
|
for (i = 0; i < row_width; i++)
|
||||||
{
|
{
|
||||||
if ((*sp >> shift) & 0x1)
|
if ((*sp >> shift) & 0x01)
|
||||||
*dp = 0xff;
|
*dp = 0xff;
|
||||||
else
|
else
|
||||||
*dp = 0;
|
*dp = 0;
|
||||||
@@ -3532,10 +3564,10 @@ png_do_expand(png_row_infop row_info, png_bytep row,
|
|||||||
gray = (png_uint_16)(gray*0x55);
|
gray = (png_uint_16)(gray*0x55);
|
||||||
sp = row + (png_size_t)((row_width - 1) >> 2);
|
sp = row + (png_size_t)((row_width - 1) >> 2);
|
||||||
dp = row + (png_size_t)row_width - 1;
|
dp = row + (png_size_t)row_width - 1;
|
||||||
shift = (int)((3 - ((row_width + 3) & 3)) << 1);
|
shift = (int)((3 - ((row_width + 3) & 0x03)) << 1);
|
||||||
for (i = 0; i < row_width; i++)
|
for (i = 0; i < row_width; i++)
|
||||||
{
|
{
|
||||||
value = (*sp >> shift) & 0x3;
|
value = (*sp >> shift) & 0x03;
|
||||||
*dp = (png_byte)(value | (value << 2) | (value << 4) |
|
*dp = (png_byte)(value | (value << 2) | (value << 4) |
|
||||||
(value << 6));
|
(value << 6));
|
||||||
if (shift == 6)
|
if (shift == 6)
|
||||||
@@ -3555,10 +3587,10 @@ png_do_expand(png_row_infop row_info, png_bytep row,
|
|||||||
gray = (png_uint_16)(gray*0x11);
|
gray = (png_uint_16)(gray*0x11);
|
||||||
sp = row + (png_size_t)((row_width - 1) >> 1);
|
sp = row + (png_size_t)((row_width - 1) >> 1);
|
||||||
dp = row + (png_size_t)row_width - 1;
|
dp = row + (png_size_t)row_width - 1;
|
||||||
shift = (int)((1 - ((row_width + 1) & 1)) << 2);
|
shift = (int)((1 - ((row_width + 1) & 0x01)) << 2);
|
||||||
for (i = 0; i < row_width; i++)
|
for (i = 0; i < row_width; i++)
|
||||||
{
|
{
|
||||||
value = (*sp >> shift) & 0xf;
|
value = (*sp >> shift) & 0x0f;
|
||||||
*dp = (png_byte)(value | (value << 4));
|
*dp = (png_byte)(value | (value << 4));
|
||||||
if (shift == 4)
|
if (shift == 4)
|
||||||
{
|
{
|
||||||
@@ -3809,7 +3841,7 @@ png_build_gamma_table(png_structp png_ptr)
|
|||||||
|
|
||||||
#if defined(PNG_READ_BACKGROUND_SUPPORTED) || \
|
#if defined(PNG_READ_BACKGROUND_SUPPORTED) || \
|
||||||
defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
|
defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
|
||||||
if (png_ptr->transformations & (PNG_BACKGROUND | PNG_RGB_TO_GRAY))
|
if (png_ptr->transformations & ((PNG_BACKGROUND) | PNG_RGB_TO_GRAY))
|
||||||
{
|
{
|
||||||
|
|
||||||
g = 1.0 / (png_ptr->gamma);
|
g = 1.0 / (png_ptr->gamma);
|
||||||
|
|||||||
436
pngrutil.c
436
pngrutil.c
File diff suppressed because it is too large
Load Diff
296
pngset.c
296
pngset.c
@@ -1,11 +1,11 @@
|
|||||||
|
|
||||||
/* pngset.c - storage of image information into info struct
|
/* pngset.c - storage of image information into info struct
|
||||||
*
|
*
|
||||||
* libpng 1.0.5h - December 10, 1999
|
* libpng 1.0.6f - April 14, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, 1999 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
*
|
*
|
||||||
* The functions here are used during reads to store data from the file
|
* The functions here are used during reads to store data from the file
|
||||||
* into the info struct, and during writes to store application data
|
* into the info struct, and during writes to store application data
|
||||||
@@ -48,15 +48,25 @@ png_set_cHRM(png_structp png_ptr, png_infop info_ptr,
|
|||||||
info_ptr->y_green = (float)green_y;
|
info_ptr->y_green = (float)green_y;
|
||||||
info_ptr->x_blue = (float)blue_x;
|
info_ptr->x_blue = (float)blue_x;
|
||||||
info_ptr->y_blue = (float)blue_y;
|
info_ptr->y_blue = (float)blue_y;
|
||||||
|
#ifdef PNG_FIXED_POINT_SUPPORTED
|
||||||
|
info_ptr->int_x_white = (png_fixed_point)(white_x*100000.+0.5);
|
||||||
|
info_ptr->int_y_white = (png_fixed_point)(white_y*100000.+0.5);
|
||||||
|
info_ptr->int_x_red = (png_fixed_point)(red_x*100000.+0.5);
|
||||||
|
info_ptr->int_y_red = (png_fixed_point)(red_y*100000.+0.5);
|
||||||
|
info_ptr->int_x_green = (png_fixed_point)(green_x*100000.+0.5);
|
||||||
|
info_ptr->int_y_green = (png_fixed_point)(green_y*100000.+0.5);
|
||||||
|
info_ptr->int_x_blue = (png_fixed_point)(blue_x*100000.+0.5);
|
||||||
|
info_ptr->int_y_blue = (png_fixed_point)(blue_y*100000.+0.5);
|
||||||
|
#endif
|
||||||
info_ptr->valid |= PNG_INFO_cHRM;
|
info_ptr->valid |= PNG_INFO_cHRM;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef PNG_FIXED_POINT_SUPPORTED
|
#ifdef PNG_FIXED_POINT_SUPPORTED
|
||||||
void
|
void
|
||||||
png_set_cHRM_fixed(png_structp png_ptr, png_infop info_ptr,
|
png_set_cHRM_fixed(png_structp png_ptr, png_infop info_ptr,
|
||||||
png_uint_32 white_x, png_uint_32 white_y, png_uint_32 red_x,
|
png_fixed_point white_x, png_fixed_point white_y, png_fixed_point red_x,
|
||||||
png_uint_32 red_y, png_uint_32 green_x, png_uint_32 green_y,
|
png_fixed_point red_y, png_fixed_point green_x, png_fixed_point green_y,
|
||||||
png_uint_32 blue_x, png_uint_32 blue_y)
|
png_fixed_point blue_x, png_fixed_point blue_y)
|
||||||
{
|
{
|
||||||
png_debug1(1, "in %s storage function\n", "cHRM");
|
png_debug1(1, "in %s storage function\n", "cHRM");
|
||||||
if (png_ptr == NULL || info_ptr == NULL)
|
if (png_ptr == NULL || info_ptr == NULL)
|
||||||
@@ -70,6 +80,16 @@ png_set_cHRM_fixed(png_structp png_ptr, png_infop info_ptr,
|
|||||||
info_ptr->int_y_green = green_y;
|
info_ptr->int_y_green = green_y;
|
||||||
info_ptr->int_x_blue = blue_x;
|
info_ptr->int_x_blue = blue_x;
|
||||||
info_ptr->int_y_blue = blue_y;
|
info_ptr->int_y_blue = blue_y;
|
||||||
|
#ifdef PNG_FLOATING_POINT_SUPPORTED
|
||||||
|
info_ptr->x_white = (float)(white_x/100000.);
|
||||||
|
info_ptr->y_white = (float)(white_y/100000.);
|
||||||
|
info_ptr->x_red = (float)(red_x/100000.);
|
||||||
|
info_ptr->y_red = (float)(red_y/100000.);
|
||||||
|
info_ptr->x_green = (float)(green_x/100000.);
|
||||||
|
info_ptr->y_green = (float)(green_y/100000.);
|
||||||
|
info_ptr->x_blue = (float)(blue_x/100000.);
|
||||||
|
info_ptr->y_blue = (float)(blue_y/100000.);
|
||||||
|
#endif
|
||||||
info_ptr->valid |= PNG_INFO_cHRM;
|
info_ptr->valid |= PNG_INFO_cHRM;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -92,21 +112,20 @@ png_set_gAMA(png_structp png_ptr, png_infop info_ptr, double file_gamma)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#ifdef PNG_FIXED_POINT_SUPPORTED
|
|
||||||
void
|
void
|
||||||
png_set_gAMA_fixed(png_structp png_ptr, png_infop info_ptr, png_uint_32 int_gamma)
|
png_set_gAMA_fixed(png_structp png_ptr, png_infop info_ptr, png_fixed_point
|
||||||
|
int_gamma)
|
||||||
{
|
{
|
||||||
png_debug1(1, "in %s storage function\n", "gAMA");
|
png_debug1(1, "in %s storage function\n", "gAMA");
|
||||||
if (png_ptr == NULL || info_ptr == NULL)
|
if (png_ptr == NULL || info_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
#ifdef PNG_FLOATING_POINT_SUPPORTED
|
#ifdef PNG_FLOATING_POINT_SUPPORTED
|
||||||
info_ptr->gamma = (float)int_gamma/100000.;
|
info_ptr->gamma = (float)(int_gamma/100000.);
|
||||||
#endif
|
#endif
|
||||||
info_ptr->int_gamma = int_gamma;
|
info_ptr->int_gamma = int_gamma;
|
||||||
info_ptr->valid |= PNG_INFO_gAMA;
|
info_ptr->valid |= PNG_INFO_gAMA;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(PNG_hIST_SUPPORTED)
|
#if defined(PNG_hIST_SUPPORTED)
|
||||||
void
|
void
|
||||||
@@ -226,27 +245,23 @@ png_set_pCAL(png_structp png_ptr, png_infop info_ptr,
|
|||||||
#ifdef PNG_FLOATING_POINT_SUPPORTED
|
#ifdef PNG_FLOATING_POINT_SUPPORTED
|
||||||
void
|
void
|
||||||
png_set_sCAL(png_structp png_ptr, png_infop info_ptr,
|
png_set_sCAL(png_structp png_ptr, png_infop info_ptr,
|
||||||
png_charp unit, double width, double height)
|
int unit, double width, double height)
|
||||||
{
|
{
|
||||||
png_uint_32 length;
|
|
||||||
|
|
||||||
png_debug1(1, "in %s storage function\n", "sCAL");
|
png_debug1(1, "in %s storage function\n", "sCAL");
|
||||||
if (png_ptr == NULL || info_ptr == NULL)
|
if (png_ptr == NULL || info_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
length = png_strlen(unit) + 1;
|
info_ptr->scal_unit = (png_byte)unit;
|
||||||
png_debug1(3, "allocating unit for info (%d bytes)\n", length);
|
|
||||||
info_ptr->scal_unit = (png_charp)png_malloc(png_ptr, length);
|
|
||||||
png_memcpy(info_ptr->scal_unit, unit, (png_size_t)length);
|
|
||||||
info_ptr->scal_pixel_width = width;
|
info_ptr->scal_pixel_width = width;
|
||||||
info_ptr->scal_pixel_height = height;
|
info_ptr->scal_pixel_height = height;
|
||||||
|
|
||||||
info_ptr->valid |= PNG_INFO_sCAL;
|
info_ptr->valid |= PNG_INFO_sCAL;
|
||||||
}
|
}
|
||||||
#endif
|
#else
|
||||||
|
#ifdef PNG_FIXED_POINT_SUPPORTED
|
||||||
void
|
void
|
||||||
png_set_sCAL_s(png_structp png_ptr, png_infop info_ptr,
|
png_set_sCAL_s(png_structp png_ptr, png_infop info_ptr,
|
||||||
png_charp unit, png_charp swidth, png_charp sheight)
|
int unit, png_charp swidth, png_charp sheight)
|
||||||
{
|
{
|
||||||
png_uint_32 length;
|
png_uint_32 length;
|
||||||
|
|
||||||
@@ -254,10 +269,7 @@ png_set_sCAL_s(png_structp png_ptr, png_infop info_ptr,
|
|||||||
if (png_ptr == NULL || info_ptr == NULL)
|
if (png_ptr == NULL || info_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
length = png_strlen(unit) + 1;
|
info_ptr->scal_unit = (png_byte)unit;
|
||||||
png_debug1(3, "allocating unit for info (%d bytes)\n", length);
|
|
||||||
info_ptr->scal_unit = (png_charp)png_malloc(png_ptr, length);
|
|
||||||
png_memcpy(info_ptr->scal_unit, unit, (png_size_t)length);
|
|
||||||
|
|
||||||
length = png_strlen(swidth) + 1;
|
length = png_strlen(swidth) + 1;
|
||||||
png_debug1(3, "allocating unit for info (%d bytes)\n", length);
|
png_debug1(3, "allocating unit for info (%d bytes)\n", length);
|
||||||
@@ -272,6 +284,8 @@ png_set_sCAL_s(png_structp png_ptr, png_infop info_ptr,
|
|||||||
info_ptr->valid |= PNG_INFO_sCAL;
|
info_ptr->valid |= PNG_INFO_sCAL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(PNG_pHYs_SUPPORTED)
|
#if defined(PNG_pHYs_SUPPORTED)
|
||||||
void
|
void
|
||||||
@@ -293,11 +307,13 @@ void
|
|||||||
png_set_PLTE(png_structp png_ptr, png_infop info_ptr,
|
png_set_PLTE(png_structp png_ptr, png_infop info_ptr,
|
||||||
png_colorp palette, int num_palette)
|
png_colorp palette, int num_palette)
|
||||||
{
|
{
|
||||||
|
|
||||||
png_debug1(1, "in %s storage function\n", "PLTE");
|
png_debug1(1, "in %s storage function\n", "PLTE");
|
||||||
if (png_ptr == NULL || info_ptr == NULL)
|
if (png_ptr == NULL || info_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
info_ptr->palette = palette;
|
info_ptr->palette = palette;
|
||||||
|
|
||||||
info_ptr->num_palette = (png_uint_16)num_palette;
|
info_ptr->num_palette = (png_uint_16)num_palette;
|
||||||
info_ptr->valid |= PNG_INFO_PLTE;
|
info_ptr->valid |= PNG_INFO_PLTE;
|
||||||
}
|
}
|
||||||
@@ -337,7 +353,7 @@ png_set_sRGB_gAMA_and_cHRM(png_structp png_ptr, png_infop info_ptr,
|
|||||||
float file_gamma;
|
float file_gamma;
|
||||||
#endif
|
#endif
|
||||||
#ifdef PNG_FIXED_POINT_SUPPORTED
|
#ifdef PNG_FIXED_POINT_SUPPORTED
|
||||||
png_uint_32 int_file_gamma;
|
png_fixed_point int_file_gamma;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#if defined(PNG_cHRM_SUPPORTED)
|
#if defined(PNG_cHRM_SUPPORTED)
|
||||||
@@ -345,7 +361,7 @@ png_set_sRGB_gAMA_and_cHRM(png_structp png_ptr, png_infop info_ptr,
|
|||||||
float white_x, white_y, red_x, red_y, green_x, green_y, blue_x, blue_y;
|
float white_x, white_y, red_x, red_y, green_x, green_y, blue_x, blue_y;
|
||||||
#endif
|
#endif
|
||||||
#ifdef PNG_FIXED_POINT_SUPPORTED
|
#ifdef PNG_FIXED_POINT_SUPPORTED
|
||||||
png_uint_32 int_white_x, int_white_y, int_red_x, int_red_y, int_green_x,
|
png_fixed_point int_white_x, int_white_y, int_red_x, int_red_y, int_green_x,
|
||||||
int_green_y, int_blue_x, int_blue_y;
|
int_green_y, int_blue_x, int_blue_y;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
@@ -403,20 +419,29 @@ png_set_sRGB_gAMA_and_cHRM(png_structp png_ptr, png_infop info_ptr,
|
|||||||
void
|
void
|
||||||
png_set_iCCP(png_structp png_ptr, png_infop info_ptr,
|
png_set_iCCP(png_structp png_ptr, png_infop info_ptr,
|
||||||
png_charp name, int compression_type,
|
png_charp name, int compression_type,
|
||||||
png_charp profile, int proflen)
|
png_charp profile, png_uint_32 proflen)
|
||||||
{
|
{
|
||||||
|
png_charp new_iccp_name;
|
||||||
|
png_charp new_iccp_profile;
|
||||||
|
|
||||||
png_debug1(1, "in %s storage function\n", "iCCP");
|
png_debug1(1, "in %s storage function\n", "iCCP");
|
||||||
if (png_ptr == NULL || info_ptr == NULL || name == NULL || profile == NULL)
|
if (png_ptr == NULL || info_ptr == NULL || name == NULL || profile == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
info_ptr->iccp_name = png_malloc(png_ptr, png_strlen(name)+1);
|
new_iccp_name = png_malloc(png_ptr, png_strlen(name)+1);
|
||||||
strcpy(info_ptr->iccp_name, name);
|
strcpy(new_iccp_name, name);
|
||||||
info_ptr->iccp_profile = png_malloc(png_ptr, proflen);
|
new_iccp_profile = png_malloc(png_ptr, proflen);
|
||||||
memcpy(info_ptr->iccp_profile, profile, proflen);
|
png_memcpy(new_iccp_profile, profile, (png_size_t)proflen);
|
||||||
info_ptr->iccp_proflen = (png_uint_32)proflen;
|
|
||||||
|
png_free_data(png_ptr, info_ptr, PNG_FREE_ICCP, 0);
|
||||||
|
|
||||||
|
info_ptr->iccp_proflen = proflen;
|
||||||
|
info_ptr->iccp_name = new_iccp_name;
|
||||||
|
info_ptr->iccp_profile = new_iccp_profile;
|
||||||
/* Compression is always zero but is here so the API and info structure
|
/* Compression is always zero but is here so the API and info structure
|
||||||
* does not have to change * if we introduce multiple compression types */
|
* does not have to change if we introduce multiple compression types */
|
||||||
info_ptr->iccp_compression = (png_byte)compression_type;
|
info_ptr->iccp_compression = (png_byte)compression_type;
|
||||||
|
info_ptr->free_me |= PNG_FREE_ICCP;
|
||||||
info_ptr->valid |= PNG_INFO_iCCP;
|
info_ptr->valid |= PNG_INFO_iCCP;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -466,56 +491,90 @@ png_set_text(png_structp png_ptr, png_infop info_ptr, png_textp text_ptr,
|
|||||||
|
|
||||||
for (i = 0; i < num_text; i++)
|
for (i = 0; i < num_text; i++)
|
||||||
{
|
{
|
||||||
|
png_size_t text_length,key_len,lang_len,lang_key_len;
|
||||||
png_textp textp = &(info_ptr->text[info_ptr->num_text]);
|
png_textp textp = &(info_ptr->text[info_ptr->num_text]);
|
||||||
png_charp key,text;
|
|
||||||
|
|
||||||
if (text_ptr[i].key == (png_charp)NULL)
|
if (text_ptr[i].key == (png_charp)NULL)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
#ifdef PNG_iTXt_SUPPORTED
|
key_len = png_strlen(text_ptr[i].key);
|
||||||
textp->lang = text_ptr[i].lang;
|
|
||||||
textp->translated_key = text_ptr[i].translated_key;
|
|
||||||
#else
|
|
||||||
textp->lang = NULL;
|
|
||||||
textp->translated_key = NULL;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (text_ptr[i].text[0] == '\0')
|
if(text_ptr[i].compression > 0)
|
||||||
{
|
{
|
||||||
textp->text_length = 0;
|
/* set iTXt data */
|
||||||
textp->compression = PNG_TEXT_COMPRESSION_NONE;
|
if (text_ptr[i].key != (png_charp)NULL)
|
||||||
|
lang_len = png_strlen(text_ptr[i].lang);
|
||||||
|
else
|
||||||
|
lang_len = 0;
|
||||||
|
if (text_ptr[i].lang_key != (png_charp)NULL)
|
||||||
|
lang_key_len = png_strlen(text_ptr[i].lang_key);
|
||||||
|
else
|
||||||
|
lang_key_len = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
textp->text_length = png_strlen(text_ptr[i].text);
|
lang_len = 0;
|
||||||
|
lang_key_len = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (text_ptr[i].text == (png_charp)NULL || text_ptr[i].text[0] == '\0')
|
||||||
|
{
|
||||||
|
text_length = 0;
|
||||||
|
if(text_ptr[i].compression > 0)
|
||||||
|
textp->compression = PNG_ITXT_COMPRESSION_NONE;
|
||||||
|
else
|
||||||
|
textp->compression = PNG_TEXT_COMPRESSION_NONE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
text_length = png_strlen(text_ptr[i].text);
|
||||||
textp->compression = text_ptr[i].compression;
|
textp->compression = text_ptr[i].compression;
|
||||||
}
|
}
|
||||||
key=text_ptr[i].key;
|
|
||||||
for (text = key; *text++;)
|
|
||||||
/* empty loop to find the byte after the zero byte after the
|
|
||||||
end of key */ ;
|
|
||||||
|
|
||||||
textp->key = (png_charp)png_malloc(png_ptr,
|
textp->key = (png_charp)png_malloc(png_ptr,
|
||||||
(png_uint_32)(text+textp->text_length - key)+1);
|
(png_uint_32)(key_len + lang_len + lang_key_len + text_length + 4));
|
||||||
/* Caution: the calling program, not libpng, is responsible for
|
|
||||||
freeing this, if libpng wasn't the caller. */
|
|
||||||
png_debug2(2, "Allocated %d bytes at %x in png_set_text\n",
|
png_debug2(2, "Allocated %d bytes at %x in png_set_text\n",
|
||||||
text+textp->text_length-key+1, textp->key);
|
key_len + lang_len + lang_key_len + text_length + 4, textp->key);
|
||||||
|
|
||||||
png_memcpy(textp->key, text_ptr[i].key,
|
png_memcpy(textp->key, text_ptr[i].key,
|
||||||
(png_size_t)(text - key)); /* includes the zero-byte separator */
|
(png_size_t)(key_len));
|
||||||
|
*(textp->key+key_len) = '\0';
|
||||||
textp->text = textp->key + (text-key);
|
if (text_ptr[i].compression > 0)
|
||||||
if(textp->text_length)
|
|
||||||
{
|
{
|
||||||
png_memcpy(textp->text, text_ptr[i].text,
|
textp->lang=textp->key + key_len + 1;
|
||||||
(png_size_t)(textp->text_length));
|
png_memcpy(textp->lang, text_ptr[i].lang, lang_len);
|
||||||
*(textp->text+textp->text_length) = '\0';
|
*(textp->lang+lang_len) = '\0';
|
||||||
|
textp->lang_key=textp->lang + lang_len + 1;
|
||||||
|
png_memcpy(textp->lang_key, text_ptr[i].lang_key, lang_key_len);
|
||||||
|
*(textp->lang_key+lang_key_len) = '\0';
|
||||||
|
textp->text=textp->lang_key + lang_key_len + 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
textp->text--;
|
{
|
||||||
|
textp->lang=(png_charp)NULL;
|
||||||
|
textp->lang_key=(png_charp)NULL;
|
||||||
|
textp->text=textp->key + key_len + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(text_length)
|
||||||
|
png_memcpy(textp->text, text_ptr[i].text,
|
||||||
|
(png_size_t)(text_length));
|
||||||
|
*(textp->text+text_length) = '\0';
|
||||||
|
|
||||||
|
if(textp->compression > 0)
|
||||||
|
{
|
||||||
|
textp->text_length = 0;
|
||||||
|
textp->itxt_length = text_length;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
textp->text_length = text_length;
|
||||||
|
textp->itxt_length = 0;
|
||||||
|
}
|
||||||
|
|
||||||
info_ptr->text[info_ptr->num_text]= *textp;
|
info_ptr->text[info_ptr->num_text]= *textp;
|
||||||
info_ptr->num_text++;
|
info_ptr->num_text++;
|
||||||
|
info_ptr->free_me |= PNG_FREE_TEXT;
|
||||||
png_debug1(3, "transferred text chunk %d\n", info_ptr->num_text);
|
png_debug1(3, "transferred text chunk %d\n", info_ptr->num_text);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -545,9 +604,7 @@ png_set_tRNS(png_structp png_ptr, png_infop info_ptr,
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if (trans != NULL)
|
if (trans != NULL)
|
||||||
{
|
|
||||||
info_ptr->trans = trans;
|
info_ptr->trans = trans;
|
||||||
}
|
|
||||||
|
|
||||||
if (trans_values != NULL)
|
if (trans_values != NULL)
|
||||||
{
|
{
|
||||||
@@ -563,73 +620,83 @@ png_set_tRNS(png_structp png_ptr, png_infop info_ptr,
|
|||||||
|
|
||||||
#if defined(PNG_sPLT_SUPPORTED)
|
#if defined(PNG_sPLT_SUPPORTED)
|
||||||
void
|
void
|
||||||
png_set_spalettes(png_structp png_ptr,
|
png_set_sPLT(png_structp png_ptr,
|
||||||
png_infop info_ptr, png_spalette_p entries, int nentries)
|
png_infop info_ptr, png_sPLT_tp entries, int nentries)
|
||||||
{
|
{
|
||||||
png_spalette_p np;
|
png_sPLT_tp np;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
np = (png_spalette_p)png_malloc(png_ptr,
|
np = (png_sPLT_tp)png_malloc(png_ptr,
|
||||||
(info_ptr->splt_palettes_num + nentries) * sizeof(png_spalette));
|
(info_ptr->splt_palettes_num + nentries) * sizeof(png_sPLT_t));
|
||||||
|
|
||||||
memcpy(np, info_ptr->splt_palettes,
|
png_memcpy(np, info_ptr->splt_palettes,
|
||||||
info_ptr->splt_palettes_num * sizeof(png_spalette));
|
info_ptr->splt_palettes_num * sizeof(png_sPLT_t));
|
||||||
png_free(png_ptr, info_ptr->splt_palettes);
|
png_free(png_ptr, info_ptr->splt_palettes);
|
||||||
|
|
||||||
for (i = 0; i < nentries; i++)
|
for (i = 0; i < nentries; i++)
|
||||||
{
|
{
|
||||||
png_spalette_p to = np + info_ptr->splt_palettes_num + i;
|
png_sPLT_tp to = np + info_ptr->splt_palettes_num + i;
|
||||||
png_spalette_p from = entries + i;
|
png_sPLT_tp from = entries + i;
|
||||||
|
|
||||||
to->name = (png_charp)png_malloc(png_ptr,
|
to->name = (png_charp)png_malloc(png_ptr,
|
||||||
png_strlen(from->name) + 1);
|
png_strlen(from->name) + 1);
|
||||||
png_strcpy(to->name, from->name);
|
png_strcpy(to->name, from->name);
|
||||||
to->entries = (png_spalette_entryp)png_malloc(png_ptr,
|
to->entries = (png_sPLT_entryp)png_malloc(png_ptr,
|
||||||
from->nentries * sizeof(png_spalette));
|
from->nentries * sizeof(png_sPLT_t));
|
||||||
memcpy(to->entries, from->entries,
|
png_memcpy(to->entries, from->entries,
|
||||||
from->nentries * sizeof(png_spalette));
|
from->nentries * sizeof(png_sPLT_t));
|
||||||
|
to->nentries = from->nentries;
|
||||||
|
to->depth = from->depth;
|
||||||
}
|
}
|
||||||
|
|
||||||
info_ptr->splt_palettes = np;
|
info_ptr->splt_palettes = np;
|
||||||
info_ptr->splt_palettes_num += nentries;
|
info_ptr->splt_palettes_num += nentries;
|
||||||
|
info_ptr->valid |= PNG_INFO_sPLT;
|
||||||
|
info_ptr->free_me |= PNG_FREE_SPLT;
|
||||||
}
|
}
|
||||||
#endif /* PNG_sPLT_SUPPORTED */
|
#endif /* PNG_sPLT_SUPPORTED */
|
||||||
|
|
||||||
#if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED)
|
#if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED)
|
||||||
void
|
void
|
||||||
png_set_unknown_chunks(png_structp png_ptr,
|
png_set_unknown_chunks(png_structp png_ptr,
|
||||||
png_infop info_ptr, png_unknown_chunkp unknowns, int nunknowns)
|
png_infop info_ptr, png_unknown_chunkp unknowns, int num_unknowns)
|
||||||
{
|
{
|
||||||
png_unknown_chunkp np;
|
png_unknown_chunkp np;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
np = (png_unknown_chunkp)png_malloc(png_ptr,
|
if (png_ptr == NULL || info_ptr == NULL || num_unknowns == 0)
|
||||||
(info_ptr->unknown_chunks_num + nunknowns) * sizeof(png_unknown_chunk));
|
return;
|
||||||
|
|
||||||
memcpy(np, info_ptr->unknown_chunks,
|
np = (png_unknown_chunkp)png_malloc(png_ptr,
|
||||||
|
(info_ptr->unknown_chunks_num + num_unknowns) *
|
||||||
|
sizeof(png_unknown_chunk));
|
||||||
|
|
||||||
|
png_memcpy(np, info_ptr->unknown_chunks,
|
||||||
info_ptr->unknown_chunks_num * sizeof(png_unknown_chunk));
|
info_ptr->unknown_chunks_num * sizeof(png_unknown_chunk));
|
||||||
png_free(png_ptr, info_ptr->unknown_chunks);
|
png_free(png_ptr, info_ptr->unknown_chunks);
|
||||||
|
|
||||||
for (i = 0; i < nunknowns; i++)
|
for (i = 0; i < num_unknowns; i++)
|
||||||
{
|
{
|
||||||
png_unknown_chunkp to = np + info_ptr->unknown_chunks_num + i;
|
png_unknown_chunkp to = np + info_ptr->unknown_chunks_num + i;
|
||||||
png_unknown_chunkp from = unknowns + i;
|
png_unknown_chunkp from = unknowns + i;
|
||||||
|
|
||||||
png_strcpy(to->name, from->name);
|
png_strcpy((png_charp)to->name, (png_charp)from->name);
|
||||||
to->data = (png_bytep)png_malloc(png_ptr, from->size);
|
to->data = (png_bytep)png_malloc(png_ptr, from->size);
|
||||||
memcpy(to->data, from->data, from->size);
|
png_memcpy(to->data, from->data, from->size);
|
||||||
to->size = from->size;
|
to->size = from->size;
|
||||||
|
|
||||||
/* note our location in the read or write sequence */
|
/* note our location in the read or write sequence */
|
||||||
to->location = png_ptr->mode;
|
to->location = (png_byte)(png_ptr->mode & 0xff);
|
||||||
}
|
}
|
||||||
|
|
||||||
info_ptr->unknown_chunks = np;
|
info_ptr->unknown_chunks = np;
|
||||||
info_ptr->unknown_chunks_num += nunknowns;
|
info_ptr->unknown_chunks_num += num_unknowns;
|
||||||
|
info_ptr->free_me |= PNG_FREE_UNKN;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PNG_READ_EMPTY_PLTE_SUPPORTED)
|
#if defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \
|
||||||
|
defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED)
|
||||||
void
|
void
|
||||||
png_permit_empty_plte (png_structp png_ptr, int empty_plte_permitted)
|
png_permit_empty_plte (png_structp png_ptr, int empty_plte_permitted)
|
||||||
{
|
{
|
||||||
@@ -640,9 +707,68 @@ png_permit_empty_plte (png_structp png_ptr, int empty_plte_permitted)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
|
||||||
|
void
|
||||||
|
png_set_keep_unknown_chunks(png_structp png_ptr, int keep, png_bytep
|
||||||
|
chunk_list, int num_chunks)
|
||||||
|
{
|
||||||
|
png_bytep new_list, p;
|
||||||
|
int i, old_num_chunks;
|
||||||
|
if (num_chunks == 0)
|
||||||
|
{
|
||||||
|
if(keep == HANDLE_CHUNK_ALWAYS || keep == HANDLE_CHUNK_IF_SAFE)
|
||||||
|
png_ptr->flags |= PNG_FLAG_KEEP_UNKNOWN_CHUNKS;
|
||||||
|
else
|
||||||
|
png_ptr->flags &= ~PNG_FLAG_KEEP_UNKNOWN_CHUNKS;
|
||||||
|
|
||||||
|
if(keep == HANDLE_CHUNK_ALWAYS)
|
||||||
|
png_ptr->flags |= PNG_FLAG_KEEP_UNSAFE_CHUNKS;
|
||||||
|
else
|
||||||
|
png_ptr->flags &= ~PNG_FLAG_KEEP_UNSAFE_CHUNKS;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (chunk_list == NULL)
|
||||||
|
return;
|
||||||
|
old_num_chunks=png_ptr->num_chunk_list;
|
||||||
|
new_list=png_malloc(png_ptr,5*(num_chunks+old_num_chunks));
|
||||||
|
if(png_ptr->chunk_list != (png_bytep)NULL)
|
||||||
|
{
|
||||||
|
png_memcpy(new_list, png_ptr->chunk_list, 5*old_num_chunks);
|
||||||
|
png_free(png_ptr, png_ptr->chunk_list);
|
||||||
|
}
|
||||||
|
png_memcpy(new_list+5*old_num_chunks, chunk_list, 5*num_chunks);
|
||||||
|
for (p=new_list+5*old_num_chunks+4, i=0; i<num_chunks; i++, p+=5)
|
||||||
|
*p=(png_byte)keep;
|
||||||
|
png_ptr->num_chunk_list=old_num_chunks+num_chunks;
|
||||||
|
png_ptr->chunk_list=new_list;
|
||||||
|
png_ptr->free_me |= PNG_FREE_LIST;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_USER_CHUNKS_SUPPORTED)
|
||||||
|
void
|
||||||
|
png_set_read_user_chunk_fn(png_structp png_ptr, png_voidp user_chunk_ptr,
|
||||||
|
png_user_chunk_ptr read_user_chunk_fn)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_set_read_user_chunk_fn\n");
|
||||||
|
png_ptr->read_user_chunk_fn = read_user_chunk_fn;
|
||||||
|
png_ptr->user_chunk_ptr = user_chunk_ptr;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_INFO_IMAGE_SUPPORTED)
|
||||||
|
void
|
||||||
|
png_set_rows(png_structp png_ptr, png_infop info_ptr, png_bytepp row_pointers)
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s storage function\n", "rows");
|
||||||
|
if (png_ptr == NULL || info_ptr == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(info_ptr->row_pointers != row_pointers)
|
||||||
|
{
|
||||||
|
png_free_data(png_ptr, info_ptr, PNG_FREE_ROWS, 0);
|
||||||
|
info_ptr->row_pointers = row_pointers;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|||||||
166
pngtest.c
166
pngtest.c
@@ -1,11 +1,11 @@
|
|||||||
|
|
||||||
/* pngtest.c - a simple test program to test libpng
|
/* pngtest.c - a simple test program to test libpng
|
||||||
*
|
*
|
||||||
* libpng 1.0.5h - December 10, 1999
|
* libpng 1.0.6f - April 14, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, 1999 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
*
|
*
|
||||||
* This program reads in a PNG image, writes it out again, and then
|
* This program reads in a PNG image, writes it out again, and then
|
||||||
* compares the two files. If the files are identical, this shows that
|
* compares the two files. If the files are identical, this shows that
|
||||||
@@ -15,11 +15,11 @@
|
|||||||
*
|
*
|
||||||
* The program will report "FAIL" in certain legitimate cases:
|
* The program will report "FAIL" in certain legitimate cases:
|
||||||
* 1) when the compression level or filter selection method is changed.
|
* 1) when the compression level or filter selection method is changed.
|
||||||
* 2) when the chunk size is not 8K.
|
* 2) when the maximum IDAT size (PNG_ZBUF_SIZE in pngconf.h) is not 8192.
|
||||||
* 3) unknown ancillary chunks exist in the input file.
|
* 3) unknown ancillary chunks exist in the input file.
|
||||||
* 4) others not listed here...
|
* 4) others not listed here...
|
||||||
* In these cases, it is best to check with another tool such as "pngcheck"
|
* In these cases, it is best to check with another tool such as "pngcheck"
|
||||||
* to see what the differences between the two images are.
|
* to see what the differences between the two files are.
|
||||||
*
|
*
|
||||||
* If a filename is given on the command-line, then this file is used
|
* If a filename is given on the command-line, then this file is used
|
||||||
* for the input, rather than the default "pngtest.png". This allows
|
* for the input, rather than the default "pngtest.png". This allows
|
||||||
@@ -29,6 +29,7 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
/* Makes pngtest verbose so we can find problems (needs to be before png.h) */
|
/* Makes pngtest verbose so we can find problems (needs to be before png.h) */
|
||||||
#ifndef PNG_DEBUG
|
#ifndef PNG_DEBUG
|
||||||
@@ -50,6 +51,11 @@ static float t_start, t_stop, t_decode, t_encode, t_misc;
|
|||||||
|
|
||||||
#include "png.h"
|
#include "png.h"
|
||||||
|
|
||||||
|
/* Define png_jmpbuf() in case we are using a pre-1.0.6 version of libpng */
|
||||||
|
#ifndef png_jmpbuf
|
||||||
|
# define png_jmpbuf(png_ptr) png_ptr->jmpbuf
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef PNGTEST_TIMING
|
#ifdef PNGTEST_TIMING
|
||||||
static float t_start, t_stop, t_decode, t_encode, t_misc;
|
static float t_start, t_stop, t_decode, t_encode, t_misc;
|
||||||
#if !defined(PNG_tIME_SUPPORTED)
|
#if !defined(PNG_tIME_SUPPORTED)
|
||||||
@@ -151,7 +157,7 @@ count_zero_samples(png_structp png_ptr, png_row_infop row_info, png_bytep data)
|
|||||||
{
|
{
|
||||||
if(row_info->bit_depth == 1)
|
if(row_info->bit_depth == 1)
|
||||||
{
|
{
|
||||||
if(((*dp << pos++ )& 0x80) == 0) zero_samples++;
|
if(((*dp << pos++ ) & 0x80) == 0) zero_samples++;
|
||||||
if(pos == 8)
|
if(pos == 8)
|
||||||
{
|
{
|
||||||
pos = 0;
|
pos = 0;
|
||||||
@@ -160,7 +166,7 @@ count_zero_samples(png_structp png_ptr, png_row_infop row_info, png_bytep data)
|
|||||||
}
|
}
|
||||||
if(row_info->bit_depth == 2)
|
if(row_info->bit_depth == 2)
|
||||||
{
|
{
|
||||||
if(((*dp << (pos+=2))& 0xc0) == 0) zero_samples++;
|
if(((*dp << (pos+=2)) & 0xc0) == 0) zero_samples++;
|
||||||
if(pos == 8)
|
if(pos == 8)
|
||||||
{
|
{
|
||||||
pos = 0;
|
pos = 0;
|
||||||
@@ -169,7 +175,7 @@ count_zero_samples(png_structp png_ptr, png_row_infop row_info, png_bytep data)
|
|||||||
}
|
}
|
||||||
if(row_info->bit_depth == 4)
|
if(row_info->bit_depth == 4)
|
||||||
{
|
{
|
||||||
if(((*dp << (pos+=4))& 0xf0) == 0) zero_samples++;
|
if(((*dp << (pos+=4)) & 0xf0) == 0) zero_samples++;
|
||||||
if(pos == 8)
|
if(pos == 8)
|
||||||
{
|
{
|
||||||
pos = 0;
|
pos = 0;
|
||||||
@@ -409,7 +415,8 @@ png_default_error(png_structp png_ptr, png_const_charp message)
|
|||||||
|
|
||||||
This piece of code can be compiled to validate max 64K allocations
|
This piece of code can be compiled to validate max 64K allocations
|
||||||
by setting MAXSEG_64K in zlib zconf.h *or* PNG_MAX_MALLOC_64K. */
|
by setting MAXSEG_64K in zlib zconf.h *or* PNG_MAX_MALLOC_64K. */
|
||||||
typedef struct memory_information {
|
typedef struct memory_information
|
||||||
|
{
|
||||||
png_uint_32 size;
|
png_uint_32 size;
|
||||||
png_voidp pointer;
|
png_voidp pointer;
|
||||||
struct memory_information FAR *next;
|
struct memory_information FAR *next;
|
||||||
@@ -426,7 +433,8 @@ extern PNG_EXPORT(void,png_debug_free) PNGARG((png_structp png_ptr,
|
|||||||
png_voidp ptr));
|
png_voidp ptr));
|
||||||
|
|
||||||
png_voidp
|
png_voidp
|
||||||
png_debug_malloc(png_structp png_ptr, png_uint_32 size) {
|
png_debug_malloc(png_structp png_ptr, png_uint_32 size)
|
||||||
|
{
|
||||||
|
|
||||||
/* png_malloc has already tested for NULL; png_create_struct calls
|
/* png_malloc has already tested for NULL; png_create_struct calls
|
||||||
png_debug_malloc directly, with png_ptr == NULL which is OK */
|
png_debug_malloc directly, with png_ptr == NULL which is OK */
|
||||||
@@ -451,6 +459,7 @@ png_debug_malloc(png_structp png_ptr, png_uint_32 size) {
|
|||||||
if(verbose)
|
if(verbose)
|
||||||
printf("png_malloc %d bytes at %x\n",size,pinfo->pointer);
|
printf("png_malloc %d bytes at %x\n",size,pinfo->pointer);
|
||||||
#endif
|
#endif
|
||||||
|
assert(pinfo->size != 12345);
|
||||||
return (png_voidp)(pinfo->pointer);
|
return (png_voidp)(pinfo->pointer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -461,7 +470,8 @@ png_debug_free(png_structp png_ptr, png_voidp ptr)
|
|||||||
{
|
{
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
fprintf(STDERR, "NULL pointer to png_debug_free.\n");
|
fprintf(STDERR, "NULL pointer to png_debug_free.\n");
|
||||||
if (ptr == 0) {
|
if (ptr == 0)
|
||||||
|
{
|
||||||
#if 0 /* This happens all the time. */
|
#if 0 /* This happens all the time. */
|
||||||
fprintf(STDERR, "WARNING: freeing NULL pointer\n");
|
fprintf(STDERR, "WARNING: freeing NULL pointer\n");
|
||||||
#endif
|
#endif
|
||||||
@@ -471,9 +481,11 @@ png_debug_free(png_structp png_ptr, png_voidp ptr)
|
|||||||
/* Unlink the element from the list. */
|
/* Unlink the element from the list. */
|
||||||
{
|
{
|
||||||
memory_infop FAR *ppinfo = &pinformation;
|
memory_infop FAR *ppinfo = &pinformation;
|
||||||
for (;;) {
|
for (;;)
|
||||||
|
{
|
||||||
memory_infop pinfo = *ppinfo;
|
memory_infop pinfo = *ppinfo;
|
||||||
if (pinfo->pointer == ptr) {
|
if (pinfo->pointer == ptr)
|
||||||
|
{
|
||||||
*ppinfo = pinfo->next;
|
*ppinfo = pinfo->next;
|
||||||
current_allocation -= pinfo->size;
|
current_allocation -= pinfo->size;
|
||||||
if (current_allocation < 0)
|
if (current_allocation < 0)
|
||||||
@@ -484,7 +496,8 @@ png_debug_free(png_structp png_ptr, png_voidp ptr)
|
|||||||
png_free_default(png_ptr, pinfo);
|
png_free_default(png_ptr, pinfo);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (pinfo->next == NULL) {
|
if (pinfo->next == NULL)
|
||||||
|
{
|
||||||
fprintf(STDERR, "Pointer %x not found\n", ptr);
|
fprintf(STDERR, "Pointer %x not found\n", ptr);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -514,8 +527,10 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
png_uint_32 width, height;
|
png_uint_32 width, height;
|
||||||
int num_pass, pass;
|
int num_pass, pass;
|
||||||
int bit_depth, color_type;
|
int bit_depth, color_type;
|
||||||
|
#ifdef PNG_SETJMP_SUPPORTED
|
||||||
#ifdef USE_FAR_KEYWORD
|
#ifdef USE_FAR_KEYWORD
|
||||||
jmp_buf jmpbuf;
|
jmp_buf jmpbuf;
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
char inbuf[256], outbuf[256];
|
char inbuf[256], outbuf[256];
|
||||||
@@ -568,11 +583,12 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
#ifdef PNG_USER_MEM_SUPPORTED
|
#ifdef PNG_USER_MEM_SUPPORTED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef PNG_SETJMP_SUPPORTED
|
||||||
png_debug(0, "Setting jmpbuf for read struct\n");
|
png_debug(0, "Setting jmpbuf for read struct\n");
|
||||||
#ifdef USE_FAR_KEYWORD
|
#ifdef USE_FAR_KEYWORD
|
||||||
if (setjmp(jmpbuf))
|
if (setjmp(jmpbuf))
|
||||||
#else
|
#else
|
||||||
if (setjmp(read_ptr->jmpbuf))
|
if (setjmp(png_jmpbuf(read_ptr)))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
fprintf(STDERR, "%s -> %s: libpng read error\n", inname, outname);
|
fprintf(STDERR, "%s -> %s: libpng read error\n", inname, outname);
|
||||||
@@ -584,14 +600,14 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
#ifdef USE_FAR_KEYWORD
|
#ifdef USE_FAR_KEYWORD
|
||||||
png_memcpy(read_ptr->jmpbuf,jmpbuf,sizeof(jmp_buf));
|
png_memcpy(png_jmpbuf(read_ptr),jmpbuf,sizeof(jmp_buf));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
png_debug(0, "Setting jmpbuf for write struct\n");
|
png_debug(0, "Setting jmpbuf for write struct\n");
|
||||||
#ifdef USE_FAR_KEYWORD
|
#ifdef USE_FAR_KEYWORD
|
||||||
if (setjmp(jmpbuf))
|
if (setjmp(jmpbuf))
|
||||||
#else
|
#else
|
||||||
if (setjmp(write_ptr->jmpbuf))
|
if (setjmp(png_jmpbuf(write_ptr)))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
fprintf(STDERR, "%s -> %s: libpng write error\n", inname, outname);
|
fprintf(STDERR, "%s -> %s: libpng write error\n", inname, outname);
|
||||||
@@ -603,7 +619,8 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
#ifdef USE_FAR_KEYWORD
|
#ifdef USE_FAR_KEYWORD
|
||||||
png_memcpy(write_ptr->jmpbuf,jmpbuf,sizeof(jmp_buf));
|
png_memcpy(png_jmpbuf(write_ptr),jmpbuf,sizeof(jmp_buf));
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
png_debug(0, "Initializing input and output streams\n");
|
png_debug(0, "Initializing input and output streams\n");
|
||||||
@@ -643,6 +660,15 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
png_set_write_user_transform_fn(write_ptr, count_zero_samples);
|
png_set_write_user_transform_fn(write_ptr, count_zero_samples);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define HANDLE_CHUNK_IF_SAFE 2
|
||||||
|
#define HANDLE_CHUNK_ALWAYS 3
|
||||||
|
#if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
|
||||||
|
png_set_keep_unknown_chunks(read_ptr, HANDLE_CHUNK_ALWAYS, NULL, 0);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED)
|
||||||
|
png_set_keep_unknown_chunks(write_ptr, HANDLE_CHUNK_IF_SAFE, NULL, 0);
|
||||||
|
#endif
|
||||||
|
|
||||||
png_debug(0, "Reading info struct\n");
|
png_debug(0, "Reading info struct\n");
|
||||||
png_read_info(read_ptr, read_info_ptr);
|
png_read_info(read_ptr, read_info_ptr);
|
||||||
|
|
||||||
@@ -663,7 +689,7 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
}
|
}
|
||||||
#if defined(PNG_cHRM_SUPPORTED)
|
#if defined(PNG_cHRM_SUPPORTED)
|
||||||
{
|
{
|
||||||
png_uint_32 white_x, white_y, red_x, red_y, green_x, green_y, blue_x,
|
png_fixed_point white_x, white_y, red_x, red_y, green_x, green_y, blue_x,
|
||||||
blue_y;
|
blue_y;
|
||||||
|
|
||||||
if (png_get_cHRM_fixed(read_ptr, read_info_ptr, &white_x, &white_y, &red_x,
|
if (png_get_cHRM_fixed(read_ptr, read_info_ptr, &white_x, &white_y, &red_x,
|
||||||
@@ -676,7 +702,7 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
#endif
|
#endif
|
||||||
#if defined(PNG_gAMA_SUPPORTED)
|
#if defined(PNG_gAMA_SUPPORTED)
|
||||||
{
|
{
|
||||||
png_uint_32 gamma;
|
png_fixed_point gamma;
|
||||||
|
|
||||||
if (png_get_gAMA_fixed(read_ptr, read_info_ptr, &gamma))
|
if (png_get_gAMA_fixed(read_ptr, read_info_ptr, &gamma))
|
||||||
{
|
{
|
||||||
@@ -688,7 +714,7 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
{
|
{
|
||||||
png_charp name;
|
png_charp name;
|
||||||
png_charp profile;
|
png_charp profile;
|
||||||
png_int_32 proflen;
|
png_uint_32 proflen;
|
||||||
int compression_type;
|
int compression_type;
|
||||||
|
|
||||||
if (png_get_iCCP(read_ptr, read_info_ptr, &name, &compression_type,
|
if (png_get_iCCP(read_ptr, read_info_ptr, &name, &compression_type,
|
||||||
@@ -740,7 +766,7 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
#endif
|
#endif
|
||||||
#if defined(PNG_oFFs_SUPPORTED)
|
#if defined(PNG_oFFs_SUPPORTED)
|
||||||
{
|
{
|
||||||
long offset_x, offset_y;
|
png_int_32 offset_x, offset_y;
|
||||||
int unit_type;
|
int unit_type;
|
||||||
|
|
||||||
if (png_get_oFFs(read_ptr, read_info_ptr,&offset_x,&offset_y,&unit_type))
|
if (png_get_oFFs(read_ptr, read_info_ptr,&offset_x,&offset_y,&unit_type))
|
||||||
@@ -788,7 +814,7 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
#if defined(PNG_sCAL_SUPPORTED)
|
#if defined(PNG_sCAL_SUPPORTED)
|
||||||
#ifdef PNG_FLOATING_POINT_SUPPORTED
|
#ifdef PNG_FLOATING_POINT_SUPPORTED
|
||||||
{
|
{
|
||||||
png_charp unit;
|
int unit;
|
||||||
double width, height;
|
double width, height;
|
||||||
|
|
||||||
if (png_get_sCAL(read_ptr, read_info_ptr, &unit, &width, &height))
|
if (png_get_sCAL(read_ptr, read_info_ptr, &unit, &width, &height))
|
||||||
@@ -797,9 +823,10 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
#endif
|
#ifdef PNG_FIXED_POINT_SUPPORTED
|
||||||
{
|
{
|
||||||
png_charp unit, width, height;
|
int unit;
|
||||||
|
png_charp width, height;
|
||||||
|
|
||||||
if (png_get_sCAL_s(read_ptr, read_info_ptr, &unit, &width, &height))
|
if (png_get_sCAL_s(read_ptr, read_info_ptr, &unit, &width, &height))
|
||||||
{
|
{
|
||||||
@@ -807,6 +834,8 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
#if defined(PNG_TEXT_SUPPORTED)
|
#if defined(PNG_TEXT_SUPPORTED)
|
||||||
{
|
{
|
||||||
png_textp text_ptr;
|
png_textp text_ptr;
|
||||||
@@ -850,6 +879,24 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED)
|
||||||
|
{
|
||||||
|
png_unknown_chunkp unknowns;
|
||||||
|
int num_unknowns = (int)png_get_unknown_chunks(read_ptr, read_info_ptr,
|
||||||
|
&unknowns);
|
||||||
|
if (num_unknowns)
|
||||||
|
{
|
||||||
|
png_size_t i;
|
||||||
|
png_set_unknown_chunks(write_ptr, write_info_ptr, unknowns,
|
||||||
|
num_unknowns);
|
||||||
|
/* copy the locations from the read_info_ptr. The automatically
|
||||||
|
generated locations in write_info_ptr are wrong because we
|
||||||
|
haven't written anything yet */
|
||||||
|
for (i = 0; i < (png_size_t)num_unknowns; i++)
|
||||||
|
write_info_ptr->unknown_chunks[i].location = unknowns[i].location;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
png_debug(0, "\nWriting info struct\n");
|
png_debug(0, "\nWriting info struct\n");
|
||||||
|
|
||||||
@@ -906,7 +953,15 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
|
||||||
|
png_free_data(read_ptr, read_info_ptr, PNG_FREE_UNKN, -1);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED)
|
||||||
|
png_free_data(write_ptr, write_info_ptr, PNG_FREE_UNKN, -1);
|
||||||
|
#endif
|
||||||
|
|
||||||
png_debug(0, "Reading and writing end_info data\n");
|
png_debug(0, "Reading and writing end_info data\n");
|
||||||
|
|
||||||
png_read_end(read_ptr, end_info_ptr);
|
png_read_end(read_ptr, end_info_ptr);
|
||||||
#if defined(PNG_TEXT_SUPPORTED)
|
#if defined(PNG_TEXT_SUPPORTED)
|
||||||
{
|
{
|
||||||
@@ -936,6 +991,26 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
#endif /* PNG_TIME_RFC1123_SUPPORTED */
|
#endif /* PNG_TIME_RFC1123_SUPPORTED */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED)
|
||||||
|
{
|
||||||
|
png_unknown_chunkp unknowns;
|
||||||
|
int num_unknowns;
|
||||||
|
num_unknowns = (int)png_get_unknown_chunks(read_ptr, end_info_ptr,
|
||||||
|
&unknowns);
|
||||||
|
if (num_unknowns)
|
||||||
|
{
|
||||||
|
png_size_t i;
|
||||||
|
png_set_unknown_chunks(write_ptr, write_end_info_ptr, unknowns,
|
||||||
|
num_unknowns);
|
||||||
|
/* copy the locations from the read_info_ptr. The automatically
|
||||||
|
generated locations in write_end_info_ptr are wrong because we
|
||||||
|
haven't written the end_info yet */
|
||||||
|
for (i = 0; i < (png_size_t)num_unknowns; i++)
|
||||||
|
write_end_info_ptr->unknown_chunks[i].location =
|
||||||
|
unknowns[i].location;
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
png_write_end(write_ptr, write_end_info_ptr);
|
png_write_end(write_ptr, write_end_info_ptr);
|
||||||
|
|
||||||
@@ -982,16 +1057,17 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
|
|
||||||
if (num_in != num_out)
|
if (num_in != num_out)
|
||||||
{
|
{
|
||||||
fprintf(STDERR, "Files %s and %s are of a different size\n",
|
fprintf(STDERR, "\nFiles %s and %s are of a different size\n",
|
||||||
inname, outname);
|
inname, outname);
|
||||||
if(wrote_question == 0)
|
if(wrote_question == 0)
|
||||||
{
|
{
|
||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
" Was %s written with the same chunk size (8k),",inname);
|
" Was %s written with the same maximum IDAT chunk size (%d bytes),",
|
||||||
|
inname,PNG_ZBUF_SIZE);
|
||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
" filtering\n heuristic (libpng default), compression");
|
"\n filtering heuristic (libpng default), compression");
|
||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
" level (zlib default)\n and zlib version (%s)?\n\n",
|
" level (zlib default),\n and zlib version (%s)?\n\n",
|
||||||
ZLIB_VERSION);
|
ZLIB_VERSION);
|
||||||
wrote_question=1;
|
wrote_question=1;
|
||||||
}
|
}
|
||||||
@@ -1009,11 +1085,12 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
if(wrote_question == 0)
|
if(wrote_question == 0)
|
||||||
{
|
{
|
||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
" Was %s written with the same chunk size (8k),",inname);
|
" Was %s written with the same maximum IDAT chunk size (%d bytes),",
|
||||||
|
inname,PNG_ZBUF_SIZE);
|
||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
" filtering\n heuristic (libpng default), compression");
|
"\n filtering heuristic (libpng default), compression");
|
||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
" level (zlib default)\n and zlib version (%s)?\n\n",
|
" level (zlib default),\n and zlib version (%s)?\n\n",
|
||||||
ZLIB_VERSION);
|
ZLIB_VERSION);
|
||||||
wrote_question=1;
|
wrote_question=1;
|
||||||
}
|
}
|
||||||
@@ -1154,15 +1231,17 @@ main(int argc, char *argv[])
|
|||||||
if (allocation_now != current_allocation)
|
if (allocation_now != current_allocation)
|
||||||
fprintf(STDERR, "MEMORY ERROR: %d bytes lost\n",
|
fprintf(STDERR, "MEMORY ERROR: %d bytes lost\n",
|
||||||
current_allocation-allocation_now);
|
current_allocation-allocation_now);
|
||||||
if (current_allocation != 0) {
|
if (current_allocation != 0)
|
||||||
|
{
|
||||||
memory_infop pinfo = pinformation;
|
memory_infop pinfo = pinformation;
|
||||||
|
|
||||||
fprintf(STDERR, "MEMORY ERROR: %d bytes still allocated\n",
|
fprintf(STDERR, "MEMORY ERROR: %d bytes still allocated\n",
|
||||||
current_allocation);
|
current_allocation);
|
||||||
while (pinfo != NULL) {
|
while (pinfo != NULL)
|
||||||
|
{
|
||||||
fprintf(STDERR, " %d bytes at %x\n", pinfo->size, pinfo->pointer);
|
fprintf(STDERR, " %d bytes at %x\n", pinfo->size, pinfo->pointer);
|
||||||
pinfo = pinfo->next;
|
pinfo = pinfo->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -1176,7 +1255,8 @@ main(int argc, char *argv[])
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for (i=0; i<3; ++i) {
|
for (i=0; i<3; ++i)
|
||||||
|
{
|
||||||
int kerror;
|
int kerror;
|
||||||
#ifdef PNG_USER_MEM_SUPPORTED
|
#ifdef PNG_USER_MEM_SUPPORTED
|
||||||
int allocation_now = current_allocation;
|
int allocation_now = current_allocation;
|
||||||
@@ -1219,13 +1299,16 @@ main(int argc, char *argv[])
|
|||||||
if (allocation_now != current_allocation)
|
if (allocation_now != current_allocation)
|
||||||
fprintf(STDERR, "MEMORY ERROR: %d bytes lost\n",
|
fprintf(STDERR, "MEMORY ERROR: %d bytes lost\n",
|
||||||
current_allocation-allocation_now);
|
current_allocation-allocation_now);
|
||||||
if (current_allocation != 0) {
|
if (current_allocation != 0)
|
||||||
|
{
|
||||||
memory_infop pinfo = pinformation;
|
memory_infop pinfo = pinformation;
|
||||||
|
|
||||||
fprintf(STDERR, "MEMORY ERROR: %d bytes still allocated\n",
|
fprintf(STDERR, "MEMORY ERROR: %d bytes still allocated\n",
|
||||||
current_allocation);
|
current_allocation);
|
||||||
while (pinfo != NULL) {
|
while (pinfo != NULL)
|
||||||
fprintf(STDERR, " %d bytes at %x\n", pinfo->size, pinfo->pointer);
|
{
|
||||||
|
fprintf(STDERR," %d bytes at %x\n",
|
||||||
|
pinfo->size, pinfo->pointer);
|
||||||
pinfo = pinfo->next;
|
pinfo = pinfo->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1261,9 +1344,4 @@ main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Generate a compiler error if there is an old png.h in the search path. */
|
/* Generate a compiler error if there is an old png.h in the search path. */
|
||||||
void
|
typedef version_1_0_6f your_png_h_is_not_version_1_0_6f;
|
||||||
png_check_pngtest_version
|
|
||||||
(version_1_0_5h png_h_is_not_version_1_0_5h)
|
|
||||||
{
|
|
||||||
if(png_h_is_not_version_1_0_5h == NULL) return;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
|
|
||||||
/* pngtrans.c - transforms the data in a row (used by both readers and writers)
|
/* pngtrans.c - transforms the data in a row (used by both readers and writers)
|
||||||
*
|
*
|
||||||
* libpng 1.0.5h - December 10, 1999
|
* libpng 1.0.6f - April 14, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, 1999 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define PNG_INTERNAL
|
#define PNG_INTERNAL
|
||||||
|
|||||||
34
pngtypes.h
34
pngtypes.h
@@ -1,34 +0,0 @@
|
|||||||
/* pngtypes.h - array of chunk-types for libpng
|
|
||||||
*
|
|
||||||
* libpng 1.0.5h - December 10, 1999
|
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
|
||||||
* Copyright (c) 1998, 1999 Glenn Randers-Pehrson
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Constant strings for known chunk types. If you need to add a chunk,
|
|
||||||
* define the string in png.h and invoke it here.
|
|
||||||
*/
|
|
||||||
|
|
||||||
PNG_IHDR;
|
|
||||||
PNG_IDAT;
|
|
||||||
PNG_IEND;
|
|
||||||
PNG_PLTE;
|
|
||||||
PNG_bKGD;
|
|
||||||
PNG_cHRM;
|
|
||||||
PNG_gAMA;
|
|
||||||
PNG_hIST;
|
|
||||||
PNG_iCCP;
|
|
||||||
PNG_iTXt;
|
|
||||||
PNG_oFFs;
|
|
||||||
PNG_pCAL;
|
|
||||||
PNG_pHYs;
|
|
||||||
PNG_sBIT;
|
|
||||||
PNG_sPLT;
|
|
||||||
PNG_sRGB;
|
|
||||||
PNG_tEXt;
|
|
||||||
PNG_tIME;
|
|
||||||
PNG_tRNS;
|
|
||||||
PNG_zTXt;
|
|
||||||
|
|
||||||
13
pngvcrd.c
13
pngvcrd.c
@@ -2,10 +2,10 @@
|
|||||||
*
|
*
|
||||||
* For Intel x86 CPU and Microsoft Visual C++ compiler
|
* For Intel x86 CPU and Microsoft Visual C++ compiler
|
||||||
*
|
*
|
||||||
* libpng 1.0.5h - December 10, 1999
|
* libpng 1.0.6f - April 14, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1998, Intel Corporation
|
* Copyright (c) 1998, Intel Corporation
|
||||||
* Copyright (c) 1998, 1999 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
*
|
*
|
||||||
* Contributed by Nirav Chhatrapati, Intel Corporation, 1998
|
* Contributed by Nirav Chhatrapati, Intel Corporation, 1998
|
||||||
* Interface to libpng contributed by Gilles Vollant, 1999
|
* Interface to libpng contributed by Gilles Vollant, 1999
|
||||||
@@ -33,6 +33,9 @@ static int mmxsupport()
|
|||||||
{
|
{
|
||||||
int mmx_supported_local = 0;
|
int mmx_supported_local = 0;
|
||||||
_asm {
|
_asm {
|
||||||
|
push ebx //CPUID will trash these
|
||||||
|
push ecx
|
||||||
|
push edx
|
||||||
pushfd //Save Eflag to stack
|
pushfd //Save Eflag to stack
|
||||||
pop eax //Get Eflag from stack into eax
|
pop eax //Get Eflag from stack into eax
|
||||||
mov ecx, eax //Make another copy of Eflag in ecx
|
mov ecx, eax //Make another copy of Eflag in ecx
|
||||||
@@ -70,7 +73,9 @@ static int mmxsupport()
|
|||||||
|
|
||||||
NOT_SUPPORTED:
|
NOT_SUPPORTED:
|
||||||
mov eax, mmx_supported_local //move return value to eax
|
mov eax, mmx_supported_local //move return value to eax
|
||||||
|
pop edx //CPUID trashed these
|
||||||
|
pop ecx
|
||||||
|
pop ebx
|
||||||
}
|
}
|
||||||
|
|
||||||
//mmx_supported_local=0; // test code for force don't support MMX
|
//mmx_supported_local=0; // test code for force don't support MMX
|
||||||
@@ -3653,7 +3658,7 @@ png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep
|
|||||||
#ifdef PNG_DEBUG
|
#ifdef PNG_DEBUG
|
||||||
char filnm[6];
|
char filnm[6];
|
||||||
#endif
|
#endif
|
||||||
#define UseMMX 1
|
#define UseMMX 1
|
||||||
|
|
||||||
if (mmx_supported == 2)
|
if (mmx_supported == 2)
|
||||||
mmx_supported = mmxsupport();
|
mmx_supported = mmxsupport();
|
||||||
|
|||||||
4
pngwio.c
4
pngwio.c
@@ -1,11 +1,11 @@
|
|||||||
|
|
||||||
/* pngwio.c - functions for data output
|
/* pngwio.c - functions for data output
|
||||||
*
|
*
|
||||||
* libpng 1.0.5h - December 10, 1999
|
* libpng 1.0.6f - April 14, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, 1999 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
*
|
*
|
||||||
* This file provides a location for all output. Users who need
|
* This file provides a location for all output. Users who need
|
||||||
* special handling are expected to write functions that have the same
|
* special handling are expected to write functions that have the same
|
||||||
|
|||||||
274
pngwrite.c
274
pngwrite.c
@@ -1,11 +1,11 @@
|
|||||||
|
|
||||||
/* pngwrite.c - general routines to write a PNG file
|
/* pngwrite.c - general routines to write a PNG file
|
||||||
*
|
*
|
||||||
* libpng 1.0.5h - December 10, 1999
|
* libpng 1.0.6f - April 14, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, 1999 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* get internal access to png.h */
|
/* get internal access to png.h */
|
||||||
@@ -24,9 +24,6 @@
|
|||||||
void
|
void
|
||||||
png_write_info_before_PLTE(png_structp png_ptr, png_infop info_ptr)
|
png_write_info_before_PLTE(png_structp png_ptr, png_infop info_ptr)
|
||||||
{
|
{
|
||||||
#if defined(PNG_WRITE_sPLT_SUPPORTED)
|
|
||||||
int i;
|
|
||||||
#endif
|
|
||||||
png_debug(1, "in png_write_info_before_PLTE\n");
|
png_debug(1, "in png_write_info_before_PLTE\n");
|
||||||
if (!(png_ptr->mode & PNG_WROTE_INFO_BEFORE_PLTE))
|
if (!(png_ptr->mode & PNG_WROTE_INFO_BEFORE_PLTE))
|
||||||
{
|
{
|
||||||
@@ -45,11 +42,11 @@ png_write_info_before_PLTE(png_structp png_ptr, png_infop info_ptr)
|
|||||||
#if defined(PNG_WRITE_gAMA_SUPPORTED)
|
#if defined(PNG_WRITE_gAMA_SUPPORTED)
|
||||||
if (info_ptr->valid & PNG_INFO_gAMA)
|
if (info_ptr->valid & PNG_INFO_gAMA)
|
||||||
{
|
{
|
||||||
#ifdef PNG_FIXED_POINT_SUPPORTED
|
|
||||||
png_write_gAMA_fixed(png_ptr, info_ptr->int_gamma);
|
|
||||||
#else
|
|
||||||
# ifdef PNG_FLOATING_POINT_SUPPORTED
|
# ifdef PNG_FLOATING_POINT_SUPPORTED
|
||||||
png_write_gAMA(png_ptr, info_ptr->gamma);
|
png_write_gAMA(png_ptr, info_ptr->gamma);
|
||||||
|
#else
|
||||||
|
#ifdef PNG_FIXED_POINT_SUPPORTED
|
||||||
|
png_write_gAMA_fixed(png_ptr, info_ptr->int_gamma);
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -63,11 +60,6 @@ png_write_info_before_PLTE(png_structp png_ptr, png_infop info_ptr)
|
|||||||
png_write_iCCP(png_ptr, info_ptr->iccp_name, PNG_TEXT_COMPRESSION_NONE,
|
png_write_iCCP(png_ptr, info_ptr->iccp_name, PNG_TEXT_COMPRESSION_NONE,
|
||||||
info_ptr->iccp_profile, (int)info_ptr->iccp_proflen);
|
info_ptr->iccp_profile, (int)info_ptr->iccp_proflen);
|
||||||
#endif
|
#endif
|
||||||
#if defined(PNG_WRITE_sPLT_SUPPORTED)
|
|
||||||
if (info_ptr->valid & PNG_INFO_sPLT)
|
|
||||||
for (i = 0; i < (int)info_ptr->splt_palettes_num; i++)
|
|
||||||
png_write_sPLT(png_ptr, info_ptr->splt_palettes + i);
|
|
||||||
#endif
|
|
||||||
#if defined(PNG_WRITE_sBIT_SUPPORTED)
|
#if defined(PNG_WRITE_sBIT_SUPPORTED)
|
||||||
if (info_ptr->valid & PNG_INFO_sBIT)
|
if (info_ptr->valid & PNG_INFO_sBIT)
|
||||||
png_write_sBIT(png_ptr, &(info_ptr->sig_bit), info_ptr->color_type);
|
png_write_sBIT(png_ptr, &(info_ptr->sig_bit), info_ptr->color_type);
|
||||||
@@ -75,19 +67,19 @@ png_write_info_before_PLTE(png_structp png_ptr, png_infop info_ptr)
|
|||||||
#if defined(PNG_WRITE_cHRM_SUPPORTED)
|
#if defined(PNG_WRITE_cHRM_SUPPORTED)
|
||||||
if (info_ptr->valid & PNG_INFO_cHRM)
|
if (info_ptr->valid & PNG_INFO_cHRM)
|
||||||
{
|
{
|
||||||
#ifdef PNG_FIXED_POINT_SUPPORTED
|
#ifdef PNG_FLOATING_POINT_SUPPORTED
|
||||||
png_write_cHRM_fixed(png_ptr,
|
|
||||||
info_ptr->int_x_white, info_ptr->int_y_white,
|
|
||||||
info_ptr->int_x_red, info_ptr->int_y_red,
|
|
||||||
info_ptr->int_x_green, info_ptr->int_y_green,
|
|
||||||
info_ptr->int_x_blue, info_ptr->int_y_blue);
|
|
||||||
#else
|
|
||||||
# ifdef PNG_FLOATING_POINT_SUPPORTED
|
|
||||||
png_write_cHRM(png_ptr,
|
png_write_cHRM(png_ptr,
|
||||||
info_ptr->x_white, info_ptr->y_white,
|
info_ptr->x_white, info_ptr->y_white,
|
||||||
info_ptr->x_red, info_ptr->y_red,
|
info_ptr->x_red, info_ptr->y_red,
|
||||||
info_ptr->x_green, info_ptr->y_green,
|
info_ptr->x_green, info_ptr->y_green,
|
||||||
info_ptr->x_blue, info_ptr->y_blue);
|
info_ptr->x_blue, info_ptr->y_blue);
|
||||||
|
#else
|
||||||
|
# ifdef PNG_FIXED_POINT_SUPPORTED
|
||||||
|
png_write_cHRM_fixed(png_ptr,
|
||||||
|
info_ptr->int_x_white, info_ptr->int_y_white,
|
||||||
|
info_ptr->int_x_red, info_ptr->int_y_red,
|
||||||
|
info_ptr->int_x_green, info_ptr->int_y_green,
|
||||||
|
info_ptr->int_x_blue, info_ptr->int_y_blue);
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -102,8 +94,16 @@ png_write_info_before_PLTE(png_structp png_ptr, png_infop info_ptr)
|
|||||||
for (up = info_ptr->unknown_chunks;
|
for (up = info_ptr->unknown_chunks;
|
||||||
up < info_ptr->unknown_chunks + info_ptr->unknown_chunks_num;
|
up < info_ptr->unknown_chunks + info_ptr->unknown_chunks_num;
|
||||||
up++)
|
up++)
|
||||||
if (!(up->location & PNG_HAVE_PLTE))
|
{
|
||||||
|
int keep=png_handle_as_unknown(png_ptr, up->name);
|
||||||
|
if (keep != HANDLE_CHUNK_NEVER &&
|
||||||
|
up->location && (!(up->location & PNG_HAVE_PLTE)) &&
|
||||||
|
((up->name[3] & 0x20) || keep == HANDLE_CHUNK_ALWAYS ||
|
||||||
|
(png_ptr->flags & PNG_FLAG_KEEP_UNSAFE_CHUNKS)))
|
||||||
|
{
|
||||||
png_write_chunk(png_ptr, up->name, up->data, up->size);
|
png_write_chunk(png_ptr, up->name, up->data, up->size);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
png_ptr->mode |= PNG_WROTE_INFO_BEFORE_PLTE;
|
png_ptr->mode |= PNG_WROTE_INFO_BEFORE_PLTE;
|
||||||
@@ -113,7 +113,7 @@ png_write_info_before_PLTE(png_structp png_ptr, png_infop info_ptr)
|
|||||||
void
|
void
|
||||||
png_write_info(png_structp png_ptr, png_infop info_ptr)
|
png_write_info(png_structp png_ptr, png_infop info_ptr)
|
||||||
{
|
{
|
||||||
#if defined(PNG_WRITE_TEXT_SUPPORTED)
|
#if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_sPLT_SUPPORTED)
|
||||||
int i;
|
int i;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -132,7 +132,7 @@ png_write_info(png_structp png_ptr, png_infop info_ptr)
|
|||||||
{
|
{
|
||||||
#if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)
|
#if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)
|
||||||
/* invert the alpha channel (in tRNS) */
|
/* invert the alpha channel (in tRNS) */
|
||||||
if (png_ptr->transformations & PNG_INVERT_ALPHA &&
|
if ((png_ptr->transformations & PNG_INVERT_ALPHA) &&
|
||||||
info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
|
info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
|
||||||
{
|
{
|
||||||
int j;
|
int j;
|
||||||
@@ -165,8 +165,18 @@ png_write_info(png_structp png_ptr, png_infop info_ptr)
|
|||||||
#endif
|
#endif
|
||||||
#if defined(PNG_WRITE_sCAL_SUPPORTED)
|
#if defined(PNG_WRITE_sCAL_SUPPORTED)
|
||||||
if (info_ptr->valid & PNG_INFO_sCAL)
|
if (info_ptr->valid & PNG_INFO_sCAL)
|
||||||
png_write_sCAL_s(png_ptr, info_ptr->scal_unit,
|
#if defined(PNG_FLOATING_POINT_SUPPORTED) && !defined(PNG_NO_STDIO)
|
||||||
|
png_write_sCAL(png_ptr, (int)info_ptr->scal_unit,
|
||||||
|
info_ptr->scal_pixel_width, info_ptr->scal_pixel_height);
|
||||||
|
#else
|
||||||
|
#ifdef PNG_FIXED_POINT_SUPPORTED
|
||||||
|
png_write_sCAL_s(png_ptr, (int)info_ptr->scal_unit,
|
||||||
info_ptr->scal_s_width, info_ptr->scal_s_height);
|
info_ptr->scal_s_width, info_ptr->scal_s_height);
|
||||||
|
#else
|
||||||
|
png_warning(png_ptr,
|
||||||
|
"png_write_sCAL not supported; sCAL chunk not written.\n");
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#if defined(PNG_WRITE_pHYs_SUPPORTED)
|
#if defined(PNG_WRITE_pHYs_SUPPORTED)
|
||||||
if (info_ptr->valid & PNG_INFO_pHYs)
|
if (info_ptr->valid & PNG_INFO_pHYs)
|
||||||
@@ -180,6 +190,11 @@ png_write_info(png_structp png_ptr, png_infop info_ptr)
|
|||||||
png_ptr->mode |= PNG_WROTE_tIME;
|
png_ptr->mode |= PNG_WROTE_tIME;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(PNG_WRITE_sPLT_SUPPORTED)
|
||||||
|
if (info_ptr->valid & PNG_INFO_sPLT)
|
||||||
|
for (i = 0; i < (int)info_ptr->splt_palettes_num; i++)
|
||||||
|
png_write_sPLT(png_ptr, info_ptr->splt_palettes + i);
|
||||||
|
#endif
|
||||||
#if defined(PNG_WRITE_TEXT_SUPPORTED)
|
#if defined(PNG_WRITE_TEXT_SUPPORTED)
|
||||||
/* Check to see if we need to write text chunks */
|
/* Check to see if we need to write text chunks */
|
||||||
for (i = 0; i < info_ptr->num_text; i++)
|
for (i = 0; i < info_ptr->num_text; i++)
|
||||||
@@ -187,15 +202,15 @@ png_write_info(png_structp png_ptr, png_infop info_ptr)
|
|||||||
png_debug2(2, "Writing header text chunk %d, type %d\n", i,
|
png_debug2(2, "Writing header text chunk %d, type %d\n", i,
|
||||||
info_ptr->text[i].compression);
|
info_ptr->text[i].compression);
|
||||||
/* an internationalized chunk? */
|
/* an internationalized chunk? */
|
||||||
if (info_ptr->text[i].lang)
|
if (info_ptr->text[i].compression > 0)
|
||||||
{
|
{
|
||||||
#if defined(PNG_WRITE_iTXt_SUPPORTED)
|
#if defined(PNG_WRITE_iTXt_SUPPORTED)
|
||||||
/* write international chunk */
|
/* write international chunk */
|
||||||
png_write_iTXt(png_ptr,
|
png_write_iTXt(png_ptr,
|
||||||
info_ptr->text[i].compression,
|
info_ptr->text[i].compression,
|
||||||
info_ptr->text[i].lang,
|
|
||||||
info_ptr->text[i].key,
|
info_ptr->text[i].key,
|
||||||
info_ptr->text[i].translated_key,
|
info_ptr->text[i].lang,
|
||||||
|
info_ptr->text[i].lang_key,
|
||||||
info_ptr->text[i].text);
|
info_ptr->text[i].text);
|
||||||
#else
|
#else
|
||||||
png_warning(png_ptr, "Unable to write international text\n");
|
png_warning(png_ptr, "Unable to write international text\n");
|
||||||
@@ -204,12 +219,12 @@ png_write_info(png_structp png_ptr, png_infop info_ptr)
|
|||||||
info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_NONE_WR;
|
info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_NONE_WR;
|
||||||
}
|
}
|
||||||
/* If we want a compressed text chunk */
|
/* If we want a compressed text chunk */
|
||||||
else if (info_ptr->text[i].compression >= PNG_TEXT_COMPRESSION_zTXt)
|
else if (info_ptr->text[i].compression == PNG_TEXT_COMPRESSION_zTXt)
|
||||||
{
|
{
|
||||||
#if defined(PNG_WRITE_zTXt_SUPPORTED)
|
#if defined(PNG_WRITE_zTXt_SUPPORTED)
|
||||||
/* write compressed chunk */
|
/* write compressed chunk */
|
||||||
png_write_zTXt(png_ptr, info_ptr->text[i].key,
|
png_write_zTXt(png_ptr, info_ptr->text[i].key,
|
||||||
info_ptr->text[i].text, info_ptr->text[i].text_length,
|
info_ptr->text[i].text, 0,
|
||||||
info_ptr->text[i].compression);
|
info_ptr->text[i].compression);
|
||||||
#else
|
#else
|
||||||
png_warning(png_ptr, "Unable to write compressed text\n");
|
png_warning(png_ptr, "Unable to write compressed text\n");
|
||||||
@@ -223,7 +238,7 @@ png_write_info(png_structp png_ptr, png_infop info_ptr)
|
|||||||
/* write uncompressed chunk */
|
/* write uncompressed chunk */
|
||||||
png_write_tEXt(png_ptr, info_ptr->text[i].key,
|
png_write_tEXt(png_ptr, info_ptr->text[i].key,
|
||||||
info_ptr->text[i].text,
|
info_ptr->text[i].text,
|
||||||
info_ptr->text[i].text_length);
|
0);
|
||||||
#else
|
#else
|
||||||
png_warning(png_ptr, "Unable to write uncompressed text\n");
|
png_warning(png_ptr, "Unable to write uncompressed text\n");
|
||||||
#endif
|
#endif
|
||||||
@@ -242,8 +257,17 @@ png_write_info(png_structp png_ptr, png_infop info_ptr)
|
|||||||
for (up = info_ptr->unknown_chunks;
|
for (up = info_ptr->unknown_chunks;
|
||||||
up < info_ptr->unknown_chunks + info_ptr->unknown_chunks_num;
|
up < info_ptr->unknown_chunks + info_ptr->unknown_chunks_num;
|
||||||
up++)
|
up++)
|
||||||
if ((up->location& PNG_HAVE_PLTE) && !(up->location& PNG_HAVE_IDAT))
|
{
|
||||||
png_write_chunk(png_ptr, up->name, up->data, up->size);
|
int keep=png_handle_as_unknown(png_ptr, up->name);
|
||||||
|
if (keep != HANDLE_CHUNK_NEVER &&
|
||||||
|
up->location && (up->location & PNG_HAVE_PLTE) &&
|
||||||
|
!(up->location & PNG_HAVE_IDAT) &&
|
||||||
|
((up->name[3] & 0x20) || keep == HANDLE_CHUNK_ALWAYS ||
|
||||||
|
(png_ptr->flags & PNG_FLAG_KEEP_UNSAFE_CHUNKS)))
|
||||||
|
{
|
||||||
|
png_write_chunk(png_ptr, up->name, up->data, up->size);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -268,7 +292,7 @@ png_write_end(png_structp png_ptr, png_infop info_ptr)
|
|||||||
#endif
|
#endif
|
||||||
#if defined(PNG_WRITE_tIME_SUPPORTED)
|
#if defined(PNG_WRITE_tIME_SUPPORTED)
|
||||||
/* check to see if user has supplied a time chunk */
|
/* check to see if user has supplied a time chunk */
|
||||||
if (info_ptr->valid & PNG_INFO_tIME &&
|
if ((info_ptr->valid & PNG_INFO_tIME) &&
|
||||||
!(png_ptr->mode & PNG_WROTE_tIME))
|
!(png_ptr->mode & PNG_WROTE_tIME))
|
||||||
png_write_tIME(png_ptr, &(info_ptr->mod_time));
|
png_write_tIME(png_ptr, &(info_ptr->mod_time));
|
||||||
#endif
|
#endif
|
||||||
@@ -278,12 +302,29 @@ png_write_end(png_structp png_ptr, png_infop info_ptr)
|
|||||||
{
|
{
|
||||||
png_debug2(2, "Writing trailer text chunk %d, type %d\n", i,
|
png_debug2(2, "Writing trailer text chunk %d, type %d\n", i,
|
||||||
info_ptr->text[i].compression);
|
info_ptr->text[i].compression);
|
||||||
if (info_ptr->text[i].compression >= PNG_TEXT_COMPRESSION_zTXt)
|
/* an internationalized chunk? */
|
||||||
|
if (info_ptr->text[i].compression > 0)
|
||||||
|
{
|
||||||
|
#if defined(PNG_WRITE_iTXt_SUPPORTED)
|
||||||
|
/* write international chunk */
|
||||||
|
png_write_iTXt(png_ptr,
|
||||||
|
info_ptr->text[i].compression,
|
||||||
|
info_ptr->text[i].key,
|
||||||
|
info_ptr->text[i].lang,
|
||||||
|
info_ptr->text[i].lang_key,
|
||||||
|
info_ptr->text[i].text);
|
||||||
|
#else
|
||||||
|
png_warning(png_ptr, "Unable to write international text\n");
|
||||||
|
#endif
|
||||||
|
/* Mark this chunk as written */
|
||||||
|
info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_NONE_WR;
|
||||||
|
}
|
||||||
|
else if (info_ptr->text[i].compression >= PNG_TEXT_COMPRESSION_zTXt)
|
||||||
{
|
{
|
||||||
#if defined(PNG_WRITE_zTXt_SUPPORTED)
|
#if defined(PNG_WRITE_zTXt_SUPPORTED)
|
||||||
/* write compressed chunk */
|
/* write compressed chunk */
|
||||||
png_write_zTXt(png_ptr, info_ptr->text[i].key,
|
png_write_zTXt(png_ptr, info_ptr->text[i].key,
|
||||||
info_ptr->text[i].text, info_ptr->text[i].text_length,
|
info_ptr->text[i].text, 0,
|
||||||
info_ptr->text[i].compression);
|
info_ptr->text[i].compression);
|
||||||
#else
|
#else
|
||||||
png_warning(png_ptr, "Unable to write compressed text\n");
|
png_warning(png_ptr, "Unable to write compressed text\n");
|
||||||
@@ -296,7 +337,7 @@ png_write_end(png_structp png_ptr, png_infop info_ptr)
|
|||||||
#if defined(PNG_WRITE_tEXt_SUPPORTED)
|
#if defined(PNG_WRITE_tEXt_SUPPORTED)
|
||||||
/* write uncompressed chunk */
|
/* write uncompressed chunk */
|
||||||
png_write_tEXt(png_ptr, info_ptr->text[i].key,
|
png_write_tEXt(png_ptr, info_ptr->text[i].key,
|
||||||
info_ptr->text[i].text, info_ptr->text[i].text_length);
|
info_ptr->text[i].text, 0);
|
||||||
#else
|
#else
|
||||||
png_warning(png_ptr, "Unable to write uncompressed text\n");
|
png_warning(png_ptr, "Unable to write uncompressed text\n");
|
||||||
#endif
|
#endif
|
||||||
@@ -316,8 +357,16 @@ png_write_end(png_structp png_ptr, png_infop info_ptr)
|
|||||||
for (up = info_ptr->unknown_chunks;
|
for (up = info_ptr->unknown_chunks;
|
||||||
up < info_ptr->unknown_chunks + info_ptr->unknown_chunks_num;
|
up < info_ptr->unknown_chunks + info_ptr->unknown_chunks_num;
|
||||||
up++)
|
up++)
|
||||||
if (up->location & PNG_HAVE_IDAT)
|
{
|
||||||
|
int keep=png_handle_as_unknown(png_ptr, up->name);
|
||||||
|
if (keep != HANDLE_CHUNK_NEVER &&
|
||||||
|
up->location && (up->location & PNG_AFTER_IDAT) &&
|
||||||
|
((up->name[3] & 0x20) || keep == HANDLE_CHUNK_ALWAYS ||
|
||||||
|
(png_ptr->flags & PNG_FLAG_KEEP_UNSAFE_CHUNKS)))
|
||||||
|
{
|
||||||
png_write_chunk(png_ptr, up->name, up->data, up->size);
|
png_write_chunk(png_ptr, up->name, up->data, up->size);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -370,8 +419,10 @@ png_create_write_struct_2(png_const_charp user_png_ver, png_voidp error_ptr,
|
|||||||
{
|
{
|
||||||
#endif /* PNG_USER_MEM_SUPPORTED */
|
#endif /* PNG_USER_MEM_SUPPORTED */
|
||||||
png_structp png_ptr;
|
png_structp png_ptr;
|
||||||
|
#ifdef PNG_SETJMP_SUPPORTED
|
||||||
#ifdef USE_FAR_KEYWORD
|
#ifdef USE_FAR_KEYWORD
|
||||||
jmp_buf jmpbuf;
|
jmp_buf jmpbuf;
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
png_debug(1, "in png_create_write_struct\n");
|
png_debug(1, "in png_create_write_struct\n");
|
||||||
#ifdef PNG_USER_MEM_SUPPORTED
|
#ifdef PNG_USER_MEM_SUPPORTED
|
||||||
@@ -383,6 +434,8 @@ png_create_write_struct_2(png_const_charp user_png_ver, png_voidp error_ptr,
|
|||||||
{
|
{
|
||||||
return ((png_structp)NULL);
|
return ((png_structp)NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef PNG_SETJMP_SUPPORTED
|
||||||
#ifdef USE_FAR_KEYWORD
|
#ifdef USE_FAR_KEYWORD
|
||||||
if (setjmp(jmpbuf))
|
if (setjmp(jmpbuf))
|
||||||
#else
|
#else
|
||||||
@@ -396,6 +449,8 @@ png_create_write_struct_2(png_const_charp user_png_ver, png_voidp error_ptr,
|
|||||||
#ifdef USE_FAR_KEYWORD
|
#ifdef USE_FAR_KEYWORD
|
||||||
png_memcpy(png_ptr->jmpbuf,jmpbuf,sizeof(jmp_buf));
|
png_memcpy(png_ptr->jmpbuf,jmpbuf,sizeof(jmp_buf));
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_USER_MEM_SUPPORTED
|
#ifdef PNG_USER_MEM_SUPPORTED
|
||||||
png_set_mem_fn(png_ptr, mem_ptr, malloc_fn, free_fn);
|
png_set_mem_fn(png_ptr, mem_ptr, malloc_fn, free_fn);
|
||||||
#endif /* PNG_USER_MEM_SUPPORTED */
|
#endif /* PNG_USER_MEM_SUPPORTED */
|
||||||
@@ -432,17 +487,23 @@ png_create_write_struct_2(png_const_charp user_png_ver, png_voidp error_ptr,
|
|||||||
void
|
void
|
||||||
png_write_init(png_structp png_ptr)
|
png_write_init(png_structp png_ptr)
|
||||||
{
|
{
|
||||||
|
#ifdef PNG_SETJMP_SUPPORTED
|
||||||
jmp_buf tmp_jmp; /* to save current jump buffer */
|
jmp_buf tmp_jmp; /* to save current jump buffer */
|
||||||
|
#endif
|
||||||
|
|
||||||
png_debug(1, "in png_write_init\n");
|
png_debug(1, "in png_write_init\n");
|
||||||
|
#ifdef PNG_SETJMP_SUPPORTED
|
||||||
/* save jump buffer and error functions */
|
/* save jump buffer and error functions */
|
||||||
png_memcpy(tmp_jmp, png_ptr->jmpbuf, sizeof (jmp_buf));
|
png_memcpy(tmp_jmp, png_ptr->jmpbuf, sizeof (jmp_buf));
|
||||||
|
#endif
|
||||||
|
|
||||||
/* reset all variables to 0 */
|
/* reset all variables to 0 */
|
||||||
png_memset(png_ptr, 0, sizeof (png_struct));
|
png_memset(png_ptr, 0, sizeof (png_struct));
|
||||||
|
|
||||||
|
#ifdef PNG_SETJMP_SUPPORTED
|
||||||
/* restore jump buffer */
|
/* restore jump buffer */
|
||||||
png_memcpy(png_ptr->jmpbuf, tmp_jmp, sizeof (jmp_buf));
|
png_memcpy(png_ptr->jmpbuf, tmp_jmp, sizeof (jmp_buf));
|
||||||
|
#endif
|
||||||
|
|
||||||
/* initialize zbuf - compression buffer */
|
/* initialize zbuf - compression buffer */
|
||||||
png_ptr->zbuf_size = PNG_ZBUF_SIZE;
|
png_ptr->zbuf_size = PNG_ZBUF_SIZE;
|
||||||
@@ -554,49 +615,49 @@ png_write_row(png_structp png_ptr, png_bytep row)
|
|||||||
switch (png_ptr->pass)
|
switch (png_ptr->pass)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
if (png_ptr->row_number & 7)
|
if (png_ptr->row_number & 0x07)
|
||||||
{
|
{
|
||||||
png_write_finish_row(png_ptr);
|
png_write_finish_row(png_ptr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
if ((png_ptr->row_number & 7) || png_ptr->width < 5)
|
if ((png_ptr->row_number & 0x07) || png_ptr->width < 5)
|
||||||
{
|
{
|
||||||
png_write_finish_row(png_ptr);
|
png_write_finish_row(png_ptr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if ((png_ptr->row_number & 7) != 4)
|
if ((png_ptr->row_number & 0x07) != 4)
|
||||||
{
|
{
|
||||||
png_write_finish_row(png_ptr);
|
png_write_finish_row(png_ptr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
if ((png_ptr->row_number & 3) || png_ptr->width < 3)
|
if ((png_ptr->row_number & 0x03) || png_ptr->width < 3)
|
||||||
{
|
{
|
||||||
png_write_finish_row(png_ptr);
|
png_write_finish_row(png_ptr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
if ((png_ptr->row_number & 3) != 2)
|
if ((png_ptr->row_number & 0x03) != 2)
|
||||||
{
|
{
|
||||||
png_write_finish_row(png_ptr);
|
png_write_finish_row(png_ptr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
if ((png_ptr->row_number & 1) || png_ptr->width < 2)
|
if ((png_ptr->row_number & 0x01) || png_ptr->width < 2)
|
||||||
{
|
{
|
||||||
png_write_finish_row(png_ptr);
|
png_write_finish_row(png_ptr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
if (!(png_ptr->row_number & 1))
|
if (!(png_ptr->row_number & 0x01))
|
||||||
{
|
{
|
||||||
png_write_finish_row(png_ptr);
|
png_write_finish_row(png_ptr);
|
||||||
return;
|
return;
|
||||||
@@ -741,24 +802,13 @@ png_destroy_write_struct(png_structpp png_ptr_ptr, png_infopp info_ptr_ptr)
|
|||||||
|
|
||||||
if (info_ptr != NULL)
|
if (info_ptr != NULL)
|
||||||
{
|
{
|
||||||
#if defined(PNG_WRITE_TEXT_SUPPORTED)
|
png_free_data(png_ptr, info_ptr, PNG_FREE_ALL, -1);
|
||||||
png_free_text(png_ptr, info_ptr, -1);
|
|
||||||
#endif
|
if (png_ptr->num_chunk_list)
|
||||||
#if defined(PNG_WRITE_sCAL_SUPPORTED)
|
{
|
||||||
png_free_sCAL(png_ptr, info_ptr);
|
png_free(png_ptr, png_ptr->chunk_list);
|
||||||
#endif
|
png_ptr->num_chunk_list=0;
|
||||||
#if defined(PNG_WRITE_pCAL_SUPPORTED)
|
}
|
||||||
png_free_pCAL(png_ptr, info_ptr);
|
|
||||||
#endif
|
|
||||||
#if defined(PNG_WRITE_iCCP_SUPPORTED)
|
|
||||||
png_free_iCCP(png_ptr, info_ptr);
|
|
||||||
#endif
|
|
||||||
#if defined(PNG_WRITE_sPLT_SUPPORTED)
|
|
||||||
png_free_spalette(png_ptr, info_ptr, -1);
|
|
||||||
#endif
|
|
||||||
#if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
|
|
||||||
png_free_unknown_chunk(png_ptr, info_ptr, -1);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef PNG_USER_MEM_SUPPORTED
|
#ifdef PNG_USER_MEM_SUPPORTED
|
||||||
png_destroy_struct_2((png_voidp)info_ptr, free_fn);
|
png_destroy_struct_2((png_voidp)info_ptr, free_fn);
|
||||||
@@ -785,7 +835,9 @@ png_destroy_write_struct(png_structpp png_ptr_ptr, png_infopp info_ptr_ptr)
|
|||||||
void
|
void
|
||||||
png_write_destroy(png_structp png_ptr)
|
png_write_destroy(png_structp png_ptr)
|
||||||
{
|
{
|
||||||
|
#ifdef PNG_SETJMP_SUPPORTED
|
||||||
jmp_buf tmp_jmp; /* save jump buffer */
|
jmp_buf tmp_jmp; /* save jump buffer */
|
||||||
|
#endif
|
||||||
png_error_ptr error_fn;
|
png_error_ptr error_fn;
|
||||||
png_error_ptr warning_fn;
|
png_error_ptr warning_fn;
|
||||||
png_voidp error_ptr;
|
png_voidp error_ptr;
|
||||||
@@ -818,8 +870,10 @@ png_write_destroy(png_structp png_ptr)
|
|||||||
png_free(png_ptr, png_ptr->inv_filter_costs);
|
png_free(png_ptr, png_ptr->inv_filter_costs);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef PNG_SETJMP_SUPPORTED
|
||||||
/* reset structure */
|
/* reset structure */
|
||||||
png_memcpy(tmp_jmp, png_ptr->jmpbuf, sizeof (jmp_buf));
|
png_memcpy(tmp_jmp, png_ptr->jmpbuf, sizeof (jmp_buf));
|
||||||
|
#endif
|
||||||
|
|
||||||
error_fn = png_ptr->error_fn;
|
error_fn = png_ptr->error_fn;
|
||||||
warning_fn = png_ptr->warning_fn;
|
warning_fn = png_ptr->warning_fn;
|
||||||
@@ -837,7 +891,9 @@ png_write_destroy(png_structp png_ptr)
|
|||||||
png_ptr->free_fn = free_fn;
|
png_ptr->free_fn = free_fn;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef PNG_SETJMP_SUPPORTED
|
||||||
png_memcpy(png_ptr->jmpbuf, tmp_jmp, sizeof (jmp_buf));
|
png_memcpy(png_ptr->jmpbuf, tmp_jmp, sizeof (jmp_buf));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Allow the application to select one or more row filters to use. */
|
/* Allow the application to select one or more row filters to use. */
|
||||||
@@ -872,14 +928,14 @@ png_set_filter(png_structp png_ptr, int method, int filters)
|
|||||||
*/
|
*/
|
||||||
if (png_ptr->row_buf != NULL)
|
if (png_ptr->row_buf != NULL)
|
||||||
{
|
{
|
||||||
if (png_ptr->do_filter & PNG_FILTER_SUB && png_ptr->sub_row == NULL)
|
if ((png_ptr->do_filter & PNG_FILTER_SUB) && png_ptr->sub_row == NULL)
|
||||||
{
|
{
|
||||||
png_ptr->sub_row = (png_bytep)png_malloc(png_ptr,
|
png_ptr->sub_row = (png_bytep)png_malloc(png_ptr,
|
||||||
(png_ptr->rowbytes + 1));
|
(png_ptr->rowbytes + 1));
|
||||||
png_ptr->sub_row[0] = PNG_FILTER_VALUE_SUB;
|
png_ptr->sub_row[0] = PNG_FILTER_VALUE_SUB;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (png_ptr->do_filter & PNG_FILTER_UP && png_ptr->up_row == NULL)
|
if ((png_ptr->do_filter & PNG_FILTER_UP) && png_ptr->up_row == NULL)
|
||||||
{
|
{
|
||||||
if (png_ptr->prev_row == NULL)
|
if (png_ptr->prev_row == NULL)
|
||||||
{
|
{
|
||||||
@@ -894,7 +950,7 @@ png_set_filter(png_structp png_ptr, int method, int filters)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (png_ptr->do_filter & PNG_FILTER_AVG && png_ptr->avg_row == NULL)
|
if ((png_ptr->do_filter & PNG_FILTER_AVG) && png_ptr->avg_row == NULL)
|
||||||
{
|
{
|
||||||
if (png_ptr->prev_row == NULL)
|
if (png_ptr->prev_row == NULL)
|
||||||
{
|
{
|
||||||
@@ -909,7 +965,7 @@ png_set_filter(png_structp png_ptr, int method, int filters)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (png_ptr->do_filter & PNG_FILTER_PAETH &&
|
if ((png_ptr->do_filter & PNG_FILTER_PAETH) &&
|
||||||
png_ptr->paeth_row == NULL)
|
png_ptr->paeth_row == NULL)
|
||||||
{
|
{
|
||||||
if (png_ptr->prev_row == NULL)
|
if (png_ptr->prev_row == NULL)
|
||||||
@@ -1127,3 +1183,87 @@ png_set_write_user_transform_fn(png_structp png_ptr, png_user_transform_ptr
|
|||||||
png_ptr->write_user_transform_fn = write_user_transform_fn;
|
png_ptr->write_user_transform_fn = write_user_transform_fn;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(PNG_INFO_IMAGE_SUPPORTED)
|
||||||
|
void png_write_png(png_structp png_ptr, png_infop info_ptr,
|
||||||
|
int transforms,
|
||||||
|
voidp params)
|
||||||
|
{
|
||||||
|
#if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)
|
||||||
|
/* invert the alpha channel from opacity to transparency */
|
||||||
|
if (transforms & PNG_TRANSFORM_INVERT_ALPHA)
|
||||||
|
png_set_invert_alpha(png_ptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Write the file header information. */
|
||||||
|
png_write_info(png_ptr, info_ptr);
|
||||||
|
|
||||||
|
/* ------ these transformations don't touch the info structure ------- */
|
||||||
|
|
||||||
|
#if defined(PNG_WRITE_INVERT_SUPPORTED)
|
||||||
|
/* invert monochrome pixels */
|
||||||
|
if (transforms & PNG_TRANSFORM_INVERT_MONO)
|
||||||
|
png_set_invert_mono(png_ptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_WRITE_SHIFT_SUPPORTED)
|
||||||
|
/* Shift the pixels up to a legal bit depth and fill in
|
||||||
|
* as appropriate to correctly scale the image.
|
||||||
|
*/
|
||||||
|
if ((transforms & PNG_TRANSFORM_SHIFT)
|
||||||
|
&& (info_ptr->valid & PNG_INFO_sBIT))
|
||||||
|
png_set_shift(png_ptr, &info_ptr->sig_bit);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_WRITE_PACK_SUPPORTED)
|
||||||
|
/* pack pixels into bytes */
|
||||||
|
if (transforms & PNG_TRANSFORM_PACKING)
|
||||||
|
png_set_packing(png_ptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED)
|
||||||
|
/* swap location of alpha bytes from ARGB to RGBA */
|
||||||
|
if (transforms & PNG_TRANSFORM_SWAP_ALPHA)
|
||||||
|
png_set_swap_alpha(png_ptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_WRITE_FILLER_SUPPORTED)
|
||||||
|
/* Get rid of filler (OR ALPHA) bytes, pack XRGB/RGBX/ARGB/RGBA into
|
||||||
|
* RGB (4 channels -> 3 channels). The second parameter is not used.
|
||||||
|
*/
|
||||||
|
if (transforms & PNG_TRANSFORM_STRIP_FILLER)
|
||||||
|
png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_WRITE_BGR_SUPPORTED)
|
||||||
|
/* flip BGR pixels to RGB */
|
||||||
|
if (transforms & PNG_TRANSFORM_BGR)
|
||||||
|
png_set_bgr(png_ptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_WRITE_SWAP_SUPPORTED)
|
||||||
|
/* swap bytes of 16-bit files to most significant byte first */
|
||||||
|
if (transforms & PNG_TRANSFORM_SWAP_ENDIAN)
|
||||||
|
png_set_swap(png_ptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_WRITE_PACKSWAP_SUPPORTED)
|
||||||
|
/* swap bits of 1, 2, 4 bit packed pixel formats */
|
||||||
|
if (transforms & PNG_TRANSFORM_PACKSWAP)
|
||||||
|
png_set_packswap(png_ptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* ----------------------- end of transformations ------------------- */
|
||||||
|
|
||||||
|
/* write the bits */
|
||||||
|
if (info_ptr->valid & PNG_INFO_IDAT)
|
||||||
|
png_write_image(png_ptr, info_ptr->row_pointers);
|
||||||
|
|
||||||
|
/* It is REQUIRED to call this to finish writing the rest of the file */
|
||||||
|
png_write_end(png_ptr, info_ptr);
|
||||||
|
|
||||||
|
if(transforms == 0 || params == (voidp)NULL)
|
||||||
|
/* quiet compiler warnings */ return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
|
|
||||||
/* pngwtran.c - transforms the data in a row for PNG writers
|
/* pngwtran.c - transforms the data in a row for PNG writers
|
||||||
*
|
*
|
||||||
* libpng 1.0.5h - December 10, 1999
|
* libpng 1.0.6f - April 14, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, 1999 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define PNG_INTERNAL
|
#define PNG_INTERNAL
|
||||||
@@ -140,7 +140,7 @@ png_do_pack(png_row_infop row_info, png_bytep row, png_uint_32 bit_depth)
|
|||||||
{
|
{
|
||||||
png_byte value;
|
png_byte value;
|
||||||
|
|
||||||
value = (png_byte)(*sp & 0x3);
|
value = (png_byte)(*sp & 0x03);
|
||||||
v |= (value << shift);
|
v |= (value << shift);
|
||||||
if (shift == 0)
|
if (shift == 0)
|
||||||
{
|
{
|
||||||
@@ -172,7 +172,7 @@ png_do_pack(png_row_infop row_info, png_bytep row, png_uint_32 bit_depth)
|
|||||||
{
|
{
|
||||||
png_byte value;
|
png_byte value;
|
||||||
|
|
||||||
value = (png_byte)(*sp & 0xf);
|
value = (png_byte)(*sp & 0x0f);
|
||||||
v |= (value << shift);
|
v |= (value << shift);
|
||||||
|
|
||||||
if (shift == 0)
|
if (shift == 0)
|
||||||
|
|||||||
157
pngwutil.c
157
pngwutil.c
@@ -1,11 +1,11 @@
|
|||||||
|
|
||||||
/* pngwutil.c - utilities to write a PNG file
|
/* pngwutil.c - utilities to write a PNG file
|
||||||
*
|
*
|
||||||
* libpng 1.0.5h - December 10, 1999
|
* libpng 1.0.6f - April 14, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
* Copyright (c) 1998, 1999 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define PNG_INTERNAL
|
#define PNG_INTERNAL
|
||||||
@@ -133,7 +133,7 @@ png_write_sig(png_structp png_ptr)
|
|||||||
(png_size_t)8 - png_ptr->sig_bytes);
|
(png_size_t)8 - png_ptr->sig_bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(PNG_WRITE_TEXT_SUPPORTED)
|
#if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_iCCP_SUPPORTED)
|
||||||
/*
|
/*
|
||||||
* This pair of functions encapsulates the operation of (a) compressing a
|
* This pair of functions encapsulates the operation of (a) compressing a
|
||||||
* text string, and (b) issuing it later as a series of chunk data writes.
|
* text string, and (b) issuing it later as a series of chunk data writes.
|
||||||
@@ -179,7 +179,6 @@ png_text_compress(png_structp png_ptr,
|
|||||||
#else
|
#else
|
||||||
png_warning(png_ptr, "Unknown compression type");
|
png_warning(png_ptr, "Unknown compression type");
|
||||||
#endif
|
#endif
|
||||||
compression = PNG_TEXT_COMPRESSION_zTXt;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We can't write the chunk until we find out how much data we have,
|
/* We can't write the chunk until we find out how much data we have,
|
||||||
@@ -334,7 +333,8 @@ png_write_compressed_data_out(png_structp png_ptr, compression_state *comp)
|
|||||||
/* write saved output buffers, if any */
|
/* write saved output buffers, if any */
|
||||||
for (i = 0; i < comp->num_output_ptr; i++)
|
for (i = 0; i < comp->num_output_ptr; i++)
|
||||||
{
|
{
|
||||||
png_write_chunk_data(png_ptr,(png_bytep)comp->output_ptr[i],png_ptr->zbuf_size);
|
png_write_chunk_data(png_ptr,(png_bytep)comp->output_ptr[i],
|
||||||
|
png_ptr->zbuf_size);
|
||||||
png_free(png_ptr, comp->output_ptr[i]);
|
png_free(png_ptr, comp->output_ptr[i]);
|
||||||
}
|
}
|
||||||
if (comp->max_output_ptr != 0)
|
if (comp->max_output_ptr != 0)
|
||||||
@@ -577,15 +577,15 @@ png_write_gAMA(png_structp png_ptr, double file_gamma)
|
|||||||
png_byte buf[4];
|
png_byte buf[4];
|
||||||
|
|
||||||
png_debug(1, "in png_write_gAMA\n");
|
png_debug(1, "in png_write_gAMA\n");
|
||||||
/* file_gamma is saved in 1/1000000ths */
|
/* file_gamma is saved in 1/100,000ths */
|
||||||
igamma = (png_uint_32)(file_gamma * 100000.0 + 0.5);
|
igamma = (png_uint_32)(file_gamma * 100000.0 + 0.5);
|
||||||
png_save_uint_32(buf, igamma);
|
png_save_uint_32(buf, igamma);
|
||||||
png_write_chunk(png_ptr, (png_bytep)png_gAMA, buf, (png_size_t)4);
|
png_write_chunk(png_ptr, (png_bytep)png_gAMA, buf, (png_size_t)4);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
void
|
|
||||||
#ifdef PNG_FIXED_POINT_SUPPORTED
|
#ifdef PNG_FIXED_POINT_SUPPORTED
|
||||||
png_write_gAMA_fixed(png_structp png_ptr, png_uint_32 file_gamma)
|
void
|
||||||
|
png_write_gAMA_fixed(png_structp png_ptr, png_fixed_point file_gamma)
|
||||||
{
|
{
|
||||||
#ifdef PNG_USE_LOCAL_ARRAYS
|
#ifdef PNG_USE_LOCAL_ARRAYS
|
||||||
PNG_gAMA;
|
PNG_gAMA;
|
||||||
@@ -593,7 +593,7 @@ png_write_gAMA_fixed(png_structp png_ptr, png_uint_32 file_gamma)
|
|||||||
png_byte buf[4];
|
png_byte buf[4];
|
||||||
|
|
||||||
png_debug(1, "in png_write_gAMA\n");
|
png_debug(1, "in png_write_gAMA\n");
|
||||||
/* file_gamma is saved in 1/1000000ths */
|
/* file_gamma is saved in 1/100,000ths */
|
||||||
png_save_uint_32(buf, file_gamma);
|
png_save_uint_32(buf, file_gamma);
|
||||||
png_write_chunk(png_ptr, (png_bytep)png_gAMA, buf, (png_size_t)4);
|
png_write_chunk(png_ptr, (png_bytep)png_gAMA, buf, (png_size_t)4);
|
||||||
}
|
}
|
||||||
@@ -641,7 +641,7 @@ png_write_iCCP(png_structp png_ptr, png_charp name, int compression_type,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (compression_type)
|
if (compression_type)
|
||||||
/* ignore */ ;
|
png_warning(png_ptr, "Unknown compression type in iCCP chunk");
|
||||||
|
|
||||||
if (profile == NULL || *profile == '\0')
|
if (profile == NULL || *profile == '\0')
|
||||||
profile_len = 0;
|
profile_len = 0;
|
||||||
@@ -666,7 +666,7 @@ png_write_iCCP(png_structp png_ptr, png_charp name, int compression_type,
|
|||||||
#if defined(PNG_WRITE_sPLT_SUPPORTED)
|
#if defined(PNG_WRITE_sPLT_SUPPORTED)
|
||||||
/* write a sPLT chunk */
|
/* write a sPLT chunk */
|
||||||
void
|
void
|
||||||
png_write_sPLT(png_structp png_ptr, png_spalette_p spalette)
|
png_write_sPLT(png_structp png_ptr, png_sPLT_tp spalette)
|
||||||
{
|
{
|
||||||
#ifdef PNG_USE_LOCAL_ARRAYS
|
#ifdef PNG_USE_LOCAL_ARRAYS
|
||||||
PNG_sPLT;
|
PNG_sPLT;
|
||||||
@@ -676,10 +676,11 @@ png_write_sPLT(png_structp png_ptr, png_spalette_p spalette)
|
|||||||
png_byte entrybuf[10];
|
png_byte entrybuf[10];
|
||||||
int entry_size = (spalette->depth == 8 ? 6 : 10);
|
int entry_size = (spalette->depth == 8 ? 6 : 10);
|
||||||
int palette_size = entry_size * spalette->nentries;
|
int palette_size = entry_size * spalette->nentries;
|
||||||
png_spalette_entryp ep;
|
png_sPLT_entryp ep;
|
||||||
|
|
||||||
png_debug(1, "in png_write_sPLT\n");
|
png_debug(1, "in png_write_sPLT\n");
|
||||||
if (spalette->name == NULL || (name_len = png_check_keyword(png_ptr, spalette->name, &new_name))==0)
|
if (spalette->name == NULL || (name_len = png_check_keyword(png_ptr,
|
||||||
|
spalette->name, &new_name))==0)
|
||||||
{
|
{
|
||||||
png_warning(png_ptr, "Empty keyword in sPLT chunk");
|
png_warning(png_ptr, "Empty keyword in sPLT chunk");
|
||||||
return;
|
return;
|
||||||
@@ -687,8 +688,9 @@ png_write_sPLT(png_structp png_ptr, png_spalette_p spalette)
|
|||||||
|
|
||||||
/* make sure we include the NULL after the name */
|
/* make sure we include the NULL after the name */
|
||||||
png_write_chunk_start(png_ptr, (png_bytep) png_sPLT,
|
png_write_chunk_start(png_ptr, (png_bytep) png_sPLT,
|
||||||
(png_uint_32)(name_len + 1 + palette_size));
|
(png_uint_32)(name_len + 2 + palette_size));
|
||||||
png_write_chunk_data(png_ptr, (png_bytep)new_name, name_len + 1);
|
png_write_chunk_data(png_ptr, (png_bytep)new_name, name_len + 1);
|
||||||
|
png_write_chunk_data(png_ptr, (png_bytep)&spalette->depth, 1);
|
||||||
|
|
||||||
/* loop through each palette entry, writing appropriately */
|
/* loop through each palette entry, writing appropriately */
|
||||||
for (ep = spalette->entries; ep<spalette->entries+spalette->nentries; ep++)
|
for (ep = spalette->entries; ep<spalette->entries+spalette->nentries; ep++)
|
||||||
@@ -784,15 +786,18 @@ png_write_cHRM(png_structp png_ptr, double white_x, double white_y,
|
|||||||
#ifdef PNG_USE_LOCAL_ARRAYS
|
#ifdef PNG_USE_LOCAL_ARRAYS
|
||||||
PNG_cHRM;
|
PNG_cHRM;
|
||||||
#endif
|
#endif
|
||||||
png_uint_32 itemp;
|
|
||||||
png_byte buf[32];
|
png_byte buf[32];
|
||||||
|
png_uint_32 itemp;
|
||||||
|
|
||||||
png_debug(1, "in png_write_cHRM\n");
|
png_debug(1, "in png_write_cHRM\n");
|
||||||
/* each value is saved in 1/1000000ths */
|
/* each value is saved in 1/100,000ths */
|
||||||
if (white_x < 0 || white_x > 0.8 || white_y < 0 || white_y > 0.8 ||
|
if (white_x < 0 || white_x > 0.8 || white_y < 0 || white_y > 0.8 ||
|
||||||
white_x + white_y > 1.0)
|
white_x + white_y > 1.0)
|
||||||
{
|
{
|
||||||
png_warning(png_ptr, "Invalid cHRM white point specified");
|
png_warning(png_ptr, "Invalid cHRM white point specified");
|
||||||
|
#if !defined(PNG_NO_STDIO)
|
||||||
|
printf("white_x=%f, white_y=%f\n",white_x, white_y);
|
||||||
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
itemp = (png_uint_32)(white_x * 100000.0 + 0.5);
|
itemp = (png_uint_32)(white_x * 100000.0 + 0.5);
|
||||||
@@ -838,22 +843,24 @@ png_write_cHRM(png_structp png_ptr, double white_x, double white_y,
|
|||||||
#endif
|
#endif
|
||||||
#ifdef PNG_FIXED_POINT_SUPPORTED
|
#ifdef PNG_FIXED_POINT_SUPPORTED
|
||||||
void
|
void
|
||||||
png_write_cHRM_fixed(png_structp png_ptr, png_uint_32 white_x,
|
png_write_cHRM_fixed(png_structp png_ptr, png_fixed_point white_x,
|
||||||
png_uint_32 white_y, png_uint_32 red_x, png_uint_32 red_y,
|
png_fixed_point white_y, png_fixed_point red_x, png_fixed_point red_y,
|
||||||
png_uint_32 green_x, png_uint_32 green_y, png_uint_32 blue_x,
|
png_fixed_point green_x, png_fixed_point green_y, png_fixed_point blue_x,
|
||||||
png_uint_32 blue_y)
|
png_fixed_point blue_y)
|
||||||
{
|
{
|
||||||
#ifdef PNG_USE_LOCAL_ARRAYS
|
#ifdef PNG_USE_LOCAL_ARRAYS
|
||||||
PNG_cHRM;
|
PNG_cHRM;
|
||||||
#endif
|
#endif
|
||||||
png_uint_32 itemp;
|
|
||||||
png_byte buf[32];
|
png_byte buf[32];
|
||||||
|
|
||||||
png_debug(1, "in png_write_cHRM\n");
|
png_debug(1, "in png_write_cHRM\n");
|
||||||
/* each value is saved int 1/1000000ths */
|
/* each value is saved in 1/100,000ths */
|
||||||
if (white_x > 80000L || white_y > 80000L || white_x + white_y > 100000L)
|
if (white_x > 80000L || white_y > 80000L || white_x + white_y > 100000L)
|
||||||
{
|
{
|
||||||
png_warning(png_ptr, "Invalid cHRM white point specified");
|
png_warning(png_ptr, "Invalid fixed cHRM white point specified");
|
||||||
|
#if !defined(PNG_NO_STDIO)
|
||||||
|
printf("white_x=%ld, white_y=%ld\n",white_x, white_y);
|
||||||
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
png_save_uint_32(buf, white_x);
|
png_save_uint_32(buf, white_x);
|
||||||
@@ -861,7 +868,7 @@ png_write_cHRM_fixed(png_structp png_ptr, png_uint_32 white_x,
|
|||||||
|
|
||||||
if (red_x > 80000L || red_y > 80000L || red_x + red_y > 100000L)
|
if (red_x > 80000L || red_y > 80000L || red_x + red_y > 100000L)
|
||||||
{
|
{
|
||||||
png_warning(png_ptr, "Invalid cHRM red point specified");
|
png_warning(png_ptr, "Invalid cHRM fixed red point specified");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
png_save_uint_32(buf + 8, red_x);
|
png_save_uint_32(buf + 8, red_x);
|
||||||
@@ -869,7 +876,7 @@ png_write_cHRM_fixed(png_structp png_ptr, png_uint_32 white_x,
|
|||||||
|
|
||||||
if (green_x > 80000L || green_y > 80000L || green_x + green_y > 100000L)
|
if (green_x > 80000L || green_y > 80000L || green_x + green_y > 100000L)
|
||||||
{
|
{
|
||||||
png_warning(png_ptr, "Invalid cHRM green point specified");
|
png_warning(png_ptr, "Invalid fixed cHRM green point specified");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
png_save_uint_32(buf + 16, green_x);
|
png_save_uint_32(buf + 16, green_x);
|
||||||
@@ -877,7 +884,7 @@ png_write_cHRM_fixed(png_structp png_ptr, png_uint_32 white_x,
|
|||||||
|
|
||||||
if (blue_x > 80000L || blue_y > 80000L || blue_x + blue_y > 100000L)
|
if (blue_x > 80000L || blue_y > 80000L || blue_x + blue_y > 100000L)
|
||||||
{
|
{
|
||||||
png_warning(png_ptr, "Invalid cHRM blue point specified");
|
png_warning(png_ptr, "Invalid fixed cHRM blue point specified");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
png_save_uint_32(buf + 24, blue_x);
|
png_save_uint_32(buf + 24, blue_x);
|
||||||
@@ -1108,7 +1115,7 @@ png_check_keyword(png_structp png_ptr, png_charp key, png_charpp new_key)
|
|||||||
{
|
{
|
||||||
png_free(png_ptr, *new_key);
|
png_free(png_ptr, *new_key);
|
||||||
*new_key=NULL;
|
*new_key=NULL;
|
||||||
png_chunk_warning(png_ptr, "zero length keyword");
|
png_chunk_warning(png_ptr, "Zero length keyword");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (key_len > 79)
|
if (key_len > 79)
|
||||||
@@ -1143,6 +1150,8 @@ png_write_tEXt(png_structp png_ptr, png_charp key, png_charp text,
|
|||||||
|
|
||||||
if (text == NULL || *text == '\0')
|
if (text == NULL || *text == '\0')
|
||||||
text_len = 0;
|
text_len = 0;
|
||||||
|
else
|
||||||
|
text_len = png_strlen(text);
|
||||||
|
|
||||||
/* make sure we include the 0 after the key */
|
/* make sure we include the 0 after the key */
|
||||||
png_write_chunk_start(png_ptr, (png_bytep)png_tEXt, (png_uint_32)key_len+text_len+1);
|
png_write_chunk_start(png_ptr, (png_bytep)png_tEXt, (png_uint_32)key_len+text_len+1);
|
||||||
@@ -1190,6 +1199,8 @@ png_write_zTXt(png_structp png_ptr, png_charp key, png_charp text,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
text_len = png_strlen(text);
|
||||||
|
|
||||||
png_free(png_ptr, new_key);
|
png_free(png_ptr, new_key);
|
||||||
|
|
||||||
/* compute the compressed data; do it now for the length */
|
/* compute the compressed data; do it now for the length */
|
||||||
@@ -1215,57 +1226,48 @@ png_write_zTXt(png_structp png_ptr, png_charp key, png_charp text,
|
|||||||
/* write an iTXt chunk */
|
/* write an iTXt chunk */
|
||||||
void
|
void
|
||||||
png_write_iTXt(png_structp png_ptr, int compression, png_charp key,
|
png_write_iTXt(png_structp png_ptr, int compression, png_charp key,
|
||||||
png_charp lang, png_charp translated_key, png_charp text)
|
png_charp lang, png_charp lang_key, png_charp text)
|
||||||
{
|
{
|
||||||
#ifdef PNG_USE_LOCAL_ARRAYS
|
#ifdef PNG_USE_LOCAL_ARRAYS
|
||||||
PNG_iTXt;
|
PNG_iTXt;
|
||||||
#endif
|
#endif
|
||||||
png_size_t lang_len, key_len, translated_key_len, text_len;
|
png_size_t lang_len, key_len, lang_key_len, text_len;
|
||||||
png_charp new_lang, new_key;
|
png_charp new_lang, new_key;
|
||||||
png_byte cbuf[2];
|
png_byte cbuf[2];
|
||||||
compression_state comp;
|
compression_state comp;
|
||||||
|
|
||||||
png_debug(1, "in png_write_iTXt\n");
|
png_debug(1, "in png_write_iTXt\n");
|
||||||
|
|
||||||
translated_key_len = png_strlen(translated_key);
|
if (key == NULL || (key_len = png_check_keyword(png_ptr, key, &new_key))==0)
|
||||||
text_len = png_strlen(text);
|
{
|
||||||
|
png_warning(png_ptr, "Empty keyword in iTXt chunk");
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (lang == NULL || (lang_len = png_check_keyword(png_ptr, lang,
|
if (lang == NULL || (lang_len = png_check_keyword(png_ptr, lang,
|
||||||
&new_lang))==0)
|
&new_lang))==0)
|
||||||
{
|
{
|
||||||
png_warning(png_ptr, "Empty language field in iTXt chunk");
|
png_warning(png_ptr, "Empty language field in iTXt chunk");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (key == NULL || (key_len = png_check_keyword(png_ptr, key, &new_key))==0)
|
lang_key_len = png_strlen(lang_key);
|
||||||
{
|
text_len = png_strlen(text);
|
||||||
png_warning(png_ptr, "Empty keyword in iTXt chunk");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (text == NULL || *text == '\0')
|
if (text == NULL || *text == '\0')
|
||||||
text_len = 0;
|
text_len = 0;
|
||||||
|
|
||||||
/* compute the compressed data; do it now for the length */
|
/* compute the compressed data; do it now for the length */
|
||||||
text_len = png_text_compress(png_ptr, text, text_len, compression, &comp);
|
text_len = png_text_compress(png_ptr, text, text_len, compression-2, &comp);
|
||||||
|
|
||||||
/* make sure we include the compression flag, the compression byte,
|
/* make sure we include the compression flag, the compression byte,
|
||||||
* and the NULs after the key, lang, and translated_key parts */
|
* and the NULs after the key, lang, and lang_key parts */
|
||||||
png_write_chunk_start(png_ptr, (png_bytep)png_iTXt,
|
|
||||||
(png_uint_32)(2 + lang_len+1 + key_len+1 + translated_key_len +
|
|
||||||
text_len));
|
|
||||||
|
|
||||||
/* set the compression bits */
|
png_write_chunk_start(png_ptr, (png_bytep)png_iTXt,
|
||||||
if (compression == PNG_TEXT_COMPRESSION_NONE)
|
(png_uint_32)(
|
||||||
{
|
5 /* comp byte, comp flag, terminators for key, lang and lang_key */
|
||||||
cbuf[0] = 0;
|
+ key_len
|
||||||
cbuf[1] = 0;
|
+ lang_len
|
||||||
}
|
+ lang_key_len
|
||||||
else /* compression == PNG_TEXT_COMPRESSION_zTXt */
|
+ text_len));
|
||||||
{
|
|
||||||
cbuf[0] = 1;
|
|
||||||
cbuf[1] = 0;
|
|
||||||
}
|
|
||||||
png_write_chunk_data(png_ptr, cbuf, 2);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We leave it to the application to meet PNG-1.0 requirements on the
|
* We leave it to the application to meet PNG-1.0 requirements on the
|
||||||
@@ -1274,9 +1276,19 @@ png_write_iTXt(png_structp png_ptr, int compression, png_charp key,
|
|||||||
* The NUL character is forbidden by PNG-1.0 through PNG-1.2 and ISO PNG.
|
* The NUL character is forbidden by PNG-1.0 through PNG-1.2 and ISO PNG.
|
||||||
*/
|
*/
|
||||||
png_write_chunk_data(png_ptr, (png_bytep)new_key, key_len + 1);
|
png_write_chunk_data(png_ptr, (png_bytep)new_key, key_len + 1);
|
||||||
|
|
||||||
|
/* set the compression flag */
|
||||||
|
if (compression == PNG_ITXT_COMPRESSION_NONE || \
|
||||||
|
compression == PNG_TEXT_COMPRESSION_NONE)
|
||||||
|
cbuf[0] = 0;
|
||||||
|
else /* compression == PNG_ITXT_COMPRESSION_zTXt */
|
||||||
|
cbuf[0] = 1;
|
||||||
|
/* set the compression method */
|
||||||
|
cbuf[1] = 0;
|
||||||
|
png_write_chunk_data(png_ptr, cbuf, 2);
|
||||||
|
|
||||||
png_write_chunk_data(png_ptr, (png_bytep)new_lang, lang_len + 1);
|
png_write_chunk_data(png_ptr, (png_bytep)new_lang, lang_len + 1);
|
||||||
png_write_chunk_data(png_ptr, (png_bytep)translated_key,
|
png_write_chunk_data(png_ptr, (png_bytep)lang_key, lang_key_len+1);
|
||||||
translated_key_len);
|
|
||||||
png_write_chunk_data(png_ptr, '\0', 1);
|
png_write_chunk_data(png_ptr, '\0', 1);
|
||||||
|
|
||||||
png_write_compressed_data_out(png_ptr, &comp);
|
png_write_compressed_data_out(png_ptr, &comp);
|
||||||
@@ -1373,9 +1385,9 @@ png_write_pCAL(png_structp png_ptr, png_charp purpose, png_int_32 X0,
|
|||||||
|
|
||||||
#if defined(PNG_WRITE_sCAL_SUPPORTED)
|
#if defined(PNG_WRITE_sCAL_SUPPORTED)
|
||||||
/* write the sCAL chunk */
|
/* write the sCAL chunk */
|
||||||
#ifdef PNG_FLOATING_POINT_SUPPORTED
|
#if defined(PNG_FLOATING_POINT_SUPPORTED) && !defined(PNG_NO_STDIO)
|
||||||
void
|
void
|
||||||
png_write_sCAL(png_structp png_ptr, png_charp unit, double width,double height)
|
png_write_sCAL(png_structp png_ptr, int unit, double width,double height)
|
||||||
{
|
{
|
||||||
#ifdef PNG_USE_LOCAL_ARRAYS
|
#ifdef PNG_USE_LOCAL_ARRAYS
|
||||||
PNG_sCAL;
|
PNG_sCAL;
|
||||||
@@ -1387,19 +1399,20 @@ png_write_sCAL(png_structp png_ptr, png_charp unit, double width,double height)
|
|||||||
|
|
||||||
sprintf(wbuf, "%12.12e", width);
|
sprintf(wbuf, "%12.12e", width);
|
||||||
sprintf(hbuf, "%12.12e", height);
|
sprintf(hbuf, "%12.12e", height);
|
||||||
total_len = png_strlen(unit)+1 + png_strlen(wbuf)+1 + png_strlen(hbuf);
|
total_len = 1 + png_strlen(wbuf)+1 + png_strlen(hbuf);
|
||||||
|
|
||||||
png_debug1(3, "sCAL total length = %d\n", total_len);
|
png_debug1(3, "sCAL total length = %d\n", total_len);
|
||||||
png_write_chunk_start(png_ptr, (png_bytep)png_sCAL, (png_uint_32)total_len);
|
png_write_chunk_start(png_ptr, (png_bytep)png_sCAL, (png_uint_32)total_len);
|
||||||
png_write_chunk_data(png_ptr, (png_bytep)unit, png_strlen(unit)+1);
|
png_write_chunk_data(png_ptr, (png_bytep)&unit, 1);
|
||||||
png_write_chunk_data(png_ptr, (png_bytep)wbuf, strlen(wbuf)+1);
|
png_write_chunk_data(png_ptr, (png_bytep)wbuf, strlen(wbuf)+1);
|
||||||
png_write_chunk_data(png_ptr, (png_bytep)hbuf, strlen(hbuf));
|
png_write_chunk_data(png_ptr, (png_bytep)hbuf, strlen(hbuf));
|
||||||
|
|
||||||
png_write_chunk_end(png_ptr);
|
png_write_chunk_end(png_ptr);
|
||||||
}
|
}
|
||||||
#endif
|
#else
|
||||||
|
#ifdef PNG_FIXED_POINT_SUPPORTED
|
||||||
void
|
void
|
||||||
png_write_sCAL_s(png_structp png_ptr, png_charp unit, png_charp width,
|
png_write_sCAL_s(png_structp png_ptr, int unit, png_charp width,
|
||||||
png_charp height)
|
png_charp height)
|
||||||
{
|
{
|
||||||
#ifdef PNG_USE_LOCAL_ARRAYS
|
#ifdef PNG_USE_LOCAL_ARRAYS
|
||||||
@@ -1408,21 +1421,23 @@ png_write_sCAL_s(png_structp png_ptr, png_charp unit, png_charp width,
|
|||||||
png_size_t total_len;
|
png_size_t total_len;
|
||||||
char wbuf[32], hbuf[32];
|
char wbuf[32], hbuf[32];
|
||||||
|
|
||||||
png_debug(1, "in png_write_sCAL\n");
|
png_debug(1, "in png_write_sCAL_s\n");
|
||||||
|
|
||||||
sprintf(wbuf, "%s", width);
|
strcpy(wbuf,(const char *)width);
|
||||||
sprintf(hbuf, "%s", height);
|
strcpy(hbuf,(const char *)height);
|
||||||
total_len = png_strlen(unit)+1 + png_strlen(wbuf)+1 + png_strlen(hbuf);
|
total_len = 1 + png_strlen(wbuf)+1 + png_strlen(hbuf);
|
||||||
|
|
||||||
png_debug1(3, "sCAL total length = %d\n", total_len);
|
png_debug1(3, "sCAL total length = %d\n", total_len);
|
||||||
png_write_chunk_start(png_ptr, (png_bytep)png_sCAL, (png_uint_32)total_len);
|
png_write_chunk_start(png_ptr, (png_bytep)png_sCAL, (png_uint_32)total_len);
|
||||||
png_write_chunk_data(png_ptr, (png_bytep)unit, png_strlen(unit)+1);
|
png_write_chunk_data(png_ptr, (png_bytep)&unit, 1);
|
||||||
png_write_chunk_data(png_ptr, (png_bytep)wbuf, strlen(wbuf)+1);
|
png_write_chunk_data(png_ptr, (png_bytep)wbuf, strlen(wbuf)+1);
|
||||||
png_write_chunk_data(png_ptr, (png_bytep)hbuf, strlen(hbuf));
|
png_write_chunk_data(png_ptr, (png_bytep)hbuf, strlen(hbuf));
|
||||||
|
|
||||||
png_write_chunk_end(png_ptr);
|
png_write_chunk_end(png_ptr);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(PNG_WRITE_pHYs_SUPPORTED)
|
#if defined(PNG_WRITE_pHYs_SUPPORTED)
|
||||||
/* write the pHYs chunk */
|
/* write the pHYs chunk */
|
||||||
@@ -1730,7 +1745,7 @@ png_do_write_interlace(png_row_infop row_info, png_bytep row, int pass)
|
|||||||
i += png_pass_inc[pass])
|
i += png_pass_inc[pass])
|
||||||
{
|
{
|
||||||
sp = row + (png_size_t)(i >> 3);
|
sp = row + (png_size_t)(i >> 3);
|
||||||
value = (int)(*sp >> (7 - (int)(i & 7))) & 0x1;
|
value = (int)(*sp >> (7 - (int)(i & 0x07))) & 0x01;
|
||||||
d |= (value << shift);
|
d |= (value << shift);
|
||||||
|
|
||||||
if (shift == 0)
|
if (shift == 0)
|
||||||
@@ -1764,7 +1779,7 @@ png_do_write_interlace(png_row_infop row_info, png_bytep row, int pass)
|
|||||||
i += png_pass_inc[pass])
|
i += png_pass_inc[pass])
|
||||||
{
|
{
|
||||||
sp = row + (png_size_t)(i >> 2);
|
sp = row + (png_size_t)(i >> 2);
|
||||||
value = (*sp >> ((3 - (int)(i & 3)) << 1)) & 0x3;
|
value = (*sp >> ((3 - (int)(i & 0x03)) << 1)) & 0x03;
|
||||||
d |= (value << shift);
|
d |= (value << shift);
|
||||||
|
|
||||||
if (shift == 0)
|
if (shift == 0)
|
||||||
@@ -1797,7 +1812,7 @@ png_do_write_interlace(png_row_infop row_info, png_bytep row, int pass)
|
|||||||
i += png_pass_inc[pass])
|
i += png_pass_inc[pass])
|
||||||
{
|
{
|
||||||
sp = row + (png_size_t)(i >> 1);
|
sp = row + (png_size_t)(i >> 1);
|
||||||
value = (*sp >> ((1 - (int)(i & 1)) << 2)) & 0xf;
|
value = (*sp >> ((1 - (int)(i & 0x01)) << 2)) & 0x0f;
|
||||||
d |= (value << shift);
|
d |= (value << shift);
|
||||||
|
|
||||||
if (shift == 0)
|
if (shift == 0)
|
||||||
@@ -1904,7 +1919,7 @@ png_write_find_filter(png_structp png_ptr, png_row_infop row_info)
|
|||||||
/* We don't need to test the 'no filter' case if this is the only filter
|
/* We don't need to test the 'no filter' case if this is the only filter
|
||||||
* that has been chosen, as it doesn't actually do anything to the data.
|
* that has been chosen, as it doesn't actually do anything to the data.
|
||||||
*/
|
*/
|
||||||
if (filter_to_do & PNG_FILTER_NONE &&
|
if ((filter_to_do & PNG_FILTER_NONE) &&
|
||||||
filter_to_do != PNG_FILTER_NONE)
|
filter_to_do != PNG_FILTER_NONE)
|
||||||
{
|
{
|
||||||
png_bytep rp;
|
png_bytep rp;
|
||||||
|
|||||||
@@ -1,2 +0,0 @@
|
|||||||
make -fmakefile.bor -B -DMODEL=m %1 %2 %3 libpng >buildm.out
|
|
||||||
make -fmakefile.bor -B -DMODEL=l %1 %2 %3 libpng >buildl.out
|
|
||||||
43
scripts/libpng.icc
Normal file
43
scripts/libpng.icc
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
// Project file for libpng (static)
|
||||||
|
// IBM VisualAge/C++ version 4.0 or later
|
||||||
|
// Copyright (C) 2000 Cosmin Truta
|
||||||
|
// Notes:
|
||||||
|
// All modules are compiled in C mode
|
||||||
|
// Tested with IBM VAC++ 4.0 under Win32
|
||||||
|
// Expected to work with IBM VAC++ 4.0 or later under OS/2 and Win32
|
||||||
|
// Can be easily adapted for IBM VAC++ 4.0 or later under AIX
|
||||||
|
// For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
|
||||||
|
option incl(searchpath, "../zlib"), opt(level, "2"),
|
||||||
|
link(libsearchpath, "../zlib")
|
||||||
|
{
|
||||||
|
target type(lib) "libpng.lib"
|
||||||
|
{
|
||||||
|
source type(c) "png.c"
|
||||||
|
source type(c) "pngerror.c"
|
||||||
|
source type(c) "pngget.c"
|
||||||
|
source type(c) "pngmem.c"
|
||||||
|
source type(c) "pngpread.c"
|
||||||
|
source type(c) "pngread.c"
|
||||||
|
source type(c) "pngrio.c"
|
||||||
|
source type(c) "pngrtran.c"
|
||||||
|
source type(c) "pngrutil.c"
|
||||||
|
source type(c) "pngset.c"
|
||||||
|
source type(c) "pngtrans.c"
|
||||||
|
source type(c) "pngwio.c"
|
||||||
|
source type(c) "pngwrite.c"
|
||||||
|
source type(c) "pngwtran.c"
|
||||||
|
source type(c) "pngwutil.c"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
option incl(searchpath, "../zlib"), opt(level, "2"),
|
||||||
|
link(libsearchpath, "../zlib")
|
||||||
|
{
|
||||||
|
target type(exe) "pngtest.exe"
|
||||||
|
{
|
||||||
|
source type(c) "pngtest.c"
|
||||||
|
source type(lib) "libpng.lib"
|
||||||
|
source type(lib) "zlib.lib"
|
||||||
|
}
|
||||||
|
}
|
||||||
151
scripts/makefile.bc32
Normal file
151
scripts/makefile.bc32
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
# Makefile for libpng
|
||||||
|
# 32-bit Borland C++ (Note: All modules are compiled in C mode)
|
||||||
|
# To build the library, do:
|
||||||
|
# "make -fmakefile.bc32"
|
||||||
|
#
|
||||||
|
# ---------- 32-bit Borland C++ ----------
|
||||||
|
|
||||||
|
### Absolutely necessary for this makefile to work
|
||||||
|
.AUTODEPEND
|
||||||
|
|
||||||
|
## Where zlib.h, zconf.h and zlib.lib are
|
||||||
|
ZLIB_DIR=..\zlib
|
||||||
|
|
||||||
|
|
||||||
|
## Compiler, linker and lib stuff
|
||||||
|
CC=bcc32
|
||||||
|
LD=bcc32
|
||||||
|
LIB=tlib
|
||||||
|
|
||||||
|
#TARGET_CPU=6
|
||||||
|
# 3 = 386, 4 = 486, 5 = Pentium etc.
|
||||||
|
!ifndef TARGET_CPU
|
||||||
|
TARGET_CPU=5
|
||||||
|
!endif
|
||||||
|
|
||||||
|
# Use this if you don't want Borland's fancy exception handling
|
||||||
|
NOEHLIB=noeh32.lib
|
||||||
|
|
||||||
|
!ifdef DEBUG
|
||||||
|
CDEBUG=-v
|
||||||
|
LDEBUG=-v
|
||||||
|
!else
|
||||||
|
CDEBUG=
|
||||||
|
LDEBUG=
|
||||||
|
!endif
|
||||||
|
|
||||||
|
# STACKOFLOW=1
|
||||||
|
!ifdef STACKOFLOW
|
||||||
|
CDEBUG=$(CDEBUG) -N
|
||||||
|
LDEBUG=$(LDEBUG) -N
|
||||||
|
!endif
|
||||||
|
|
||||||
|
# -X- turn on dependency generation in the object file
|
||||||
|
# -w set all warnings on
|
||||||
|
# -O2 optimize for speed
|
||||||
|
# -Z global optimization
|
||||||
|
CFLAGS=-O2 -Z -X- -w -I$(ZLIB_DIR) -$(TARGET_CPU) $(CDEBUG)
|
||||||
|
|
||||||
|
# -M generate map file
|
||||||
|
LDFLAGS=-M -L$(ZLIB_DIR) $(LDEBUG)
|
||||||
|
|
||||||
|
|
||||||
|
## Variables
|
||||||
|
OBJS = \
|
||||||
|
png.obj \
|
||||||
|
pngerror.obj \
|
||||||
|
pngget.obj \
|
||||||
|
pngmem.obj \
|
||||||
|
pngpread.obj \
|
||||||
|
pngread.obj \
|
||||||
|
pngrio.obj \
|
||||||
|
pngrtran.obj \
|
||||||
|
pngrutil.obj \
|
||||||
|
pngset.obj \
|
||||||
|
pngtrans.obj \
|
||||||
|
pngwio.obj \
|
||||||
|
pngwrite.obj \
|
||||||
|
pngwtran.obj \
|
||||||
|
pngwutil.obj
|
||||||
|
|
||||||
|
LIBOBJS = \
|
||||||
|
+png.obj \
|
||||||
|
+pngerror.obj \
|
||||||
|
+pngget.obj \
|
||||||
|
+pngmem.obj \
|
||||||
|
+pngpread.obj \
|
||||||
|
+pngread.obj \
|
||||||
|
+pngrio.obj \
|
||||||
|
+pngrtran.obj \
|
||||||
|
+pngrutil.obj \
|
||||||
|
+pngset.obj \
|
||||||
|
+pngtrans.obj \
|
||||||
|
+pngwio.obj \
|
||||||
|
+pngwrite.obj \
|
||||||
|
+pngwtran.obj \
|
||||||
|
+pngwutil.obj
|
||||||
|
|
||||||
|
LIBNAME=libpng.lib
|
||||||
|
|
||||||
|
|
||||||
|
## Implicit rules
|
||||||
|
# Braces let make "batch" calls to the compiler,
|
||||||
|
# 2 calls instead of 12; space is important.
|
||||||
|
.c.obj:
|
||||||
|
$(CC) $(CFLAGS) -c {$*.c }
|
||||||
|
|
||||||
|
.c.exe:
|
||||||
|
$(CC) $(CFLAGS) $(LDFLAGS) $*.c $(LIBNAME) zlib.lib $(NOEHLIB)
|
||||||
|
|
||||||
|
.obj.exe:
|
||||||
|
$(LD) $(LDFLAGS) $*.obj $(LIBNAME) zlib.lib $(NOEHLIB)
|
||||||
|
|
||||||
|
|
||||||
|
## Major targets
|
||||||
|
all: libpng pngtest
|
||||||
|
|
||||||
|
libpng: $(LIBNAME)
|
||||||
|
|
||||||
|
pngtest: pngtest.exe
|
||||||
|
|
||||||
|
test: pngtest.exe
|
||||||
|
pngtest
|
||||||
|
|
||||||
|
|
||||||
|
## Minor Targets
|
||||||
|
|
||||||
|
png.obj: png.c
|
||||||
|
pngerror.obj: pngerror.c
|
||||||
|
pngget.obj: pngget.c
|
||||||
|
pngmem.obj: pngmem.c
|
||||||
|
pngpread.obj: pngpread.c
|
||||||
|
pngread.obj: pngread.c
|
||||||
|
pngrio.obj: pngrio.c
|
||||||
|
pngrtran.obj: pngrtran.c
|
||||||
|
pngrutil.obj: pngrutil.c
|
||||||
|
pngset.obj: pngset.c
|
||||||
|
pngtrans.obj: pngtrans.c
|
||||||
|
pngwio.obj: pngwio.c
|
||||||
|
pngwrite.obj: pngwrite.c
|
||||||
|
pngwtran.obj: pngwtran.c
|
||||||
|
pngwutil.obj: pngwutil.c
|
||||||
|
|
||||||
|
|
||||||
|
$(LIBNAME): $(OBJS)
|
||||||
|
-del $(LIBNAME)
|
||||||
|
$(LIB) $(LIBNAME) @&&|
|
||||||
|
$(LIBOBJS), libpng
|
||||||
|
|
|
||||||
|
|
||||||
|
|
||||||
|
# Clean up anything else you want
|
||||||
|
clean:
|
||||||
|
-del *.obj
|
||||||
|
-del *.exe
|
||||||
|
-del *.lib
|
||||||
|
-del *.lst
|
||||||
|
-del *.map
|
||||||
|
-del *.tds
|
||||||
|
|
||||||
|
|
||||||
|
# End of makefile for libpng
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
# Makefile for png32bd.dll
|
# Makefile for png32bd.dll
|
||||||
# ------------- Borland C++ 4.5 -------------
|
# ------------- 32-bit Borland C++ -------------
|
||||||
|
|
||||||
# This makefile expects to find zlib.h and zlib32bd.lib in the
|
# This makefile expects to find zlib.h and zlib32bd.lib in the
|
||||||
# $(ZLIBDIR) directory.
|
# $(ZLIBDIR) directory.
|
||||||
@@ -12,42 +12,65 @@
|
|||||||
# compress and uncompress functions, nor any of the gz... functions,
|
# compress and uncompress functions, nor any of the gz... functions,
|
||||||
# since libpng does not call them.
|
# since libpng does not call them.
|
||||||
|
|
||||||
ZLIBDIR=..\zlib112
|
.AUTODEPEND
|
||||||
|
|
||||||
|
ZLIBDIR=..\zlib
|
||||||
ZLIB=zlib32bd.lib
|
ZLIB=zlib32bd.lib
|
||||||
PNGDLL=png32bd.dll
|
PNGDLL=png32bd.dll
|
||||||
|
PNGLIB=png32bd.lib
|
||||||
|
|
||||||
CFLAGS= -ps -O2 -C -K -N- -k- -d -3 -r- -w-par -w-aus -WDE -I$(ZLIBDIR)
|
CC=bcc32
|
||||||
CC=f:\bc45\bin\bcc32
|
CFLAGS= -ps -O2 -N- -k- -d -r- -w-par -w-aus -I$(ZLIBDIR) \
|
||||||
LINKFLAGS= -Tpd -aa -c
|
-DPNG_NO_GLOBAL_ARRAYS #-DPNG_DEBUG=5
|
||||||
LINK=f:\bc45\bin\tlink32
|
#LINK=tlink32
|
||||||
LIBDIR=f:\bc45\lib
|
#LINK=ilink32
|
||||||
IMPLIB=f:\bc45\bin\implib
|
LINK=bcc32
|
||||||
|
#LINKFLAGS= -Tpd -aa -c
|
||||||
|
LINKFLAGS= -WDE
|
||||||
|
IMPLIB=implib
|
||||||
|
|
||||||
|
# Use this if you don't want Borland's fancy exception handling
|
||||||
|
NOEHLIB=noeh32.lib
|
||||||
|
|
||||||
.autodepend
|
|
||||||
.c.obj:
|
.c.obj:
|
||||||
$(CC) -c $(CFLAGS) $<
|
$(CC) -c $(CFLAGS) $<
|
||||||
|
|
||||||
OBJ1=png.obj pngerror.obj pngget.obj pngmem.obj pngpread.obj
|
.c.exe:
|
||||||
OBJ2=pngread.obj pngrio.obj pngrtran.obj pngrutil.obj pngset.obj
|
$(CC) $(CFLAGS) $< $(PNGLIB) $(NOEHLIB)
|
||||||
|
|
||||||
|
|
||||||
|
OBJ1=png.obj pngerror.obj pngget.obj pngmem.obj pngpread.obj
|
||||||
|
OBJ2=pngread.obj pngrio.obj pngrtran.obj pngrutil.obj pngset.obj
|
||||||
OBJ3=pngtrans.obj pngwio.obj pngwrite.obj pngwtran.obj pngwutil.obj
|
OBJ3=pngtrans.obj pngwio.obj pngwrite.obj pngwtran.obj pngwutil.obj
|
||||||
|
|
||||||
all: $(PNGDLL)
|
all: $(PNGDLL)
|
||||||
|
|
||||||
|
test: pngtest.exe
|
||||||
|
pngtest
|
||||||
|
|
||||||
|
|
||||||
$(PNGDLL): $(OBJ1) $(OBJ2) $(OBJ3) $(ZLIBDIR)\$(ZLIB)
|
$(PNGDLL): $(OBJ1) $(OBJ2) $(OBJ3) $(ZLIBDIR)\$(ZLIB)
|
||||||
$(LINK) @&&|
|
$(LINK) @&&|
|
||||||
$(LINKFLAGS) $(LIBDIR)\c0d32 +
|
$(LINKFLAGS)
|
||||||
$(OBJ1) +
|
-e$(PNGDLL)
|
||||||
$(OBJ2) +
|
$(OBJ1)
|
||||||
|
$(OBJ2)
|
||||||
$(OBJ3)
|
$(OBJ3)
|
||||||
$@
|
$(ZLIBDIR)\$(ZLIB)
|
||||||
-x
|
$(NOEHLIB)
|
||||||
$(ZLIBDIR)\$(ZLIB) $(LIBDIR)\import32 $(LIBDIR)\cw32
|
|
||||||
|,&&|
|
|
||||||
LIBRARY $(@B)
|
|
||||||
EXETYPE WINDOWS
|
|
||||||
CODE PRELOAD MOVEABLE DISCARDABLE
|
|
||||||
DATA PRELOAD MOVEABLE MULTIPLE
|
|
||||||
|
|
|
|
||||||
$(IMPLIB) -c $(@R).lib $@
|
$(IMPLIB) -c $(@R).lib $@
|
||||||
|
|
||||||
|
|
||||||
|
# Clean up anything else you want
|
||||||
|
clean:
|
||||||
|
-del *.obj
|
||||||
|
-del *.dll
|
||||||
|
-del *.exe
|
||||||
|
-del *.lib
|
||||||
|
-del *.lst
|
||||||
|
-del *.map
|
||||||
|
-del *.tds
|
||||||
|
|
||||||
|
|
||||||
# End of makefile for png32bd.dll
|
# End of makefile for png32bd.dll
|
||||||
@@ -31,7 +31,7 @@ RANLIB=ranlib
|
|||||||
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not
|
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not
|
||||||
# have to change it.
|
# have to change it.
|
||||||
PNGMAJ = 2
|
PNGMAJ = 2
|
||||||
PNGMIN = 1.0.5h
|
PNGMIN = 1.0.6f
|
||||||
PNGVER = $(PNGMAJ).$(PNGMIN)
|
PNGVER = $(PNGMAJ).$(PNGMIN)
|
||||||
|
|
||||||
# where make install puts libpng.a, libpng.so*, and png.h
|
# where make install puts libpng.a, libpng.so*, and png.h
|
||||||
|
|||||||
@@ -1,39 +1,38 @@
|
|||||||
# Makefile for libpng
|
# Makefile for libpng
|
||||||
# Borland C++ 4.5 (Note: All modules are compiled in C mode)
|
# 16-bit Borland C++ (Note: All modules are compiled in C mode)
|
||||||
# Will work with C++ 4.02 also
|
# To build the library, do:
|
||||||
# To build the library, do:
|
# "make -fmakefile.bor -DMODEL=c"
|
||||||
# "make -fmakefile.borland -DMODEL=m"
|
# or: "make -fmakefile.bor -DMODEL=l"
|
||||||
# or: "make -fmakefile.borland -DMODEL=l"
|
|
||||||
#
|
#
|
||||||
# ------------- Borland C++ 4.5 -------------
|
# ------------ Borland C++ ------------
|
||||||
|
|
||||||
### Absolutely necessary for this makefile to work
|
### Absolutely necessary for this makefile to work
|
||||||
.AUTODEPEND
|
.AUTODEPEND
|
||||||
|
|
||||||
## Useful user options
|
## Where zlib.h, zconf.h and zlib_MODEL.lib are
|
||||||
|
ZLIB_DIR=..\zlib
|
||||||
|
|
||||||
# Usually defined in builtins.mak or the environment
|
|
||||||
# Currently unused.
|
|
||||||
!ifndef BCROOT
|
|
||||||
BCROOT=N:\BC45
|
|
||||||
!endif
|
|
||||||
|
|
||||||
# Where zlib.h and zconf.h and zlib.lib are
|
## Compiler, linker and lib stuff
|
||||||
ZLIB_PATH=..\zlib
|
CC=bcc
|
||||||
|
LD=bcc
|
||||||
|
LIB=tlib
|
||||||
|
|
||||||
!ifndef MODEL
|
!ifndef MODEL
|
||||||
MODEL=l
|
MODEL=l
|
||||||
!endif
|
!endif
|
||||||
|
|
||||||
|
MODEL_ARG=-m$(MODEL)
|
||||||
|
|
||||||
#TARGET_CPU=3
|
#TARGET_CPU=3
|
||||||
# 2 = 286, 3 = 386, etc.
|
# 2 = 286, 3 = 386, etc.
|
||||||
!ifndef TARGET_CPU
|
!ifndef TARGET_CPU
|
||||||
TARGET_CPU=2
|
TARGET_CPU=2
|
||||||
!endif
|
!endif
|
||||||
|
|
||||||
|
# Use this if you don't want Borland's fancy exception handling
|
||||||
# Use this if you don't want Borland's fancy exception handling.
|
# (for Borland C++ 4.0 or later)
|
||||||
NOEHLIB=noeh$(MODEL).lib
|
#NOEHLIB=noeh$(MODEL).lib
|
||||||
|
|
||||||
!ifdef DEBUG
|
!ifdef DEBUG
|
||||||
CDEBUG=-v
|
CDEBUG=-v
|
||||||
@@ -49,59 +48,50 @@ CDEBUG=$(CDEBUG) -N
|
|||||||
LDEBUG=$(LDEBUG) -N
|
LDEBUG=$(LDEBUG) -N
|
||||||
!endif
|
!endif
|
||||||
|
|
||||||
|
# -X- turn on dependency generation in the object file
|
||||||
## Compiler, linker, and lib stuff
|
# -w set all warnings on
|
||||||
CC=bcc
|
|
||||||
LD=bcc
|
|
||||||
LIB=tlib
|
|
||||||
|
|
||||||
MODELARG=-m$(MODEL)
|
|
||||||
|
|
||||||
# -X- turns on dependency generation in the object file
|
|
||||||
# -w sets all warnings on
|
|
||||||
# -O2 optimize for speed
|
# -O2 optimize for speed
|
||||||
# -Z global optimization
|
# -Z global optimization
|
||||||
CFLAGS=-O2 -Z -X- -w -I$(ZLIB_PATH) -$(TARGET_CPU) $(MODELARG) $(CDEBUG)
|
CFLAGS=-O2 -Z -X- -w -I$(ZLIB_DIR) -$(TARGET_CPU) $(MODEL_ARG) $(CDEBUG)
|
||||||
|
|
||||||
# -M generate map file
|
# -M generate map file
|
||||||
LDFLAGS=-M $(LDEBUG)
|
LDFLAGS=-M -L$(ZLIB_DIR) $(MODEL_ARG) $(LDEBUG)
|
||||||
|
|
||||||
O=obj
|
|
||||||
|
|
||||||
## variables
|
## Variables
|
||||||
OBJS = \
|
OBJS = \
|
||||||
png.$(O) \
|
png.obj \
|
||||||
pngerror.$(O) \
|
pngerror.obj \
|
||||||
pngmem.$(O) \
|
pngget.obj \
|
||||||
pngpread.$(O) \
|
pngmem.obj \
|
||||||
pngset.$(O) \
|
pngpread.obj \
|
||||||
pngget.$(O) \
|
pngread.obj \
|
||||||
pngread.$(O) \
|
pngrio.obj \
|
||||||
pngrio.$(O) \
|
pngrtran.obj \
|
||||||
pngrtran.$(O) \
|
pngrutil.obj \
|
||||||
pngrutil.$(O) \
|
pngset.obj \
|
||||||
pngtrans.$(O) \
|
pngtrans.obj \
|
||||||
pngwrite.$(O) \
|
pngwio.obj \
|
||||||
pngwtran.$(O) \
|
pngwrite.obj \
|
||||||
pngwio.$(O) \
|
pngwtran.obj \
|
||||||
pngwutil.$(O)
|
pngwutil.obj
|
||||||
|
|
||||||
LIBOBJS = \
|
LIBOBJS = \
|
||||||
+png.$(O) \
|
+png.obj \
|
||||||
+pngerror.$(O) \
|
+pngerror.obj \
|
||||||
+pngmem.$(O) \
|
+pngget.obj \
|
||||||
+pngpread.$(O) \
|
+pngmem.obj \
|
||||||
+pngread.$(O) \
|
+pngpread.obj \
|
||||||
+pngset.$(O) \
|
+pngread.obj \
|
||||||
+pngget.$(O) \
|
+pngrio.obj \
|
||||||
+pngrio.$(O) \
|
+pngrtran.obj \
|
||||||
+pngrtran.$(O) \
|
+pngrutil.obj \
|
||||||
+pngrutil.$(O) \
|
+pngset.obj \
|
||||||
+pngtrans.$(O) \
|
+pngtrans.obj \
|
||||||
+pngwrite.$(O) \
|
+pngwio.obj \
|
||||||
+pngwtran.$(O) \
|
+pngwrite.obj \
|
||||||
+pngwio.$(O) \
|
+pngwtran.obj \
|
||||||
+pngwutil.$(O)
|
+pngwutil.obj
|
||||||
|
|
||||||
LIBNAME=libpng$(MODEL).lib
|
LIBNAME=libpng$(MODEL).lib
|
||||||
|
|
||||||
@@ -113,10 +103,12 @@ LIBNAME=libpng$(MODEL).lib
|
|||||||
$(CC) $(CFLAGS) -c {$*.c }
|
$(CC) $(CFLAGS) -c {$*.c }
|
||||||
|
|
||||||
.c.exe:
|
.c.exe:
|
||||||
$(CC) $(CFLAGS) $(LDFLAGS) $*.c
|
$(CC) $(CFLAGS) $(LDFLAGS) $*.c $(LIBNAME) zlib_$(MODEL).lib $(NOEHLIB)
|
||||||
|
|
||||||
|
|
||||||
## Major targets
|
## Major targets
|
||||||
|
all: libpng pngtest
|
||||||
|
|
||||||
libpng: $(LIBNAME)
|
libpng: $(LIBNAME)
|
||||||
|
|
||||||
pngtest: pngtest$(MODEL).exe
|
pngtest: pngtest$(MODEL).exe
|
||||||
@@ -128,17 +120,17 @@ test: pngtest$(MODEL).exe
|
|||||||
## Minor Targets
|
## Minor Targets
|
||||||
|
|
||||||
png.obj: png.c
|
png.obj: png.c
|
||||||
pngset.obj: pngset.c
|
pngerror.obj: pngerror.c
|
||||||
pngget.obj: pngget.c
|
pngget.obj: pngget.c
|
||||||
pngread.obj: pngread.c
|
pngmem.obj: pngmem.c
|
||||||
pngpread.obj: pngpread.c
|
pngpread.obj: pngpread.c
|
||||||
|
pngread.obj: pngread.c
|
||||||
|
pngrio.obj: pngrio.c
|
||||||
pngrtran.obj: pngrtran.c
|
pngrtran.obj: pngrtran.c
|
||||||
pngrutil.obj: pngrutil.c
|
pngrutil.obj: pngrutil.c
|
||||||
pngerror.obj: pngerror.c
|
pngset.obj: pngset.c
|
||||||
pngmem.obj: pngmem.c
|
|
||||||
pngrio.obj: pngrio.c
|
|
||||||
pngwio.obj: pngwio.c
|
|
||||||
pngtrans.obj: pngtrans.c
|
pngtrans.obj: pngtrans.c
|
||||||
|
pngwio.obj: pngwio.c
|
||||||
pngwrite.obj: pngwrite.c
|
pngwrite.obj: pngwrite.c
|
||||||
pngwtran.obj: pngwtran.c
|
pngwtran.obj: pngwtran.c
|
||||||
pngwutil.obj: pngwutil.c
|
pngwutil.obj: pngwutil.c
|
||||||
@@ -155,14 +147,16 @@ pngtest$(MODEL).obj: pngtest.c
|
|||||||
$(CC) $(CFLAGS) -opngtest$(MODEL) -c pngtest.c
|
$(CC) $(CFLAGS) -opngtest$(MODEL) -c pngtest.c
|
||||||
|
|
||||||
pngtest$(MODEL).exe: pngtest$(MODEL).obj
|
pngtest$(MODEL).exe: pngtest$(MODEL).obj
|
||||||
$(CC) $(MODELARG) $(LDFLAGS) -L$(ZLIB_PATH) pngtest$(MODEL).obj $(LIBNAME) zlib$(MODEL).lib $(NOEHLIB)
|
$(LD) $(LDFLAGS) pngtest$(MODEL).obj $(LIBNAME) zlib_$(MODEL).lib $(NOEHLIB)
|
||||||
|
|
||||||
|
|
||||||
# Clean up anything else you want
|
# Clean up anything else you want
|
||||||
clean:
|
clean:
|
||||||
-del *.obj
|
-del *.obj
|
||||||
|
-del *.exe
|
||||||
-del *.lib
|
-del *.lib
|
||||||
-del *.lst
|
-del *.lst
|
||||||
|
-del *.map
|
||||||
|
|
||||||
|
|
||||||
# End of makefile for libpng
|
# End of makefile for libpng
|
||||||
@@ -14,7 +14,7 @@ ZLIBINC=../zlib
|
|||||||
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not
|
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not
|
||||||
# have to change it.
|
# have to change it.
|
||||||
PNGMAJ = 2
|
PNGMAJ = 2
|
||||||
PNGMIN = 1.0.5h
|
PNGMIN = 1.0.6f
|
||||||
PNGVER = $(PNGMAJ).$(PNGMIN)
|
PNGVER = $(PNGMAJ).$(PNGMIN)
|
||||||
|
|
||||||
CC=cc
|
CC=cc
|
||||||
|
|||||||
66
scripts/makefile.gcc
Normal file
66
scripts/makefile.gcc
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
# makefile for libpng using gcc (generic, static library)
|
||||||
|
# Copyright (C) 1995 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
# Copyright (C) 2000 Cosmin Truta
|
||||||
|
# For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
|
||||||
|
# Location of the zlib library and include files
|
||||||
|
ZLIBINC = ../zlib
|
||||||
|
ZLIBLIB = ../zlib
|
||||||
|
|
||||||
|
# Compiler, linker, lib and other tools
|
||||||
|
CC = gcc
|
||||||
|
LD = $(CC)
|
||||||
|
AR = ar rcs
|
||||||
|
RANLIB = ranlib
|
||||||
|
RM = rm -f
|
||||||
|
|
||||||
|
CDEBUG = -g -DPNG_DEBUG=5
|
||||||
|
LDDEBUG =
|
||||||
|
CRELEASE = -O2
|
||||||
|
LDRELEASE = -s
|
||||||
|
CFLAGS = -I$(ZLIBINC) -Wall $(CRELEASE)
|
||||||
|
LDFLAGS = -L. -L$(ZLIBLIB) -lpng -lz -lm $(LDRELEASE)
|
||||||
|
|
||||||
|
# File extensions
|
||||||
|
O=.o
|
||||||
|
A=.a
|
||||||
|
E=
|
||||||
|
|
||||||
|
# Variables
|
||||||
|
OBJS = png$(O) pngerror$(O) pngget$(O) pngmem$(O) pngpread$(O) \
|
||||||
|
pngread$(O) pngrio$(O) pngrtran$(O) pngrutil$(O) pngset$(O) \
|
||||||
|
pngtrans$(O) pngwio$(O) pngwrite$(O) pngwtran$(O) pngwutil$(O)
|
||||||
|
|
||||||
|
# Targets
|
||||||
|
all: libpng$(A) pngtest$(E)
|
||||||
|
|
||||||
|
libpng$(A): $(OBJS)
|
||||||
|
$(AR) $@ $(OBJS)
|
||||||
|
$(RANLIB) $@
|
||||||
|
|
||||||
|
test: pngtest$(E)
|
||||||
|
./pngtest$(E)
|
||||||
|
|
||||||
|
pngtest$(E): pngtest$(O) libpng$(A)
|
||||||
|
$(LD) -o $@ pngtest$(O) $(LDFLAGS)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(RM) *$(O) libpng$(A) pngtest$(E) pngout.png
|
||||||
|
|
||||||
|
png$(O): png.h pngconf.h
|
||||||
|
pngerror$(O): png.h pngconf.h
|
||||||
|
pngget$(O): png.h pngconf.h
|
||||||
|
pngmem$(O): png.h pngconf.h
|
||||||
|
pngpread$(O): png.h pngconf.h
|
||||||
|
pngread$(O): png.h pngconf.h
|
||||||
|
pngrio$(O): png.h pngconf.h
|
||||||
|
pngrtran$(O): png.h pngconf.h
|
||||||
|
pngrutil$(O): png.h pngconf.h
|
||||||
|
pngset$(O): png.h pngconf.h
|
||||||
|
pngtest$(O): png.h pngconf.h
|
||||||
|
pngtrans$(O): png.h pngconf.h
|
||||||
|
pngwio$(O): png.h pngconf.h
|
||||||
|
pngwrite$(O): png.h pngconf.h
|
||||||
|
pngwtran$(O): png.h pngconf.h
|
||||||
|
pngwutil$(O): png.h pngconf.h
|
||||||
|
|
||||||
126
scripts/makefile.gcmmx
Normal file
126
scripts/makefile.gcmmx
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
# makefile for libpng on Linux ELF with gcc using MMX assembler code
|
||||||
|
# Copyright (C) 1996, 1997 Andreas Dilger
|
||||||
|
# Copyright (C) 1998-2000 Greg Roelofs
|
||||||
|
# For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
|
||||||
|
CC=gcc
|
||||||
|
|
||||||
|
# where "make install" puts libpng.a, libpng.so*, png.h and pngconf.h
|
||||||
|
prefix=/usr/local
|
||||||
|
|
||||||
|
# Where the zlib library and include files are located
|
||||||
|
#ZLIBLIB=/usr/local/lib
|
||||||
|
#ZLIBINC=/usr/local/include
|
||||||
|
ZLIBLIB=../zlib
|
||||||
|
ZLIBINC=../zlib
|
||||||
|
|
||||||
|
ALIGN=
|
||||||
|
# for i386:
|
||||||
|
#ALIGN=-malign-loops=2 -malign-functions=2
|
||||||
|
|
||||||
|
WARNMORE=-Wwrite-strings -Wpointer-arith -Wshadow \
|
||||||
|
-Wmissing-declarations -Wtraditional -Wcast-align \
|
||||||
|
-Wstrict-prototypes -Wmissing-prototypes #-Wconversion
|
||||||
|
|
||||||
|
# for pgcc version 2.95.1, -O3 is buggy; don't use it.
|
||||||
|
|
||||||
|
CFLAGS=-DPNG_USE_PNGGCCRD -I$(ZLIBINC) -Wall -O3 $(ALIGN) -funroll-loops \
|
||||||
|
-fomit-frame-pointer # $(WARNMORE) -g -DPNG_DEBUG=5
|
||||||
|
LDFLAGS=-L. -Wl,-rpath,. -L$(ZLIBLIB) -Wl,-rpath,$(ZLIBLIB) -lpng -lz -lm
|
||||||
|
|
||||||
|
RANLIB=ranlib
|
||||||
|
#RANLIB=echo
|
||||||
|
|
||||||
|
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not
|
||||||
|
# have to change it.
|
||||||
|
PNGMAJ = 2
|
||||||
|
PNGMIN = 1.0.6f
|
||||||
|
PNGVER = $(PNGMAJ).$(PNGMIN)
|
||||||
|
|
||||||
|
INCPATH=$(prefix)/include
|
||||||
|
LIBPATH=$(prefix)/lib
|
||||||
|
|
||||||
|
OBJS = png.o pngset.o pngget.o pngrutil.o pngtrans.o pngwutil.o \
|
||||||
|
pngread.o pngrio.o pngwio.o pngwrite.o pngrtran.o \
|
||||||
|
pngwtran.o pngmem.o pngerror.o pngpread.o pnggccrd.o
|
||||||
|
|
||||||
|
OBJSDLL = $(OBJS:.o=.pic.o)
|
||||||
|
|
||||||
|
.SUFFIXES: .c .o .pic.o
|
||||||
|
|
||||||
|
.c.pic.o:
|
||||||
|
$(CC) -c $(CFLAGS) -fPIC -o $@ $*.c
|
||||||
|
|
||||||
|
all: libpng.a libpng.so pngtest
|
||||||
|
|
||||||
|
pnggccrd.o: png.h pngconf.h pngasmrd.h
|
||||||
|
@echo ""
|
||||||
|
@echo ' You can ignore the single "control reaches end of non-void function"'
|
||||||
|
@echo ' warning and multiple "<variable> defined but not used" warnings:'
|
||||||
|
@echo ""
|
||||||
|
$(CC) -c $(CFLAGS) -o $@ $*.c
|
||||||
|
|
||||||
|
pnggccrd.pic.o: png.h pngconf.h pngasmrd.h
|
||||||
|
@echo ""
|
||||||
|
@echo ' You can ignore the single "control reaches end of non-void function"'
|
||||||
|
@echo ' warning and multiple "<variable> defined but not used" warnings:'
|
||||||
|
@echo ""
|
||||||
|
$(CC) -c $(CFLAGS) -fPIC -o $@ pnggccrd.c
|
||||||
|
|
||||||
|
libpng.a: $(OBJS)
|
||||||
|
ar rc $@ $(OBJS)
|
||||||
|
$(RANLIB) $@
|
||||||
|
|
||||||
|
libpng.so: libpng.so.$(PNGMAJ)
|
||||||
|
ln -sf libpng.so.$(PNGMAJ) libpng.so
|
||||||
|
|
||||||
|
libpng.so.$(PNGMAJ): libpng.so.$(PNGVER)
|
||||||
|
ln -sf libpng.so.$(PNGVER) libpng.so.$(PNGMAJ)
|
||||||
|
|
||||||
|
libpng.so.$(PNGVER): $(OBJSDLL)
|
||||||
|
$(CC) -shared -Wl,-soname,libpng.so.$(PNGMAJ) -o libpng.so.$(PNGVER) \
|
||||||
|
$(OBJSDLL) -L$(ZLIBLIB) -lz -lm -lc
|
||||||
|
|
||||||
|
pngtest: pngtest.o libpng.so
|
||||||
|
$(CC) -o pngtest $(CFLAGS) pngtest.o $(LDFLAGS)
|
||||||
|
|
||||||
|
test: pngtest
|
||||||
|
./pngtest
|
||||||
|
|
||||||
|
install: libpng.a libpng.so.$(PNGVER)
|
||||||
|
-@if [ ! -d $(INCPATH) ]; then mkdir $(INCPATH); fi
|
||||||
|
-@if [ ! -d $(LIBPATH) ]; then mkdir $(LIBPATH); fi
|
||||||
|
cp png.h pngconf.h $(INCPATH)
|
||||||
|
chmod 644 $(INCPATH)/png.h $(INCPATH)/pngconf.h
|
||||||
|
cp libpng.a libpng.so.$(PNGVER) $(LIBPATH)
|
||||||
|
chmod 755 $(LIBPATH)/libpng.so.$(PNGVER)
|
||||||
|
-@/bin/rm -f $(LIBPATH)/libpng.so.$(PNGMAJ) $(LIBPATH)/libpng.so
|
||||||
|
(cd $(LIBPATH); ln -sf libpng.so.$(PNGVER) libpng.so.$(PNGMAJ); \
|
||||||
|
ln -sf libpng.so.$(PNGMAJ) libpng.so)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
/bin/rm -f *.o libpng.a libpng.so* pngtest pngout.png
|
||||||
|
|
||||||
|
DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO
|
||||||
|
writelock:
|
||||||
|
chmod a-w *.[ch35] $(DOCS) scripts/*
|
||||||
|
|
||||||
|
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||||
|
|
||||||
|
png.o png.pic.o: png.h pngconf.h
|
||||||
|
pngerror.o pngerror.pic.o: png.h pngconf.h
|
||||||
|
pngrio.o pngrio.pic.o: png.h pngconf.h
|
||||||
|
pngwio.o pngwio.pic.o: png.h pngconf.h
|
||||||
|
pngmem.o pngmem.pic.o: png.h pngconf.h
|
||||||
|
pngset.o pngset.pic.o: png.h pngconf.h
|
||||||
|
pngget.o pngget.pic.o: png.h pngconf.h
|
||||||
|
pngread.o pngread.pic.o: png.h pngconf.h
|
||||||
|
pngrtran.o pngrtran.pic.o: png.h pngconf.h
|
||||||
|
pngrutil.o pngrutil.pic.o: png.h pngconf.h
|
||||||
|
pngtrans.o pngtrans.pic.o: png.h pngconf.h
|
||||||
|
pngwrite.o pngwrite.pic.o: png.h pngconf.h
|
||||||
|
pngwtran.o pngwtran.pic.o: png.h pngconf.h
|
||||||
|
pngwutil.o pngwutil.pic.o: png.h pngconf.h
|
||||||
|
pngpread.o pngpread.pic.o: png.h pngconf.h
|
||||||
|
|
||||||
|
pngtest.o: png.h pngconf.h
|
||||||
71
scripts/makefile.ibmc
Normal file
71
scripts/makefile.ibmc
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
# Makefile for libpng (static)
|
||||||
|
# IBM C version 3.x for Win32 and OS/2
|
||||||
|
# Copyright (C) 2000 Cosmin Truta
|
||||||
|
# Notes:
|
||||||
|
# Derived from makefile.std
|
||||||
|
# All modules are compiled in C mode
|
||||||
|
# Tested with IBM C 3.6.5 under Win32, expected to work under OS/2 too
|
||||||
|
# Can be easily adapted for IBM VisualAge/C++ for AIX
|
||||||
|
# For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
|
||||||
|
# Location of the zlib library and include files
|
||||||
|
ZLIBINC = ../zlib
|
||||||
|
ZLIBLIB = ../zlib
|
||||||
|
|
||||||
|
# Compiler, linker, lib and other tools
|
||||||
|
CC = icc
|
||||||
|
LD = ilink
|
||||||
|
AR = ilib
|
||||||
|
RM = del
|
||||||
|
|
||||||
|
CFLAGS = -I$(ZLIBINC) -O2 -W3
|
||||||
|
LDFLAGS =
|
||||||
|
|
||||||
|
# File extensions
|
||||||
|
O=.obj
|
||||||
|
A=.lib
|
||||||
|
E=.exe
|
||||||
|
|
||||||
|
# Variables
|
||||||
|
OBJS = png$(O) pngerror$(O) pngget$(O) pngmem$(O) pngpread$(O) \
|
||||||
|
pngread$(O) pngrio$(O) pngrtran$(O) pngrutil$(O) pngset$(O) \
|
||||||
|
pngtrans$(O) pngwio$(O) pngwrite$(O) pngwtran$(O) pngwutil$(O)
|
||||||
|
|
||||||
|
LIBS = libpng$(A) $(ZLIBLIB)/zlib$(A)
|
||||||
|
|
||||||
|
# Targets
|
||||||
|
all: libpng$(A) pngtest$(E)
|
||||||
|
|
||||||
|
libpng$(A): $(OBJS)
|
||||||
|
$(AR) -out:$@ $(OBJS)
|
||||||
|
|
||||||
|
test: pngtest$(E)
|
||||||
|
pngtest$(E)
|
||||||
|
|
||||||
|
pngtest: pngtest$(E)
|
||||||
|
|
||||||
|
pngtest$(E): pngtest$(O) libpng$(A)
|
||||||
|
$(LD) $(LDFLAGS) pngtest$(O) $(LIBS)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(RM) *$(O)
|
||||||
|
$(RM) libpng$(A)
|
||||||
|
$(RM) pngtest$(E)
|
||||||
|
$(RM) pngout.png
|
||||||
|
|
||||||
|
png$(O): png.h pngconf.h
|
||||||
|
pngerror$(O): png.h pngconf.h
|
||||||
|
pngget$(O): png.h pngconf.h
|
||||||
|
pngmem$(O): png.h pngconf.h
|
||||||
|
pngpread$(O): png.h pngconf.h
|
||||||
|
pngread$(O): png.h pngconf.h
|
||||||
|
pngrio$(O): png.h pngconf.h
|
||||||
|
pngrtran$(O): png.h pngconf.h
|
||||||
|
pngrutil$(O): png.h pngconf.h
|
||||||
|
pngset$(O): png.h pngconf.h
|
||||||
|
pngtest$(O): png.h pngconf.h
|
||||||
|
pngtrans$(O): png.h pngconf.h
|
||||||
|
pngwio$(O): png.h pngconf.h
|
||||||
|
pngwrite$(O): png.h pngconf.h
|
||||||
|
pngwtran$(O): png.h pngconf.h
|
||||||
|
pngwutil$(O): png.h pngconf.h
|
||||||
@@ -34,7 +34,7 @@ RANLIB=ranlib
|
|||||||
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not
|
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not
|
||||||
# have to change it.
|
# have to change it.
|
||||||
PNGMAJ = 2
|
PNGMAJ = 2
|
||||||
PNGMIN = 1.0.5h
|
PNGMIN = 1.0.6f
|
||||||
PNGVER = $(PNGMAJ).$(PNGMIN)
|
PNGVER = $(PNGMAJ).$(PNGMIN)
|
||||||
|
|
||||||
INCPATH=$(prefix)/include
|
INCPATH=$(prefix)/include
|
||||||
@@ -74,7 +74,8 @@ test: pngtest
|
|||||||
./pngtest
|
./pngtest
|
||||||
|
|
||||||
install: libpng.a libpng.so.$(PNGVER)
|
install: libpng.a libpng.so.$(PNGVER)
|
||||||
-@mkdir $(INCPATH) $(LIBPATH)
|
-@if [ ! -d $(INCPATH) ]; then mkdir $(INCPATH); fi
|
||||||
|
-@if [ ! -d $(LIBPATH) ]; then mkdir $(LIBPATH); fi
|
||||||
cp png.h pngconf.h $(INCPATH)
|
cp png.h pngconf.h $(INCPATH)
|
||||||
chmod 644 $(INCPATH)/png.h $(INCPATH)/pngconf.h
|
chmod 644 $(INCPATH)/png.h $(INCPATH)/pngconf.h
|
||||||
cp libpng.a libpng.so.$(PNGVER) $(LIBPATH)
|
cp libpng.a libpng.so.$(PNGVER) $(LIBPATH)
|
||||||
|
|||||||
@@ -4,8 +4,8 @@
|
|||||||
# Assumes that zlib.lib, zconf.h, and zlib.h have been copied to ..\zlib
|
# Assumes that zlib.lib, zconf.h, and zlib.h have been copied to ..\zlib
|
||||||
|
|
||||||
# -------- Microsoft C 5.1 and later, does not use assembler code -----
|
# -------- Microsoft C 5.1 and later, does not use assembler code -----
|
||||||
MODEL=-AL
|
MODEL=L
|
||||||
CFLAGS=-Oait -Gs -nologo -W3 $(MODEL) -I..\zlib
|
CFLAGS=-Oait -Gs -nologo -W3 -A$(MODEL) -I..\zlib
|
||||||
#-Ox generates bad code with MSC 5.1
|
#-Ox generates bad code with MSC 5.1
|
||||||
CC=cl
|
CC=cl
|
||||||
LD=link
|
LD=link
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ RANLIB=echo
|
|||||||
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not
|
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not
|
||||||
# have to change it.
|
# have to change it.
|
||||||
PNGMAJ = 2
|
PNGMAJ = 2
|
||||||
PNGMIN = 1.0.5h
|
PNGMIN = 1.0.6f
|
||||||
PNGVER = $(PNGMAJ).$(PNGMIN)
|
PNGVER = $(PNGMAJ).$(PNGMIN)
|
||||||
|
|
||||||
INCPATH=$(prefix)/include
|
INCPATH=$(prefix)/include
|
||||||
|
|||||||
90
scripts/makefile.sggcc
Normal file
90
scripts/makefile.sggcc
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
# makefile for libpng, SGI IRIX with gcc
|
||||||
|
# Copyright (C) 1995 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
# For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
|
||||||
|
# where make install puts libpng.a and png.h
|
||||||
|
prefix=/usr/local
|
||||||
|
|
||||||
|
# Where the zlib library and include files are located
|
||||||
|
ZLIBLIB=/usr/local/lib32
|
||||||
|
ZLIBINC=/usr/local/include
|
||||||
|
#ZLIBLIB=../zlib
|
||||||
|
#ZLIBINC=../zlib
|
||||||
|
|
||||||
|
CC=gcc
|
||||||
|
|
||||||
|
WARNMORE=
|
||||||
|
CFLAGS=-I$(ZLIBINC) -O2 $(WARNMORE) -fPIC -mabi=n32 # -g -DPNG_DEBUG=5
|
||||||
|
# zlib must also be compiled with n32
|
||||||
|
LDFLAGS=-L. -L$(ZLIBLIB) -lpng -lz -lm
|
||||||
|
LDSHARED=gcc -shared
|
||||||
|
|
||||||
|
VER=1.0.6f
|
||||||
|
LIBS=libpng.so.1.0.6f
|
||||||
|
SHAREDLIB=libpng.so
|
||||||
|
libdir=$(prefix)/lib32
|
||||||
|
|
||||||
|
RANLIB=echo
|
||||||
|
#RANLIB=ranlib
|
||||||
|
|
||||||
|
OBJS = png.o pngset.o pngget.o pngrutil.o pngtrans.o pngwutil.o \
|
||||||
|
pngread.o pngrio.o pngwio.o pngwrite.o pngrtran.o \
|
||||||
|
pngwtran.o pngmem.o pngerror.o pngpread.o
|
||||||
|
|
||||||
|
all: libpng.a $(SHAREDLIB).$(VER) pngtest
|
||||||
|
|
||||||
|
libpng.a: $(OBJS)
|
||||||
|
ar rc $@ $(OBJS)
|
||||||
|
$(RANLIB) $@
|
||||||
|
|
||||||
|
$(SHAREDLIB).$(VER): $(OBJS)
|
||||||
|
$(LDSHARED) -o $@ $(OBJS)
|
||||||
|
rm -f $(SHAREDLIB) $(SHAREDLIB).1
|
||||||
|
ln -s $@ $(SHAREDLIB)
|
||||||
|
ln -s $@ $(SHAREDLIB).1
|
||||||
|
|
||||||
|
pngtest: pngtest.o libpng.a
|
||||||
|
$(CC) -o pngtest $(CFLAGS) pngtest.o $(LDFLAGS)
|
||||||
|
|
||||||
|
test: pngtest
|
||||||
|
./pngtest
|
||||||
|
|
||||||
|
install: libpng.a
|
||||||
|
-@mkdir $(prefix)/include
|
||||||
|
-@mkdir $(prefix)/lib
|
||||||
|
cp png.h $(prefix)/include
|
||||||
|
cp pngconf.h $(prefix)/include
|
||||||
|
chmod 644 $(prefix)/include/png.h
|
||||||
|
chmod 644 $(prefix)/include/pngconf.h
|
||||||
|
cp libpng.a $(prefix)/lib
|
||||||
|
chmod 644 $(prefix)/lib/libpng.a
|
||||||
|
cp $(SHAREDLIB).$(VER) $(libdir); chmod 755 $(SHAREDLIB).$(VER)
|
||||||
|
cd $(libdir); if test -f $(SHAREDLIB).$(VER); then \
|
||||||
|
rm -f $(SHAREDLIB) $(SHAREDLIB).1; \
|
||||||
|
ln -s $(SHAREDLIB).$(VER) $(SHAREDLIB); \
|
||||||
|
ln -s $(SHAREDLIB).$(VER) $(SHAREDLIB).1; \
|
||||||
|
(ldconfig || true) >/dev/null 2>&1; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.o libpng.a pngtest pngout.png
|
||||||
|
|
||||||
|
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||||
|
|
||||||
|
png.o: png.h pngconf.h
|
||||||
|
pngerror.o: png.h pngconf.h
|
||||||
|
pngrio.o: png.h pngconf.h
|
||||||
|
pngwio.o: png.h pngconf.h
|
||||||
|
pngmem.o: png.h pngconf.h
|
||||||
|
pngset.o: png.h pngconf.h
|
||||||
|
pngget.o: png.h pngconf.h
|
||||||
|
pngread.o: png.h pngconf.h
|
||||||
|
pngrtran.o: png.h pngconf.h
|
||||||
|
pngrutil.o: png.h pngconf.h
|
||||||
|
pngtest.o: png.h pngconf.h
|
||||||
|
pngtrans.o: png.h pngconf.h
|
||||||
|
pngwrite.o: png.h pngconf.h
|
||||||
|
pngwtran.o: png.h pngconf.h
|
||||||
|
pngwutil.o: png.h pngconf.h
|
||||||
|
pngpread.o: png.h pngconf.h
|
||||||
|
|
||||||
@@ -6,17 +6,6 @@
|
|||||||
|
|
||||||
CC=gcc
|
CC=gcc
|
||||||
|
|
||||||
case "`type ld`" in *ucb*) echo "
|
|
||||||
# WARNING:
|
|
||||||
# The commands "CC" and "LD" must NOT refer to /usr/ucb/cc and
|
|
||||||
# /usr/ucb/ld. If they do, you need to adjust your PATH environment
|
|
||||||
# variable to put /usr/ccs/bin ahead of /usr/ucb. The environment
|
|
||||||
# variable LD_LIBRARY_PATH should not be set at all. If it is,
|
|
||||||
# things are likely to break because of the libucb dependency that
|
|
||||||
# is created.
|
|
||||||
" ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# Where make install puts libpng.a, libpng.so*, and png.h
|
# Where make install puts libpng.a, libpng.so*, and png.h
|
||||||
prefix=/usr/local
|
prefix=/usr/local
|
||||||
|
|
||||||
@@ -42,7 +31,7 @@ RANLIB=echo
|
|||||||
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not
|
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not
|
||||||
# have to change it.
|
# have to change it.
|
||||||
PNGMAJ = 2
|
PNGMAJ = 2
|
||||||
PNGMIN = 1.0.5h
|
PNGMIN = 1.0.6f
|
||||||
PNGVER = $(PNGMAJ).$(PNGMIN)
|
PNGVER = $(PNGMAJ).$(PNGMIN)
|
||||||
|
|
||||||
INCPATH=$(prefix)/include
|
INCPATH=$(prefix)/include
|
||||||
@@ -72,6 +61,18 @@ libpng.so.$(PNGMAJ): libpng.so.$(PNGVER)
|
|||||||
ln -f -s libpng.so.$(PNGVER) libpng.so.$(PNGMAJ)
|
ln -f -s libpng.so.$(PNGVER) libpng.so.$(PNGMAJ)
|
||||||
|
|
||||||
libpng.so.$(PNGVER): $(OBJSDLL)
|
libpng.so.$(PNGVER): $(OBJSDLL)
|
||||||
|
@case "`type ld`" in *ucb*) \
|
||||||
|
echo; \
|
||||||
|
echo '## WARNING:'; \
|
||||||
|
echo '## The commands "CC" and "LD" must NOT refer to /usr/ucb/cc'; \
|
||||||
|
echo '## and /usr/ucb/ld. If they do, you need to adjust your PATH'; \
|
||||||
|
echo '## environment variable to put /usr/ccs/bin ahead of /usr/ucb.'; \
|
||||||
|
echo '## The environment variable LD_LIBRARY_PATH should not be set'; \
|
||||||
|
echo '## at all. If it is, things are likely to break because of'; \
|
||||||
|
echo '## the libucb dependency that is created.'; \
|
||||||
|
echo; \
|
||||||
|
;; \
|
||||||
|
esac
|
||||||
$(LD) -G -L$(ZLIBLIB) -R$(ZLIBLIB) -h libpng.so.$(PNGMAJ) \
|
$(LD) -G -L$(ZLIBLIB) -R$(ZLIBLIB) -h libpng.so.$(PNGMAJ) \
|
||||||
-o libpng.so.$(PNGVER) $(OBJSDLL) -lz
|
-o libpng.so.$(PNGVER) $(OBJSDLL) -lz
|
||||||
|
|
||||||
|
|||||||
@@ -1,15 +1,17 @@
|
|||||||
# Makefile for libpng
|
# Makefile for libpng
|
||||||
# TurboC++ 3.0 (Note: All modules are compiled in C mode)
|
# TurboC/C++ (Note: All modules are compiled in C mode)
|
||||||
|
|
||||||
# To use, do "make -fmakefile.turboc3"
|
# To use, do "make -fmakefile.tc3"
|
||||||
|
|
||||||
# ------------- Turbo C++ 3.0 -------------
|
# ------ Turbo C 3.00 (can be modified to work with earlier versions)------
|
||||||
MODEL=-ml
|
|
||||||
CFLAGS=-O2 -Z $(MODEL) -I..\zlib
|
MODEL=l
|
||||||
|
CFLAGS=-O2 -Z -m$(MODEL) -I..\zlib
|
||||||
|
#CFLAGS=-D_NO_PROTO -O2 -Z -m$(MODEL) -I..\zlib # Turbo C older than 3.00
|
||||||
CC=tcc
|
CC=tcc
|
||||||
LD=tcc
|
LD=tcc
|
||||||
LIB=tlib
|
LIB=tlib
|
||||||
LDFLAGS=$(MODEL) -L..\zlib
|
LDFLAGS=-m$(MODEL) -L..\zlib
|
||||||
O=.obj
|
O=.obj
|
||||||
E=.exe
|
E=.exe
|
||||||
|
|
||||||
@@ -21,7 +23,12 @@ OBJSL1 = +png$(O) +pngset$(O) +pngget$(O) +pngrutil$(O) +pngtrans$(O)
|
|||||||
OBJSL2 = +pngwutil$(O) +pngmem$(O) +pngpread$(O) +pngread$(O) +pngerror$(O)
|
OBJSL2 = +pngwutil$(O) +pngmem$(O) +pngpread$(O) +pngread$(O) +pngerror$(O)
|
||||||
OBJSL3 = +pngwrite$(O) +pngrtran$(O) +pngwtran$(O) +pngrio$(O) +pngwio$(O)
|
OBJSL3 = +pngwrite$(O) +pngrtran$(O) +pngwtran$(O) +pngrio$(O) +pngwio$(O)
|
||||||
|
|
||||||
all: libpng.lib pngtest.exe
|
all: libpng$(MODEL).lib pngtest$(E)
|
||||||
|
|
||||||
|
pngtest: pngtest$(E)
|
||||||
|
|
||||||
|
test: pngtest$(E)
|
||||||
|
pngtest$(E)
|
||||||
|
|
||||||
png$(O): png.h pngconf.h
|
png$(O): png.h pngconf.h
|
||||||
$(CC) -c $(CFLAGS) $*.c
|
$(CC) -c $(CFLAGS) $*.c
|
||||||
@@ -71,12 +78,12 @@ pngwtran$(O): png.h pngconf.h
|
|||||||
pngwutil$(O): png.h pngconf.h
|
pngwutil$(O): png.h pngconf.h
|
||||||
$(CC) -c $(CFLAGS) $*.c
|
$(CC) -c $(CFLAGS) $*.c
|
||||||
|
|
||||||
libpng.lib: $(OBJS1) $(OBJS2) $(OBJS3)
|
libpng$(MODEL).lib: $(OBJS1) $(OBJS2) $(OBJS3)
|
||||||
$(LIB) libpng +$(OBJSL1)
|
$(LIB) libpng$(MODEL) +$(OBJSL1)
|
||||||
$(LIB) libpng +$(OBJSL2)
|
$(LIB) libpng$(MODEL) +$(OBJSL2)
|
||||||
$(LIB) libpng +$(OBJSL3)
|
$(LIB) libpng$(MODEL) +$(OBJSL3)
|
||||||
|
|
||||||
pngtest$(E): pngtest$(O) libpng.lib
|
pngtest$(E): pngtest$(O) libpng$(MODEL).lib
|
||||||
$(CC) $(LDFLAGS) pngtest.obj libpng.lib zlib.lib
|
$(LD) $(LDFLAGS) pngtest.obj libpng$(MODEL).lib zlib_$(MODEL).lib
|
||||||
|
|
||||||
# End of makefile for libpng
|
# End of makefile for libpng
|
||||||
@@ -11,7 +11,6 @@
|
|||||||
|
|
||||||
# If you don't want to use assembler code, use makefile.vcwin32 instead.
|
# If you don't want to use assembler code, use makefile.vcwin32 instead.
|
||||||
|
|
||||||
MODEL=-
|
|
||||||
CFLAGS=-DPNG_USE_PNGVCRD -Ox -GA3s -nologo -W3 -I..\zlib
|
CFLAGS=-DPNG_USE_PNGVCRD -Ox -GA3s -nologo -W3 -I..\zlib
|
||||||
|
|
||||||
CC=cl
|
CC=cl
|
||||||
@@ -81,6 +80,7 @@ pngwutil$(O): png.h pngconf.h
|
|||||||
$(CC) -c $(CFLAGS) $*.c $(ERRFILE)
|
$(CC) -c $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
libpng.lib: $(OBJS1) $(OBJS2) $(OBJS3)
|
libpng.lib: $(OBJS1) $(OBJS2) $(OBJS3)
|
||||||
|
echo something to del > libpng.lib
|
||||||
del libpng.lib
|
del libpng.lib
|
||||||
lib /OUT:libpng.lib $(OBJS1) $(OBJS2) $(OBJS3)
|
lib /OUT:libpng.lib $(OBJS1) $(OBJS2) $(OBJS3)
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
# ---------- Microsoft Visual C++ 4.0 and later, no assembler code------
|
# ---------- Microsoft Visual C++ 4.0 and later, no assembler code------
|
||||||
# If you want to use assembler code, use makefile.vcawin32 instead.
|
# If you want to use assembler code, use makefile.vcawin32 instead.
|
||||||
|
|
||||||
MODEL=-
|
|
||||||
CFLAGS= -Ox -GA3s -nologo -W3 -I..\zlib
|
CFLAGS= -Ox -GA3s -nologo -W3 -I..\zlib
|
||||||
|
|
||||||
CC=cl
|
CC=cl
|
||||||
@@ -74,6 +73,7 @@ pngwutil$(O): png.h pngconf.h
|
|||||||
$(CC) -c $(CFLAGS) $*.c $(ERRFILE)
|
$(CC) -c $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
libpng.lib: $(OBJS1) $(OBJS2) $(OBJS3)
|
libpng.lib: $(OBJS1) $(OBJS2) $(OBJS3)
|
||||||
|
echo something to del > libpng.lib
|
||||||
del libpng.lib
|
del libpng.lib
|
||||||
lib /OUT:libpng.lib $(OBJS1) $(OBJS2) $(OBJS3)
|
lib /OUT:libpng.lib $(OBJS1) $(OBJS2) $(OBJS3)
|
||||||
|
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ unit pngdef;
|
|||||||
interface
|
interface
|
||||||
|
|
||||||
const
|
const
|
||||||
PNG_LIBPNG_VER_STRING = '1.0.5h';
|
PNG_LIBPNG_VER_STRING = '1.0.6f';
|
||||||
PNG_LIBPNG_VER = 10006;
|
PNG_LIBPNG_VER = 10007;
|
||||||
|
|
||||||
type
|
type
|
||||||
png_uint_32 = Cardinal;
|
png_uint_32 = Cardinal;
|
||||||
@@ -56,6 +56,9 @@ type
|
|||||||
png_write_status_ptr = procedure(png_ptr: Pointer;
|
png_write_status_ptr = procedure(png_ptr: Pointer;
|
||||||
row_number: png_uint_32; pass: int);
|
row_number: png_uint_32; pass: int);
|
||||||
stdcall;
|
stdcall;
|
||||||
|
png_user_chunk_ptr = procedure(png_ptr: Pointer;
|
||||||
|
data: png_unknown_chunkp);
|
||||||
|
stdcall;
|
||||||
png_user_transform_ptr = procedure(png_ptr: Pointer;
|
png_user_transform_ptr = procedure(png_ptr: Pointer;
|
||||||
row_info: Pointer; data: png_bytep);
|
row_info: Pointer; data: png_bytep);
|
||||||
stdcall;
|
stdcall;
|
||||||
@@ -360,6 +363,9 @@ function png_get_rgb_to_gray_status(png_ptr: png_structp);
|
|||||||
function png_get_rowbytes(png_ptr: png_structp; info_ptr: png_infop):
|
function png_get_rowbytes(png_ptr: png_structp; info_ptr: png_infop):
|
||||||
png_uint_32;
|
png_uint_32;
|
||||||
stdcall;
|
stdcall;
|
||||||
|
function png_get_rows(png_ptr: png_structp; info_ptr: png_infop):
|
||||||
|
png_bytepp;
|
||||||
|
stdcall;
|
||||||
function png_get_sBIT(png_ptr: png_structp; info_ptr: png_infop;
|
function png_get_sBIT(png_ptr: png_structp; info_ptr: png_infop;
|
||||||
var sig_bits: png_color_8p): png_uint_32;
|
var sig_bits: png_color_8p): png_uint_32;
|
||||||
stdcall;
|
stdcall;
|
||||||
@@ -380,6 +386,9 @@ function png_get_text(png_ptr: png_structp; info_ptr: png_infop;
|
|||||||
var text_ptr: png_textp; var num_text: int):
|
var text_ptr: png_textp; var num_text: int):
|
||||||
png_uint_32;
|
png_uint_32;
|
||||||
stdcall;
|
stdcall;
|
||||||
|
function png_get_user_chunk_ptr(png_ptr: png_structp):
|
||||||
|
png_voidp;
|
||||||
|
stdcall;
|
||||||
function png_get_valid(png_ptr: png_structp; info_ptr: png_infop;
|
function png_get_valid(png_ptr: png_structp; info_ptr: png_infop;
|
||||||
flag: png_uint_32): png_uint_32;
|
flag: png_uint_32): png_uint_32;
|
||||||
stdcall;
|
stdcall;
|
||||||
@@ -441,6 +450,10 @@ procedure png_set_cHRM(png_ptr: png_structp; info_ptr: png_infop;
|
|||||||
white_x, white_y, red_x, red_y, green_x, green_y,
|
white_x, white_y, red_x, red_y, green_x, green_y,
|
||||||
blue_x, blue_y: double);
|
blue_x, blue_y: double);
|
||||||
stdcall;
|
stdcall;
|
||||||
|
procedure png_set_cHRM_fixed(png_ptr: png_structp; info_ptr: png_infop;
|
||||||
|
white_x, white_y, red_x, red_y, green_x, green_y,
|
||||||
|
blue_x, blue_y: png_fixed_point);
|
||||||
|
stdcall;
|
||||||
procedure png_set_compression_level(png_ptr: png_structp; level: int);
|
procedure png_set_compression_level(png_ptr: png_structp; level: int);
|
||||||
stdcall;
|
stdcall;
|
||||||
procedure png_set_compression_mem_level(png_ptr: png_structp;
|
procedure png_set_compression_mem_level(png_ptr: png_structp;
|
||||||
@@ -480,6 +493,9 @@ procedure png_set_flush(png_ptr: png_structp; nrows: int);
|
|||||||
procedure png_set_gAMA(png_ptr: png_structp; info_ptr: png_infop;
|
procedure png_set_gAMA(png_ptr: png_structp; info_ptr: png_infop;
|
||||||
file_gamma: double);
|
file_gamma: double);
|
||||||
stdcall;
|
stdcall;
|
||||||
|
procedure png_set_gAMA_fixed(png_ptr: png_structp; info_ptr: png_infop;
|
||||||
|
file_gamma: png_fixed_point);
|
||||||
|
stdcall;
|
||||||
procedure png_set_gamma(png_ptr: png_structp; screen_gamma,
|
procedure png_set_gamma(png_ptr: png_structp; screen_gamma,
|
||||||
default_file_gamma: double);
|
default_file_gamma: double);
|
||||||
stdcall;
|
stdcall;
|
||||||
@@ -525,10 +541,20 @@ procedure png_set_read_fn(png_ptr: png_structp;
|
|||||||
procedure png_set_read_status_fn(png_ptr: png_structp;
|
procedure png_set_read_status_fn(png_ptr: png_structp;
|
||||||
read_row_fn: png_read_status_ptr);
|
read_row_fn: png_read_status_ptr);
|
||||||
stdcall;
|
stdcall;
|
||||||
|
procedure png_set_read_user_chunk_fn(png_ptr: png_structp;
|
||||||
|
read_user_chunk_fn: png_user_chunk_ptr);
|
||||||
|
stdcall;
|
||||||
procedure png_set_read_user_transform_fn(png_ptr: png_structp;
|
procedure png_set_read_user_transform_fn(png_ptr: png_structp;
|
||||||
read_user_transform_fn: png_user_transform_ptr);
|
read_user_transform_fn: png_user_transform_ptr);
|
||||||
stdcall;
|
stdcall;
|
||||||
procedure png_set_rgb_to_gray(png_ptr: png_structp; int: error_action);
|
procedure png_set_rgb_to_gray(png_ptr: png_structp; int: error_action;
|
||||||
|
red_weight, green_weight: double);
|
||||||
|
stdcall;
|
||||||
|
procedure png_set_rgb_to_gray_fixed(png_ptr: png_structp; int: error_action;
|
||||||
|
red_weight, green_weight: png_fixed_point);
|
||||||
|
stdcall;
|
||||||
|
procedure png_set_rows(png_ptr: png_structp; info_ptr: png_infop;
|
||||||
|
row_pointers: png_bytepp);
|
||||||
stdcall;
|
stdcall;
|
||||||
procedure png_set_sBIT(png_ptr: png_structp; info_ptr: png_infop;
|
procedure png_set_sBIT(png_ptr: png_structp; info_ptr: png_infop;
|
||||||
sig_bits: png_color_8p);
|
sig_bits: png_color_8p);
|
||||||
@@ -608,24 +634,18 @@ procedure png_get_iCCP(png_ptr: png_structp; info_ptr: png_infop;
|
|||||||
name: png_charpp; compression_type: int *; profile: png_charpp;
|
name: png_charpp; compression_type: int *; profile: png_charpp;
|
||||||
proflen: png_int_32): png_bytep;
|
proflen: png_int_32): png_bytep;
|
||||||
stdcall;
|
stdcall;
|
||||||
procedure png_get_spalettes(png_ptr: png_structp;
|
procedure png_get_sPLT(png_ptr: png_structp;
|
||||||
info_ptr: png_infop; entries: png_spalette_pp): png_uint_32;
|
info_ptr: png_infop; entries: png_spalette_pp): png_uint_32;
|
||||||
stdcall;
|
stdcall;
|
||||||
procedure png_free_pCAL(png_ptr: png_structp; info_ptr: png_infop);
|
|
||||||
stdcall;
|
|
||||||
procedure png_set_iCCP(png_ptr: png_structp; info_ptr: png_infop;
|
procedure png_set_iCCP(png_ptr: png_structp; info_ptr: png_infop;
|
||||||
name: png_charp; compression_type: int; profile: png_charp;
|
name: png_charp; compression_type: int; profile: png_charp;
|
||||||
proflen: int);
|
proflen: int);
|
||||||
stdcall;
|
stdcall;
|
||||||
procedure png_free_iCCP(png_ptr: png_structp; info_ptr: png_infop);
|
procedure png_free_data(png_ptr: png_structp; info_ptr: png_infop; num: int);
|
||||||
stdcall;
|
stdcall;
|
||||||
procedure png_free_text(png_ptr: png_structp; info_ptr: png_infop);
|
procedure png_set_sPLT(png_ptr: png_structp; info_ptr: png_infop;
|
||||||
stdcall;
|
|
||||||
procedure png_set_spalettes(png_ptr: png_structp; info_ptr: png_infop;
|
|
||||||
entries: png_spalette_p; nentries: int);
|
entries: png_spalette_p; nentries: int);
|
||||||
stdcall;
|
stdcall;
|
||||||
procedure png_free_sPLT(png_ptr: png_structp; info_ptr: png_infop);
|
|
||||||
stdcall;
|
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
@@ -667,12 +687,14 @@ function png_get_pixel_aspect_ratio; external pngDLL;
|
|||||||
function png_get_pixels_per_meter; external pngDLL;
|
function png_get_pixels_per_meter; external pngDLL;
|
||||||
function png_get_progressive_ptr; external pngDLL;
|
function png_get_progressive_ptr; external pngDLL;
|
||||||
function png_get_rowbytes; external pngDLL;
|
function png_get_rowbytes; external pngDLL;
|
||||||
|
function png_get_rows; external pngDLL;
|
||||||
function png_get_sBIT; external pngDLL;
|
function png_get_sBIT; external pngDLL;
|
||||||
function png_get_sRGB; external pngDLL;
|
function png_get_sRGB; external pngDLL;
|
||||||
function png_get_signature; external pngDLL;
|
function png_get_signature; external pngDLL;
|
||||||
function png_get_tIME; external pngDLL;
|
function png_get_tIME; external pngDLL;
|
||||||
function png_get_tRNS; external pngDLL;
|
function png_get_tRNS; external pngDLL;
|
||||||
function png_get_text; external pngDLL;
|
function png_get_text; external pngDLL;
|
||||||
|
function png_get_user_chunk_ptr; external pngDLL;
|
||||||
function png_get_valid; external pngDLL;
|
function png_get_valid; external pngDLL;
|
||||||
function png_get_x_offset_microns; external pngDLL;
|
function png_get_x_offset_microns; external pngDLL;
|
||||||
function png_get_x_offset_pixels; external pngDLL;
|
function png_get_x_offset_pixels; external pngDLL;
|
||||||
@@ -694,6 +716,7 @@ procedure png_set_bKGD; external pngDLL;
|
|||||||
procedure png_set_background; external pngDLL;
|
procedure png_set_background; external pngDLL;
|
||||||
procedure png_set_bgr; external pngDLL;
|
procedure png_set_bgr; external pngDLL;
|
||||||
procedure png_set_cHRM; external pngDLL;
|
procedure png_set_cHRM; external pngDLL;
|
||||||
|
procedure png_set_cHRM_fixed; external pngDLL;
|
||||||
procedure png_set_compression_level; external pngDLL;
|
procedure png_set_compression_level; external pngDLL;
|
||||||
procedure png_set_compression_mem_level; external pngDLL;
|
procedure png_set_compression_mem_level; external pngDLL;
|
||||||
procedure png_set_compression_method; external pngDLL;
|
procedure png_set_compression_method; external pngDLL;
|
||||||
@@ -708,6 +731,7 @@ procedure png_set_filter; external pngDLL;
|
|||||||
procedure png_set_filter_heuristics; external pngDLL;
|
procedure png_set_filter_heuristics; external pngDLL;
|
||||||
procedure png_set_flush; external pngDLL;
|
procedure png_set_flush; external pngDLL;
|
||||||
procedure png_set_gAMA; external pngDLL;
|
procedure png_set_gAMA; external pngDLL;
|
||||||
|
procedure png_set_gAMA_fixed; external pngDLL;
|
||||||
procedure png_set_gamma; external pngDLL;
|
procedure png_set_gamma; external pngDLL;
|
||||||
procedure png_set_gray_to_rgb; external pngDLL;
|
procedure png_set_gray_to_rgb; external pngDLL;
|
||||||
procedure png_set_hIST; external pngDLL;
|
procedure png_set_hIST; external pngDLL;
|
||||||
@@ -723,6 +747,9 @@ procedure png_set_progressive_read_fn; external pngDLL;
|
|||||||
procedure png_set_read_fn; external pngDLL;
|
procedure png_set_read_fn; external pngDLL;
|
||||||
procedure png_set_read_status_fn; external pngDLL;
|
procedure png_set_read_status_fn; external pngDLL;
|
||||||
procedure png_set_read_user_transform_fn; external pngDLL;
|
procedure png_set_read_user_transform_fn; external pngDLL;
|
||||||
|
procedure png_set_rgb_to_gray; external pngDLL;
|
||||||
|
procedure png_set_rgb_to_gray_fixed; external pngDLL;
|
||||||
|
procedure png_set_rows; external pngDLL;
|
||||||
procedure png_set_sBIT; external pngDLL;
|
procedure png_set_sBIT; external pngDLL;
|
||||||
procedure png_set_sRGB; external pngDLL;
|
procedure png_set_sRGB; external pngDLL;
|
||||||
procedure png_set_sRGB_gAMA_and_cHRM; external pngDLL;
|
procedure png_set_sRGB_gAMA_and_cHRM; external pngDLL;
|
||||||
@@ -735,6 +762,7 @@ procedure png_set_swap_alpha; external pngDLL;
|
|||||||
procedure png_set_tIME; external pngDLL;
|
procedure png_set_tIME; external pngDLL;
|
||||||
procedure png_set_tRNS; external pngDLL;
|
procedure png_set_tRNS; external pngDLL;
|
||||||
procedure png_set_text; external pngDLL;
|
procedure png_set_text; external pngDLL;
|
||||||
|
procedure png_set_user_chunk_fn; external pngDLL;
|
||||||
procedure png_set_write_fn; external pngDLL;
|
procedure png_set_write_fn; external pngDLL;
|
||||||
procedure png_set_write_status_fn; external pngDLL;
|
procedure png_set_write_status_fn; external pngDLL;
|
||||||
procedure png_set_write_user_transform_fn; external pngDLL;
|
procedure png_set_write_user_transform_fn; external pngDLL;
|
||||||
@@ -752,12 +780,9 @@ procedure png_write_info_before_PLTE; external pngDLL;
|
|||||||
procedure png_write_row; external pngDLL;
|
procedure png_write_row; external pngDLL;
|
||||||
procedure png_write_rows; external pngDLL;
|
procedure png_write_rows; external pngDLL;
|
||||||
procedure png_get_iCCP; external pngDLL;
|
procedure png_get_iCCP; external pngDLL;
|
||||||
procedure png_get_spalettes; external pngDLL;
|
procedure png_get_sPLT; external pngDLL;
|
||||||
procedure png_free_pCAL; external pngDLL;
|
|
||||||
procedure png_set_iCCP; external pngDLL;
|
procedure png_set_iCCP; external pngDLL;
|
||||||
procedure png_free_iCCP; external pngDLL;
|
procedure png_set_sPLT; external pngDLL;
|
||||||
procedure png_free_text; external pngDLL;
|
procedure png_free_data; external pngDLL;
|
||||||
procedure png_set_spalettes; external pngDLL;
|
|
||||||
procedure png_free_sPLT; external pngDLL;
|
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|||||||
@@ -31,6 +31,8 @@ EXPORTS
|
|||||||
png_set_bgr
|
png_set_bgr
|
||||||
png_set_gray_to_rgb
|
png_set_gray_to_rgb
|
||||||
png_set_rgb_to_gray
|
png_set_rgb_to_gray
|
||||||
|
png_set_rgb_to_gray_fixed
|
||||||
|
png_set_rows
|
||||||
png_build_grayscale_palette
|
png_build_grayscale_palette
|
||||||
png_set_strip_alpha
|
png_set_strip_alpha
|
||||||
png_set_swap_alpha
|
png_set_swap_alpha
|
||||||
@@ -47,6 +49,7 @@ EXPORTS
|
|||||||
png_set_dither
|
png_set_dither
|
||||||
png_set_gamma
|
png_set_gamma
|
||||||
png_set_flush
|
png_set_flush
|
||||||
|
png_set_user_chunk_fn
|
||||||
png_write_flush
|
png_write_flush
|
||||||
png_start_read_image
|
png_start_read_image
|
||||||
png_read_update_info
|
png_read_update_info
|
||||||
@@ -79,6 +82,7 @@ EXPORTS
|
|||||||
png_get_header_ver
|
png_get_header_ver
|
||||||
png_get_header_version
|
png_get_header_version
|
||||||
png_get_libpng_ver
|
png_get_libpng_ver
|
||||||
|
png_get_user_chunk_ptr
|
||||||
; png_get_mem_fn
|
; png_get_mem_fn
|
||||||
; png_set_mem_fn
|
; png_set_mem_fn
|
||||||
png_set_write_fn
|
png_set_write_fn
|
||||||
@@ -118,6 +122,7 @@ EXPORTS
|
|||||||
png_get_pixels_per_meter
|
png_get_pixels_per_meter
|
||||||
png_get_pixel_aspect_ratio
|
png_get_pixel_aspect_ratio
|
||||||
png_get_rgb_to_gray_status
|
png_get_rgb_to_gray_status
|
||||||
|
png_get_rows
|
||||||
png_get_x_offset_pixels
|
png_get_x_offset_pixels
|
||||||
png_get_y_offset_pixels
|
png_get_y_offset_pixels
|
||||||
png_get_x_offset_microns
|
png_get_x_offset_microns
|
||||||
@@ -127,8 +132,10 @@ EXPORTS
|
|||||||
png_set_bKGD
|
png_set_bKGD
|
||||||
png_get_cHRM
|
png_get_cHRM
|
||||||
png_set_cHRM
|
png_set_cHRM
|
||||||
|
png_set_cHRM_fixed
|
||||||
png_get_gAMA
|
png_get_gAMA
|
||||||
png_set_gAMA
|
png_set_gAMA
|
||||||
|
png_set_gAMA_fixed
|
||||||
png_get_hIST
|
png_get_hIST
|
||||||
png_set_hIST
|
png_set_hIST
|
||||||
png_get_IHDR
|
png_get_IHDR
|
||||||
@@ -177,20 +184,24 @@ EXPORTS
|
|||||||
png_write_PLTE
|
png_write_PLTE
|
||||||
png_write_IDAT
|
png_write_IDAT
|
||||||
png_write_IEND
|
png_write_IEND
|
||||||
png_write_gAMA
|
|
||||||
png_write_sBIT
|
|
||||||
png_write_cHRM
|
|
||||||
png_write_sRGB
|
|
||||||
png_write_tRNS
|
|
||||||
png_write_bKGD
|
png_write_bKGD
|
||||||
|
png_write_cHRM
|
||||||
|
png_write_gAMA
|
||||||
png_write_hIST
|
png_write_hIST
|
||||||
png_check_keyword
|
png_write_iCCP
|
||||||
png_write_tEXt
|
png_write_iTXt
|
||||||
png_write_zTXt
|
|
||||||
png_write_oFFs
|
png_write_oFFs
|
||||||
png_write_pCAL
|
png_write_pCAL
|
||||||
png_write_pHYs
|
png_write_pHYs
|
||||||
|
png_write_sBIT
|
||||||
|
png_write_sCAL
|
||||||
|
png_write_sPLT
|
||||||
|
png_write_sRGB
|
||||||
|
png_check_keyword
|
||||||
|
png_write_tEXt
|
||||||
png_write_tIME
|
png_write_tIME
|
||||||
|
png_write_tRNS
|
||||||
|
png_write_zTXt
|
||||||
png_write_finish_row
|
png_write_finish_row
|
||||||
png_write_start_row
|
png_write_start_row
|
||||||
png_build_gamma_table
|
png_build_gamma_table
|
||||||
@@ -229,18 +240,22 @@ EXPORTS
|
|||||||
png_handle_IHDR
|
png_handle_IHDR
|
||||||
png_handle_PLTE
|
png_handle_PLTE
|
||||||
png_handle_IEND
|
png_handle_IEND
|
||||||
png_handle_gAMA
|
|
||||||
png_handle_sBIT
|
|
||||||
png_handle_cHRM
|
|
||||||
png_handle_sRGB
|
|
||||||
png_handle_tRNS
|
|
||||||
png_handle_bKGD
|
png_handle_bKGD
|
||||||
|
png_handle_cHRM
|
||||||
|
png_handle_gAMA
|
||||||
png_handle_hIST
|
png_handle_hIST
|
||||||
|
png_handle_iCCP
|
||||||
|
png_handle_iTXt
|
||||||
png_handle_oFFs
|
png_handle_oFFs
|
||||||
png_handle_pCAL
|
png_handle_pCAL
|
||||||
png_handle_pHYs
|
png_handle_pHYs
|
||||||
png_handle_tIME
|
png_handle_sBIT
|
||||||
|
png_handle_sCAL
|
||||||
|
png_handle_sPLT
|
||||||
|
png_handle_sRGB
|
||||||
png_handle_tEXt
|
png_handle_tEXt
|
||||||
|
png_handle_tIME
|
||||||
|
png_handle_tRNS
|
||||||
png_handle_zTXt
|
png_handle_zTXt
|
||||||
png_handle_unknown
|
png_handle_unknown
|
||||||
png_check_chunk_name
|
png_check_chunk_name
|
||||||
@@ -281,14 +296,10 @@ EXPORTS
|
|||||||
; png_pass_height
|
; png_pass_height
|
||||||
png_get_iCCP
|
png_get_iCCP
|
||||||
png_get_sCAL
|
png_get_sCAL
|
||||||
png_get_spalettes
|
png_get_sPLT
|
||||||
png_free_pCAL
|
|
||||||
png_set_iCCP
|
png_set_iCCP
|
||||||
png_free_iCCP
|
png_set_sPLT
|
||||||
png_free_text
|
png_free_data
|
||||||
png_free_sCAL
|
|
||||||
png_set_spalettes
|
|
||||||
png_free_sPLT
|
|
||||||
|
|
||||||
png_IHDR
|
png_IHDR
|
||||||
png_IDAT
|
png_IDAT
|
||||||
|
|||||||
Reference in New Issue
Block a user