diff options
Diffstat (limited to 'gdk-pixbuf/io-png.c')
-rw-r--r-- | gdk-pixbuf/io-png.c | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/gdk-pixbuf/io-png.c b/gdk-pixbuf/io-png.c index 6447ea373..42fb4fe3b 100644 --- a/gdk-pixbuf/io-png.c +++ b/gdk-pixbuf/io-png.c @@ -256,10 +256,6 @@ gdk_pixbuf__png_image_load (FILE *f, GError **error) gint num_texts; gchar *key; gchar *value; - gchar *icc_profile_base64; - const gchar *icc_profile_title; - const gchar *icc_profile; - png_uint_32 icc_profile_size; png_uint_32 x_resolution; png_uint_32 y_resolution; int unit_type; @@ -340,17 +336,25 @@ gdk_pixbuf__png_image_load (FILE *f, GError **error) } } + if (!png_get_valid (png_ptr, info_ptr, PNG_INFO_sRGB)) { #if defined(PNG_cHRM_SUPPORTED) - /* Extract embedded ICC profile */ - retval = png_get_iCCP (png_ptr, info_ptr, - (png_charpp) &icc_profile_title, &compression_type, - (png_bytepp) &icc_profile, (png_uint_32*) &icc_profile_size); - if (retval != 0) { - icc_profile_base64 = g_base64_encode ((const guchar *) icc_profile, (gsize)icc_profile_size); - gdk_pixbuf_set_option (pixbuf, "icc-profile", icc_profile_base64); - g_free (icc_profile_base64); - } + const gchar *icc_profile_title; + const gchar *icc_profile; + png_uint_32 icc_profile_size; + + /* Extract embedded ICC profile */ + retval = png_get_iCCP (png_ptr, info_ptr, + (png_charpp) &icc_profile_title, &compression_type, + (png_bytepp) &icc_profile, (png_uint_32*) &icc_profile_size); + if (retval != 0) { + gchar *icc_profile_base64; + + icc_profile_base64 = g_base64_encode ((const guchar *) icc_profile, (gsize)icc_profile_size); + gdk_pixbuf_set_option (pixbuf, "icc-profile", icc_profile_base64); + g_free (icc_profile_base64); + } #endif + } #ifdef PNG_pHYs_SUPPORTED retval = png_get_pHYs (png_ptr, info_ptr, &x_resolution, &y_resolution, &unit_type); |