提交 69b1448f 编写于 作者: G Guy Schalnat 提交者: Glenn Randers-Pehrson

Imported from libpng-0.86.tar

上级 6d76471a
make -fmakefile.bor -B -DMODEL=m %1 %2 %3 libpng >buildm.out
make -fmakefile.bor -B -DMODEL=l %1 %2 %3 libpng >buildl.out
......@@ -79,13 +79,21 @@ void read_png(char *file_name)
png_info_init(info_ptr);
png_read_init(png_ptr);
/* set up the input control */
/* set up the input control if you are using standard C streams */
png_init_io(png_ptr, fp);
/* read the file information */
png_read_info(png_ptr, info_ptr);
/* if you are using replacement read functions, here you would call */
png_set_read_fn(png_ptr, (void *)io_ptr, user_read_fn);
/* where io_ptr is a structure you want available to the callbacks */
/* set up the transformations you want. Note that these are
/* if you are using replacement message functions, here you would call */
png_set_message_fn(png_ptr, (void *)msg_ptr, user_error_fn, user_warning_fn);
/* where msg_ptr is a structure you want available to the callbacks */
/* read the file information */
png_read_info(png_ptr, info_ptr);
/* set up the transformations you want. Note that these are
all optional. Only call them if you want them */
/* expand paletted colors into true rgb */
......@@ -102,7 +110,7 @@ void read_png(char *file_name)
png_set_expand(png_ptr);
/* Set the background color to draw transparent and alpha
images over */
images over */
png_color_16 my_background;
if (info_ptr->valid & PNG_INFO_bKGD)
......@@ -120,7 +128,7 @@ void read_png(char *file_name)
/* tell libpng to strip 16 bit depth files down to 8 bits */
if (info_ptr->bit_depth == 16)
png_set_strip_16(png_ptr);
png_set_strip_16(png_ptr);
/* dither rgb files down to 8 bit palettes & reduce palettes
to the number of colors available on your screen */
......@@ -138,7 +146,7 @@ void read_png(char *file_name)
png_set_dither(png_ptr, std_color_cube, MAX_SCREEN_COLORS,
MAX_SCREEN_COLORS, NULL);
}
}
}
/* invert monocrome files */
if (info_ptr->bit_depth == 1 &&
......@@ -156,7 +164,7 @@ void read_png(char *file_name)
/* flip the rgb pixels to bgr */
if (info_ptr->color_type == PNG_COLOR_TYPE_RGB ||
info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
png_set_bgr(png_ptr);
/* swap bytes of 16 bit files to least significant bit first */
......@@ -174,7 +182,7 @@ void read_png(char *file_name)
else
number_passes = 1;
/* optional call to update palette with transformations */
/* optional call to update palette with transformations */
png_start_read_image(png_ptr);
/* optional call to update the info structure */
......@@ -192,7 +200,7 @@ void read_png(char *file_name)
for (pass = 0; pass < number_passes; pass++)
{
/* Read the image using the "sparkle" effect. */
png_read_rows(png_ptr, row_pointers, NULL, number_of_rows);
png_read_rows(png_ptr, row_pointers, NULL, number_of_rows);
/* If you are only reading on row at a time, this works */
for (y = 0; y < height; y++)
......@@ -210,7 +218,7 @@ void read_png(char *file_name)
/* read the rest of the file, getting any additional chunks
in info_ptr */
png_read_end(png_ptr, info_ptr);
png_read_end(png_ptr, info_ptr);
/* clean up after the read, and free any memory allocated */
png_read_destroy(png_ptr, info_ptr, (png_infop)0);
......@@ -262,7 +270,7 @@ initialize_png_reader()
function callbacks, even if you aren't using them all.
You can put a void pointer in place of the NULL, and
retrieve the pointer from inside the callbacks using
the function png_get_msg_ptr(png_ptr); */
the function png_get_progressive_ptr(png_ptr); */
png_set_progressive_read_fn(png_ptr, NULL,
info_callback, row_callback, end_callback);
......@@ -372,7 +380,7 @@ void write_png(char *file_name, ... other image information ...)
}
/* set error handling */
if (setjmp(png_ptr->jmpbuf))
if (setjmp(png_ptr->jmpbuf))
{
png_write_destroy(png_ptr);
fclose(fp);
......@@ -386,10 +394,18 @@ void write_png(char *file_name, ... other image information ...)
png_info_init(info_ptr);
png_write_init(png_ptr);
/* set up the output control */
/* set up the output control if you are using standard C streams */
png_init_io(png_ptr, fp);
/* set the file information here */
/* if you are using replacement write functions, here you would call */
png_set_write_fn(png_ptr, (void *)io_ptr, user_write_fn, user_flush_fn);
/* where io_ptr is a structure you want available to the callbacks */
/* if you are using replacement message functions, here you would call */
png_set_message_fn(png_ptr, (void *)msg_ptr, user_error_fn, user_warning_fn);
/* where msg_ptr is a structure you want available to the callbacks */
/* set the file information here */
info_ptr->width = ;
info_ptr->height = ;
etc.
......@@ -402,10 +418,18 @@ void write_png(char *file_name, ... other image information ...)
/* optional significant bit chunk */
info_ptr->valid |= PNG_INFO_sBIT;
info_ptr->sig_bit = true_bit_depth;
/* optional gamma chunk */
info_ptr->valid |= PNG_INFO_gAMA;
/* if we are dealing with a grayscale image then */
info_ptr->sig_bit.gray = true_bit_depth;
/* otherwise, if we are dealing with a color image then */
info_ptr->sig_bit.red = true_red_bit_depth;
info_ptr->sig_bit.green = true_green_bit_depth;
info_ptr->sig_bit.blue = true_blue_bit_depth;
/* if the image has an alpha channel then */
info_ptr->sig_bit.alpha = true_alpha_bit_depth;
/* optional gamma chunk is strongly suggested if you have any guess
as to the correct gamma of the image */
info_ptr->valid |= PNG_INFO_gAMA;
info_ptr->gamma = gamma;
/* other optional chunks */
......
此差异已折叠。
/* png.c - location for general purpose png functions
libpng 1.0 beta 2 - version 0.85
libpng 1.0 beta 2 - version 0.86
For conditions of distribution and use, see copyright notice in png.h
Copyright (c) 1995 Guy Eric Schalnat, Group 42, Inc.
December 19, 1995
Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
January 10, 1996
*/
#define PNG_INTERNAL
......@@ -13,7 +13,7 @@
/* version information for c files. This better match the version
string defined in png.h */
char FARDATA png_libpng_ver[] = "0.85";
char FARDATA png_libpng_ver[] = "0.86";
/* place to hold the signiture string for a png file. */
png_byte FARDATA png_sig[8] = {137, 80, 78, 71, 13, 10, 26, 10};
......@@ -107,7 +107,7 @@ png_check_sig(png_bytep sig, int num)
voidpf
png_zalloc(voidpf png_ptr, uInt items, uInt size)
{
voidp * ptr;
voidp ptr;
ptr = ((voidp)png_large_malloc((png_structp)png_ptr,
(png_uint_32)items * (png_uint_32)size));
......
/* png.h - header file for png reference library
libpng 1.0 beta 2 - version 0.85
December 19, 1995
libpng 1.0 beta 2 - version 0.86
Jan 10, 1996
Note: This is a beta version. It reads and writes valid files
on the platforms I have, but it has had limited portability
testing. Furthermore, you will may have to modify the
includes below to get it to work on your system, and you
may have to supply the correct compiler flags in the makefile.
Read the readme.txt for more information, and how to contact
me if you have any problems, or if you want your compiler/
platform to be supported in the next official libpng release.
Note: This is a beta version. It reads and writes valid files
on the platforms I have, but it has had limited portability
testing. Furthermore, you will may have to modify the
includes below to get it to work on your system, and you
may have to supply the correct compiler flags in the makefile.
Read the readme.txt for more information, and how to contact
me if you have any problems, or if you want your compiler/
platform to be supported in the next official libpng release.
See readme.txt for more information
See readme.txt for more information
Copyright (c) 1995 Guy Eric Schalnat, Group 42, Inc.
Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
Contributing Authors:
Andreas Dilger
Dave Martindale
Guy Eric Schalnat
Paul Schmidt
Tim Wegner
Guy Eric Schalnat
Paul Schmidt
Tim Wegner
The contributing authors would like to thank all those who helped
with testing, bug fixes, and patience. You know who you are. This
wouldn't have been possible without all of you.
Thanks to Frank J. T. Wojcik for reviewing the documentation
The PNG Reference Library is supplied "AS IS". The Contributing Authors
and Group 42, Inc. disclaim all warranties, expressed or implied,
......@@ -67,10 +74,10 @@
/* version information for png.h - this should match the version
number in png.c */
#define PNG_LIBPNG_VER_STRING "0.85"
/* careful here. I wanted to use 085, but that would be octal. Version
1.0 will be 100 here, etc. */
#define PNG_LIBPNG_VER 85
#define PNG_LIBPNG_VER_STRING "0.86"
/* careful here. I wanted to use 086, but that would be octal. Version
1.0 will be 100 here, etc. */
#define PNG_LIBPNG_VER 86
/* variables defined in png.c - only it needs to define PNG_NO_EXTERN */
#ifndef PNG_NO_EXTERN
......@@ -265,6 +272,7 @@ typedef png_info FAR * FAR * png_infopp;
/* these determine if a function in the info needs freed */
#define PNG_FREE_PALETTE 0x0001
#define PNG_FREE_HIST 0x0002
#define PNG_FREE_TRANS 0x0004
/* this is used for the transformation routines, as some of them
change these values for the row. It also should enable using
......@@ -290,10 +298,10 @@ typedef png_row_info FAR * FAR * png_row_infopp;
typedef struct png_struct_def png_struct;
typedef png_struct FAR * png_structp;
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
typedef void (*png_msg_ptr) PNGARG((png_structp, png_const_charp));
typedef void (*png_rw_ptr) PNGARG((png_structp, png_bytep, png_uint_32));
typedef void (*png_flush_ptr) PNGARG((png_structp));
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
typedef void (*png_progressive_info_ptr) PNGARG((png_structp, png_infop));
typedef void (*png_progressive_end_ptr) PNGARG((png_structp, png_infop));
typedef void (*png_progressive_row_ptr) PNGARG((png_structp, png_bytep,
......@@ -305,7 +313,7 @@ typedef void (*png_progressive_row_ptr) PNGARG((png_structp, png_bytep,
people who will be modifying the library for their own special needs.
*/
typedef struct png_struct_def
struct png_struct_def
{
jmp_buf jmpbuf; /* used in png_error */
png_byte mode; /* used to determine where we are in the png file */
......@@ -507,6 +515,11 @@ extern void png_set_expand PNGARG((png_structp png_ptr));
extern void png_set_bgr PNGARG((png_structp png_ptr));
#endif
#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED)
/* Expand the grayscale to 24 bit RGB if necessary. */
extern void png_set_gray_to_rgb PNGARG((png_structp png_ptr));
#endif
#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)
#define PNG_FILLER_BEFORE 0
#define PNG_FILLER_AFTER 1
......@@ -664,9 +677,10 @@ extern void png_set_compression_method PNGARG((png_structp png_ptr,
int method));
/* These next functions are stubs of typical c functions for input/output,
memory, and error handling. They are in the file pngstub.c, and are
set up to be easily modified for users that need to. See the file
pngstub.c for more information */
memory, and error handling. They are in the file pngio.c, and pngerror.c.
These functions can be replaced at run time for those applications that
need to handle I/O in a different manner. See the file libpng.txt for
more information */
/* Write the data to whatever output you are using. */
extern void png_write_data PNGARG((png_structp png_ptr, png_bytep data,
......@@ -676,7 +690,7 @@ extern void png_write_data PNGARG((png_structp png_ptr, png_bytep data,
extern void png_read_data PNGARG((png_structp png_ptr, png_bytep data,
png_uint_32 length));
/* Initialize the input/output for the png file. */
/* Initialize the input/output for the png file to the default functions. */
extern void png_init_io PNGARG((png_structp png_ptr, FILE *fp));
/* Replace the error message and abort, and warning functions with user
......@@ -691,7 +705,7 @@ extern png_voidp png_get_msg_ptr PNGARG((png_structp png_ptr));
/* Replace the default data output functions with a user supplied one(s).
If buffered output is not used, then output_flush_fn can be set to NULL.
if PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile time
If PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile time
output_flush_fn will be ignored (and thus can be NULL). */
extern void png_set_write_fn PNGARG((png_structp png_ptr, png_voidp io_ptr,
png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn));
......@@ -709,7 +723,7 @@ extern void png_set_push_fn PNGARG((png_structp png_ptr, png_voidp push_ptr,
png_progressive_end_ptr end_fn));
/* returns the user pointer assiciated with the push read functions */
extern void * png_get_progressive_ptr PNGARG((png_structp png_ptr));
extern png_voidp png_get_progressive_ptr PNGARG((png_structp png_ptr));
extern png_voidp png_large_malloc PNGARG((png_structp png_ptr,
png_uint_32 size));
......@@ -1118,6 +1132,9 @@ extern void png_do_unshift PNGARG((png_row_infop row_info, png_bytep row,
extern void png_do_invert PNGARG((png_row_infop row_info, png_bytep row));
#endif
extern void png_build_grayscale_palette PNGARG((int bit_depth,
png_colorp palette));
#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED)
extern void png_do_gray_to_rgb PNGARG((png_row_infop row_info,
png_bytep row));
......
......@@ -62,5 +62,8 @@ version 0.85
added i/o, error, and memory callback functions
fixed some bugs (16 bit, 4 bit interlaced, etc.)
added first run progressive reader (barely tested)
version 0.86
fixed bugs
improved documentation
/* pngconf.c - machine configurable file for libpng
libpng 1.0 beta 2 - version 0.85
libpng 1.0 beta 2 - version 0.86
For conditions of distribution and use, see copyright notice in png.h
Copyright (c) 1995 Guy Eric Schalnat, Group 42, Inc.
December 19, 1995
Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
January 10, 1996
*/
/* Any machine specific code is near the front of this file, so if you
......
/* pngerror.c - stub functions for i/o and memory allocation
libpng 1.0 beta 2 - version 0.85
libpng 1.0 beta 2 - version 0.86
For conditions of distribution and use, see copyright notice in png.h
Copyright (c) 1995 Guy Eric Schalnat, Group 42, Inc.
December 19, 1995
Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
January 10, 1996
This file provides a location for all error handling. Users which
need special error handling are expected to modify the code in this
file to meet their needs. See the instructions at each function. */
This file provides a location for all error handling. Users which
need special error handling are expected to write replacement functions
and use png_set_message_fn() to use those functions. See the instructions
at each function. */
#define PNG_INTERNAL
#include "png.h"
/* This function is called whenever there is an error. Replace with
however you wish to handle the error. Note that this function
MUST NOT return, or the program will crash */
/* This function is called whenever there is a fatal error. This function
should not be changed. If there is a need to handle errors differently,
you should supply a replacement error function and use png_set_message_fn()
to replace the error function at run-time. */
void
png_error(png_structp png_ptr, png_const_charp message)
{
......@@ -27,6 +29,10 @@ png_error(png_structp png_ptr, png_const_charp message)
png_default_error(png_ptr, message);
}
/* This function is called whenever there is a non-fatal error. This function
should not be changed. If there is a need to handle warnings differently,
you should supply a replacement warning function and use
png_set_message_fn() to replace the warning function at run-time. */
void
png_warning(png_structp png_ptr, png_const_charp message)
{
......@@ -54,11 +60,10 @@ png_default_error(png_structp png_ptr, png_const_charp message)
#endif
}
/* This function is called when there is a warning, but the library
thinks it can continue anyway. You don't have to do anything here
if you don't want to. In the default configuration, png_ptr is
/* This function is called when there is a warning, but the library thinks
it can continue anyway. Replacement functions don't have to do anything
here if you don't want to. In the default configuration, png_ptr is
not used, but it is passed in case it may be useful. */
void
png_default_warning(png_structp png_ptr, png_const_charp message)
{
......@@ -70,10 +75,10 @@ png_default_warning(png_structp png_ptr, png_const_charp message)
#endif
}
/* This function is called when the application wants to use another
method of handling errors and warnings. Note that the error function must
NOT return to the calling routine or serious problems will occur. The
error return method used in the default routine calls
/* This function is called when the application wants to use another method
of handling errors and warnings. Note that the error function MUST NOT
return to the calling routine or serious problems will occur. The error
return method used in the default routine calls
longjmp(png_ptr->jmpbuf, 1) */
void
png_set_message_fn(png_structp png_ptr, png_voidp msg_ptr, png_msg_ptr error_fn,
......
/* pngstub.c - stub functions for i/o and memory allocation
/* pngio.c - stub functions for i/o and memory allocation
libpng 1.0 beta 2 - version 0.85
libpng 1.0 beta 2 - version 0.86
For conditions of distribution and use, see copyright notice in png.h
Copyright (c) 1995 Guy Eric Schalnat, Group 42, Inc.
December 19, 1995
Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
January 10, 1996
This file provides a location for all input/output. Users which need
special handling are expected to write functions which have the same
......@@ -16,13 +16,12 @@
#define PNG_INTERNAL
#include "png.h"
/* Write the data to whatever output you are using. The default
routine writes to a file pointer. If you need to write to something
else, this is a good example of how to do it. Note that this routine
sometimes gets called with very small lengths, so you should implement
some kind of simple buffering if you are using unbuffered writes. This
should never be asked to write more then 64K on a 16 bit machine. The
cast to png_size_t is there for insurance. */
/* Write the data to whatever output you are using. The default routine
writes to a file pointer. Note that this routine sometimes gets called
with very small lengths, so you should implement some kind of simple
buffering if you are using unbuffered writes. This should never be asked
to write more then 64K on a 16 bit machine. The cast to png_size_t is
there to quiet warnings of certain compilers. */
void
png_write_data(png_structp png_ptr, png_bytep data, png_uint_32 length)
......@@ -33,6 +32,10 @@ png_write_data(png_structp png_ptr, png_bytep data, png_uint_32 length)
png_error(png_ptr, "Call to NULL write function");
}
/* This is the function which does the actual writing of data. If you are
not writing to a standard C stream, you should create a replacement
write_data function and use it at run time with png_set_write_fn(), rather
than changing the library. */
#ifndef USE_FAR_KEYWORD
void
png_default_write_data(png_structp png_ptr, png_bytep data, png_uint_32 length)
......@@ -106,17 +109,12 @@ png_default_write_data(png_structp png_ptr, png_bytep data, png_uint_32 length)
#endif
/* Read the data from whatever input you are using. The default
routine reads from a file pointer. If you need to read from something
else, this is the place to do it. We suggest saving the old code
for future use. Note that this routine sometimes gets called with
very small lengths, so you should implement some kind of simple
buffering if you are using unbuffered reads. This should
never be asked to read more then 64K on a 16 bit machine. The cast
to png_size_t is there for insurance, but if you are having problems
with it, you can take it out. Just be sure to cast length to whatever
fread needs in that spot if you don't have a function prototype for
it. */
/* Read the data from whatever input you are using. The default routine
reads from a file pointer. Note that this routine sometimes gets called
with very small lengths, so you should implement some kind of simple
buffering if you are using unbuffered reads. This should never be asked
to read more then 64K on a 16 bit machine. The cast to png_size_t is
there to quiet some compilers */
void
png_read_data(png_structp png_ptr, png_bytep data, png_uint_32 length)
{
......@@ -135,6 +133,10 @@ png_read_data(png_structp png_ptr, png_bytep data, png_uint_32 length)
}
}
/* This is the function which does the actual reading of data. If you are
not reading from a standard C stream, you should create a replacement
read_data function and use it at run time with png_set_read_fn(), rather
than changing the library. */
#ifndef USE_FAR_KEYWORD
void
png_default_read_data(png_structp png_ptr, png_bytep data, png_uint_32 length)
......@@ -221,7 +223,7 @@ png_default_flush(png_struct *png_ptr)
arguments a pointer to a png_struct, a pointer to
data to be written, and a 32-bit unsigned int which is
the number of bytes to be written. The new write
function should call (*(png_ptr->error_fn))("Error msg")
function should call png_error("Error msg")
to exit and output any fatal error messages.
flush_data_fn - pointer to a new flush function which takes as its
arguments a pointer to a png_struct. After a call to
......@@ -264,7 +266,9 @@ png_set_write_fn(png_structp png_ptr, png_voidp io_ptr, png_rw_ptr write_data_fn
read_data_fn - pointer to a new input function which takes as it's
arguments a pointer to a png_struct, a pointer to
a location where input data can be stored, and a 32-bit
unsigned int which is the number of bytes to be read. */
unsigned int which is the number of bytes to be read.
To exit and output any fatal error messages the new write
function should call png_error(png_ptr, "Error msg"). */
void
png_set_read_fn(png_struct *png_ptr, void *io_ptr, png_rw_ptr read_data_fn)
{
......@@ -293,10 +297,9 @@ png_get_io_ptr(png_struct *png_ptr)
return png_ptr->io_ptr;
}
/* Initialize the input/output for the png file. If you change
the read and write routines, you will probably need to change
this routine (or write your own). If you change the parameters
of this routine, remember to change png.h also. */
/* Initialize the default input/output functions for the png file. If you
change the read, or write routines, you can call either png_set_read_fn()
or png_set_write_fn() instead of png_init_io(). */
void
png_init_io(png_structp png_ptr, FILE *fp)
{
......
/* pngmem.c - stub functions for memory allocation
libpng 1.0 beta 2 - version 0.85
libpng 1.0 beta 2 - version 0.86
For conditions of distribution and use, see copyright notice in png.h
Copyright (c) 1995 Guy Eric Schalnat, Group 42, Inc.
December 19, 1995
Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
January 10, 1996
This file provides a location for all memory allocation. Users which
need special memory handling are expected to modify the code in this file
......
/* pngpread.c - read a png file in push mode
libpng 1.0 beta 2 - version 0.85
libpng 1.0 beta 2 - version 0.86
For conditions of distribution and use, see copyright notice in png.h
Copyright (c) 1995 Guy Eric Schalnat, Group 42, Inc.
December 19, 1995
Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
January 10, 1996
*/
#define PNG_INTERNAL
......@@ -850,8 +850,10 @@ png_push_read_text(png_structp png_ptr, png_infop info)
text_size = png_ptr->buffer_size;
else
text_size = png_ptr->current_text_left;
png_push_fill_buffer(png_ptr, png_ptr->current_text_ptr, text_size);
png_calculate_crc(png_ptr, png_ptr->current_text_ptr, text_size);
png_push_fill_buffer(png_ptr, (png_bytep)png_ptr->current_text_ptr,
text_size);
png_calculate_crc(png_ptr, (png_bytep)png_ptr->current_text_ptr,
text_size);
png_ptr->current_text_left -= text_size;
png_ptr->current_text_ptr += text_size;
}
......@@ -902,8 +904,10 @@ png_push_read_ztxt(png_structp png_ptr, png_infop info)
text_size = png_ptr->buffer_size;
else
text_size = png_ptr->current_text_left;
png_push_fill_buffer(png_ptr, png_ptr->current_text_ptr, text_size);
png_calculate_crc(png_ptr, png_ptr->current_text_ptr, text_size);
png_push_fill_buffer(png_ptr, (png_bytep)png_ptr->current_text_ptr,
text_size);
png_calculate_crc(png_ptr, (png_bytep)png_ptr->current_text_ptr,
text_size);
png_ptr->current_text_left -= text_size;
png_ptr->current_text_ptr += text_size;
}
......@@ -950,6 +954,7 @@ png_push_read_ztxt(png_structp png_ptr, png_infop info)
key_size = text - key;
text_size = 0;
text = NULL;
ret = Z_STREAM_END;
while (png_ptr->zstream->avail_in)
{
......
/* pngrcb.c - callbacks while reading a png file
libpng 1.0 beta 2 - version 0.85
libpng 1.0 beta 2 - version 0.86
For conditions of distribution and use, see copyright notice in png.h
Copyright (c) 1995 Guy Eric Schalnat, Group 42, Inc.
December 19, 1995
Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
January 10, 1996
*/
#define PNG_INTERNAL
......
/* pngread.c - read a png file
libpng 1.0 beta 2 - version 0.85
libpng 1.0 beta 2 - version 0.86
For conditions of distribution and use, see copyright notice in png.h
Copyright (c) 1995 Guy Eric Schalnat, Group 42, Inc.
December 19, 1995
Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
January 10, 1996
*/
#define PNG_INTERNAL
......@@ -633,7 +633,7 @@ png_read_destroy(png_structp png_ptr, png_infop info, png_infop end_info)
if (png_ptr->do_free & PNG_FREE_PALETTE)
png_free(png_ptr, info->palette);
#if defined(PNG_READ_BACKGROUND_SUPPORTED) && defined(PNG_READ_bKGD_SUPPORTED)
if (png_ptr->do_free & PNG_FREE_PALETTE)
if (png_ptr->do_free & PNG_FREE_TRANS)
png_free(png_ptr, info->trans);
#endif
#if defined(PNG_READ_hIST_SUPPORTED)
......
/* pngrtran.c - transforms the data in a row for png readers
libpng 1.0 beta 2 - version 0.85
libpng 1.0 beta 2 - version 0.86
For conditions of distribution and use, see copyright notice in png.h
Copyright (c) 1995 Guy Eric Schalnat, Group 42, Inc.
December 19, 1995
Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
January 10, 1996
*/
#define PNG_INTERNAL
......@@ -1168,7 +1168,8 @@ png_build_grayscale_palette(int bit_depth, png_colorp palette)
color_inc = 1;
break;
default:
num_palette = 0;
num_palette = 0;
color_inc = 0;
break;
}
......@@ -1493,11 +1494,11 @@ png_do_background(png_row_infop row_info, png_bytep row,
else
{
v = gamma_16[
*(sp + 1) >> gamma_shift][*sp];
*(sp + 1) >> gamma_shift][*sp];
*sp = (v >> 8) & 0xff;
*(sp + 1) = v & 0xff;
}
}
}
}
else
#endif
......@@ -2025,7 +2026,7 @@ png_do_background(png_row_infop row_info, png_bytep row,
you do this after you deal with the trasparency issue on grayscale
or rgb images. If your bit depth is 8, use gamma_table, if it is 16,
use gamma_16_table and gamma_shift. Build these with
build_gamma_table(). If your bit depth < 8, gamma correct a
build_gamma_table(). If your bit depth <= 8, gamma correct a
palette, not the data. */
void
png_do_gamma(png_row_infop row_info, png_bytep row,
......@@ -2659,7 +2660,7 @@ png_build_gamma_table(png_structp png_ptr)
if ((int)png_ptr->sig_bit.green > sig_bit)
sig_bit = png_ptr->sig_bit.green;
if ((int)png_ptr->sig_bit.blue > sig_bit)
sig_bit = png_ptr->sig_bit.blue;
sig_bit = png_ptr->sig_bit.blue;
}
else
{
......@@ -2691,17 +2692,17 @@ png_build_gamma_table(png_structp png_ptr)
png_ptr->gamma_16_table = (png_uint_16pp)png_malloc(png_ptr,
num * sizeof (png_uint_16p ));
if ((png_ptr->transformations & PNG_16_TO_8) &&
!(png_ptr->transformations & PNG_BACKGROUND))
{
if ((png_ptr->transformations & PNG_16_TO_8) &&
!(png_ptr->transformations & PNG_BACKGROUND))
{
double fin, fout;
png_uint_32 last, max;
for (i = 0; i < num; i++)
{
png_ptr->gamma_16_table[i] = (png_uint_16p)png_malloc(png_ptr,
for (i = 0; i < num; i++)
{
png_ptr->gamma_16_table[i] = (png_uint_16p)png_malloc(png_ptr,
256 * sizeof (png_uint_16));
}
}
g = 1.0 / g;
last = 0;
......@@ -2709,33 +2710,33 @@ png_build_gamma_table(png_structp png_ptr)
{
fout = ((double)i + 0.5) / 256.0;
fin = pow(fout, g);
max = (png_uint_32)(fin * (double)(num << 8));
max = (png_uint_32)(fin * (double)((png_uint_32)num << 8));
while (last <= max)
{
png_ptr->gamma_16_table[(int)(last & 0xff) >> shift]
png_ptr->gamma_16_table[(int)(last & (0xff >> shift))]
[(int)(last >> (8 - shift))] =
(png_uint_16)i | ((png_uint_16)i << 8);
last++;
}
}
last++;
}
}
while (last < ((png_uint_32)num << 8))
{
png_ptr->gamma_16_table[(int)(last & 0xff) >> shift]
[(int)(last >> (8 - shift))] =
png_ptr->gamma_16_table[(int)(last & (0xff >> shift))]
[(int)(last >> (8 - shift))] =
(png_uint_16)65535L;
last++;
}
}
else
{
for (i = 0; i < num; i++)
{
png_ptr->gamma_16_table[i] = (png_uint_16p)png_malloc(png_ptr,
256 * sizeof (png_uint_16));
else
{
for (i = 0; i < num; i++)
{
png_ptr->gamma_16_table[i] = (png_uint_16p)png_malloc(png_ptr,
256 * sizeof (png_uint_16));
ig = (((png_uint_32)i *
(png_uint_32)png_gamma_shift[shift]) >> 4);
for (j = 0; j < 256; j++)
ig = (((png_uint_32)i *
(png_uint_32)png_gamma_shift[shift]) >> 4);
for (j = 0; j < 256; j++)
{
png_ptr->gamma_16_table[i][j] =
(png_uint_16)(pow((double)(ig + ((png_uint_32)j << 8)) /
......
/* pngrutil.c - utilities to read a png file
libpng 1.0 beta 2 - version 0.85
libpng 1.0 beta 2 - version 0.86
For conditions of distribution and use, see copyright notice in png.h
Copyright (c) 1995 Guy Eric Schalnat, Group 42, Inc.
December 19, 1995
Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
January 10, 1996
*/
#define PNG_INTERNAL
......@@ -164,7 +164,8 @@ png_handle_PLTE(png_structp png_ptr, png_infop info, png_uint_32 length)
num = (int)length / 3;
palette = (png_colorp)png_malloc(png_ptr, num * sizeof (png_color));
for (i = 0; i < num; i++)
png_ptr->do_free |= PNG_FREE_PALETTE;
for (i = 0; i < num; i++)
{
png_byte buf[3];
......@@ -189,7 +190,8 @@ png_handle_gAMA(png_structp png_ptr, png_infop info, png_uint_32 length)
if (length != 4)
{
png_crc_skip(png_ptr, length);
png_warning(png_ptr, "Incorrect gAMA chunk length");
png_crc_skip(png_ptr, length);
return;
}
......@@ -210,7 +212,9 @@ void
png_handle_sBIT(png_structp png_ptr, png_infop info, png_uint_32 length)
{
int slen;
png_byte buf[4];
png_byte buf[4];
buf[0] = buf[1] = buf[2] = buf[3] = 0;
if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
slen = 3;
......@@ -219,8 +223,9 @@ png_handle_sBIT(png_structp png_ptr, png_infop info, png_uint_32 length)
if (length != (png_uint_32)slen)
{
png_crc_skip(png_ptr, length);
return;
png_warning(png_ptr, "Incorrect sBIT chunk length");
png_crc_skip(png_ptr, length);
return;
}
png_crc_read(png_ptr, buf, length);
......@@ -250,7 +255,8 @@ png_handle_cHRM(png_structp png_ptr, png_infop info, png_uint_32 length)
if (length != 32)
{
png_crc_skip(png_ptr, length);
png_warning(png_ptr, "Incorrect cHRM chunk length");
png_crc_skip(png_ptr, length);
return;
}
......@@ -299,12 +305,14 @@ png_handle_tRNS(png_structp png_ptr, png_infop info, png_uint_32 length)
{
if (length > png_ptr->num_palette)
{
png_crc_skip(png_ptr, length);
png_warning(png_ptr, "Incorrect tRNS chunk length");
png_crc_skip(png_ptr, length);
return;
}
png_ptr->trans = (png_bytep)png_malloc(png_ptr, length);
png_crc_read(png_ptr, png_ptr->trans, length);
png_ptr->do_free |= PNG_FREE_TRANS;
png_crc_read(png_ptr, png_ptr->trans, length);
png_ptr->num_trans = (int)length;
}
else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB)
......@@ -313,7 +321,8 @@ png_handle_tRNS(png_structp png_ptr, png_infop info, png_uint_32 length)
if (length != 6)
{
png_crc_skip(png_ptr, length);
png_warning(png_ptr, "Incorrect tRNS chunk length");
png_crc_skip(png_ptr, length);
return;
}
......@@ -329,16 +338,17 @@ png_handle_tRNS(png_structp png_ptr, png_infop info, png_uint_32 length)
if (length != 2)
{
png_crc_skip(png_ptr, length);
return;
}
png_crc_read(png_ptr, buf, 2);
png_ptr->num_trans = 1;
png_ptr->trans_values.gray = png_get_uint_16(buf);
}
else
png_error(png_ptr, "Invalid tRNS chunk");
png_warning(png_ptr, "Incorrect tRNS chunk length");
png_crc_skip(png_ptr, length);
return;
}
png_crc_read(png_ptr, buf, 2);
png_ptr->num_trans = 1;
png_ptr->trans_values.gray = png_get_uint_16(buf);
}
else
png_warning(png_ptr, "Invalid tRNS chunk");
png_read_tRNS(png_ptr, info, png_ptr->trans, png_ptr->num_trans,
&(png_ptr->trans_values));
......@@ -361,7 +371,8 @@ png_handle_bKGD(png_structp png_ptr, png_infop info, png_uint_32 length)
if (length != (png_uint_32)truelen)
{
png_crc_skip(png_ptr, length);
png_warning(png_ptr, "Incorrect bKGD chunk length");
png_crc_skip(png_ptr, length);
return;
}
......@@ -385,18 +396,20 @@ png_handle_bKGD(png_structp png_ptr, png_infop info, png_uint_32 length)
void
png_handle_hIST(png_structp png_ptr, png_infop info, png_uint_32 length)
{
int num, i;
int num, i;
if (length != 2 * png_ptr->num_palette)
{
png_crc_skip(png_ptr, length);
return;
}
if (length != 2 * png_ptr->num_palette)
{
png_warning(png_ptr, "Incorrect hIST chunk length");
png_crc_skip(png_ptr, length);
return;
}
num = (int)length / 2;
png_ptr->hist = (png_uint_16p)png_malloc(png_ptr,
num * sizeof (png_uint_16));
for (i = 0; i < num; i++)
png_ptr->do_free |= PNG_FREE_HIST;
for (i = 0; i < num; i++)
{
png_byte buf[2];
......@@ -417,7 +430,8 @@ png_handle_pHYs(png_structp png_ptr, png_infop info, png_uint_32 length)
if (length != 9)
{
png_crc_skip(png_ptr, length);
png_warning(png_ptr, "Incorrect pHYs chunk length");
png_crc_skip(png_ptr, length);
return;
}
......@@ -440,11 +454,12 @@ png_handle_oFFs(png_structp png_ptr, png_infop info, png_uint_32 length)
if (length != 9)
{
png_crc_skip(png_ptr, length);
png_warning(png_ptr, "Incorrect oFFs chunk length");
png_crc_skip(png_ptr, length);
return;
}
png_crc_read(png_ptr, buf, 9);
png_crc_read(png_ptr, buf, 9);
offset_x = png_get_uint_32(buf);
offset_y = png_get_uint_32(buf + 4);
......@@ -462,7 +477,8 @@ png_handle_tIME(png_structp png_ptr, png_infop info, png_uint_32 length)
if (length != 7)
{
png_crc_skip(png_ptr, length);
png_warning(png_ptr, "Incorrect tIME chunk length");
png_crc_skip(png_ptr, length);
return;
}
......@@ -525,7 +541,8 @@ png_handle_zTXt(png_structp png_ptr, png_infop info, png_uint_32 length)
/* zTXt can't have zero text */
if (text == key + (png_size_t)length)
{
png_large_free(png_ptr, key);
png_warning(png_ptr, "Zero length zTXt chunk");
png_large_free(png_ptr, key);
return;
}
......@@ -546,13 +563,18 @@ png_handle_zTXt(png_structp png_ptr, png_infop info, png_uint_32 length)
key_size = text - key;
text_size = 0;
text = NULL;
text = NULL;
ret = Z_STREAM_END;
while (png_ptr->zstream->avail_in)
{
ret = inflate(png_ptr->zstream, Z_PARTIAL_FLUSH);
if (ret != Z_OK && ret != Z_STREAM_END)
{
if (png_ptr->zstream->msg)
png_warning(png_ptr, png_ptr->zstream->msg);
else
png_warning(png_ptr, "zTXt decompression error");
inflateReset(png_ptr->zstream);
png_ptr->zstream->avail_in = 0;
png_large_free(png_ptr, key);
......
/* pngtest.c - a simple test program to test libpng
libpng 1.0 beta 2 - version 0.81
libpng 1.0 beta 2 - version 0.86
For conditions of distribution and use, see copyright notice in png.h
Copyright (c) 1995 Guy Eric Schalnat, Group 42, Inc.
August 24, 1995
Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
January 10, 1996
*/
#include <stdio.h>
......
......@@ -2,10 +2,10 @@
/* pngtrans.c - transforms the data in a row
routines used by both readers and writers
libpng 1.0 beta 2 - version 0.85
libpng 1.0 beta 2 - version 0.86
For conditions of distribution and use, see copyright notice in png.h
Copyright (c) 1995 Guy Eric Schalnat, Group 42, Inc.
December 19, 1995
Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
January 10, 1996
*/
#define PNG_INTERNAL
......
/* pngwrite.c - general routines to write a png file
libpng 1.0 beta 2 - version 0.85
libpng 1.0 beta 2 - version 0.86
For conditions of distribution and use, see copyright notice in png.h
Copyright (c) 1995 Guy Eric Schalnat, Group 42, Inc.
December 19, 1995
Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
January 10, 1996
*/
/* get internal access to png.h */
......@@ -114,7 +114,7 @@ png_write_info(png_structp png_ptr, png_infop info)
void
png_write_end(png_structp png_ptr, png_infop info)
{
/* see if user wants us to write information chunks */
/* see if user wants us to write information chunks */
if (info)
{
#if defined(PNG_WRITE_tIME_SUPPORTED)
......
/* pngwtran.c - transforms the data in a row for png writers
libpng 1.0 beta 2 - version 0.85
libpng 1.0 beta 2 - version 0.86
For conditions of distribution and use, see copyright notice in png.h
Copyright (c) 1995 Guy Eric Schalnat, Group 42, Inc.
December 19, 1995
Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
January 10, 1996
*/
#define PNG_INTERNAL
......
/* pngwutil.c - utilities to write a png file
libpng 1.0 beta 2 - version 0.85
libpng 1.0 beta 2 - version 0.86
For conditions of distribution and use, see copyright notice in png.h
Copyright (c) 1995 Guy Eric Schalnat, Group 42, Inc.
December 19, 1995
Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
January 10, 1996
*/
#define PNG_INTERNAL
#include "png.h"
......
readme.txt - for libpng 0.85
readme.txt - for libpng 0.86
This is a bug fix for the second beta version of libpng 1.0, and
a first try at a progressive (push) reader. It hasn't been
tested very much, but I'm not going to have time to test it for
a few days, and I wanted to give an advanced look at the
progressive reader to everyone. Please report bugs back
(and fixes, if you find them), and I'll release a new version
in a week or two. Thanks.
tested as much as the pull reader, but seems to work ok.
I've implemented the callback functions for the error/warning
messages and the input/output. See the libpng.txt
......@@ -44,8 +40,7 @@ be available at the same place you picked up libpng. If it is
not there, try ftp.uu.net in the /graphics/png directory.
This code is currently being archived at ftp.uu.net in the
/graphics/png directory, and at ftp.group42.com (204.94.158.25)
in the /pub/png directory, and on CompuServe, Lib 20 (PNG SUPPORT)
/graphics/png directory, and on CompuServe, Lib 20 (PNG SUPPORT)
at GO GRAPHSUP. If you can't find it in any of those places,
e-mail me, and I'll help you find it.
......@@ -87,5 +82,4 @@ Good luck, and happy coding.
Internet: schalnat@group42.com
CompuServe: 75501,1625
Web: www.group42.com
FTP: ftp.group42.com (204.94.158.25)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册
新手
引导
客服 返回
顶部