Mercurial > emacs
changeset 43670:5505d571541b
(png_load): Set screen_gamma based on f->gamma.
If png_get_sRGB gives an answer, call png_set_gamma
using the default image gamma value.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sun, 03 Mar 2002 20:07:42 +0000 |
parents | 4bd6b6b21deb |
children | b6abb8a7ea89 |
files | src/xfns.c |
diffstat | 1 files changed, 5 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/xfns.c Sun Mar 03 20:06:11 2002 +0000 +++ b/src/xfns.c Sun Mar 03 20:07:42 2002 +0000 @@ -9034,24 +9034,22 @@ || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) png_set_gray_to_rgb (png_ptr); - /* The value 2.2 is a guess for PC monitors from PNG example.c. */ - gamma_str = getenv ("SCREEN_GAMMA"); - screen_gamma = gamma_str ? atof (gamma_str) : 2.2; + screen_gamma = (f->gamma ? 1 / f->gamma / 0.45455 : 2.2); /* Tell the PNG lib to handle gamma correction for us. */ #if defined(PNG_READ_sRGB_SUPPORTED) || defined(PNG_WRITE_sRGB_SUPPORTED) if (png_get_sRGB (png_ptr, info_ptr, &intent)) - /* There is a special chunk in the image specifying the gamma. */ - png_set_sRGB (png_ptr, info_ptr, intent); + /* The libpng documentation says this is right in this case. */ + png_set_gamma (png_ptr, screen_gamma, 0.45455); else #endif if (png_get_gAMA (png_ptr, info_ptr, &image_gamma)) /* Image contains gamma information. */ png_set_gamma (png_ptr, screen_gamma, image_gamma); else - /* Use a default of 0.5 for the image gamma. */ - png_set_gamma (png_ptr, screen_gamma, 0.5); + /* Use the standard default for the image gamma. */ + png_set_gamma (png_ptr, screen_gamma, 0.45455); /* Handle alpha channel by combining the image with a background color. Do this only if a real alpha channel is supplied. For