[libpng16] Corrected estimate of error in libpng png_set_rgb_to_gray API.

The API is extremely inaccurate for sRGB conversions because it uses an 8-bit
intermediate linear value and it does not use the sRGB transform, so it
suffers from the known instability in gamma transforms for values close
to 0 (see Poynton).  The net result is that the calculation has a maximum
error of 14.99/255; 0.5/255^(1/2.2).  pngstest now uses 15 for the
permitted 8-bit error. This may still not be enough because of arithmetic
error.
This commit is contained in:
John Bowler
2012-02-04 15:11:16 -06:00
committed by Glenn Randers-Pehrson
parent 5578c3719e
commit aa725a375c
3 changed files with 17 additions and 1 deletions

View File

@@ -848,7 +848,7 @@ get_pixel(Image *image, Pixel *pixel, png_const_bytep pp)
static int error_to_linear = 811; /* by experiment */
static int error_to_linear_grayscale = 424; /* by experiment */
static int error_to_sRGB = 6; /* by experiment */
static int error_to_sRGB_grayscale = 11; /* by experiment */
static int error_to_sRGB_grayscale = 15; /* libpng error by calculation */
static int error_in_compose = 0;
static int error_via_linear = 14; /* by experiment */
static int error_in_premultiply = 1;