Chalk: Fix loading of PNG files with iCCP

This commit makes some fixes to the way that iCCP profile data is read and
loaded, and adds an additional check to ensure that the PNG file does have
a profile.

It also introduces a shorter libpng version check of the form:
   `#if PNG_LIBPNG_VER < 10500`

This commit fixes issue #20.

Signed-off-by: Mavridis Philippe <mavridisf@gmail.com>
(cherry picked from commit 5d5725effa)
r14.1.x
Mavridis Philippe 12 months ago committed by Michele Calgaro
parent b19ae6acef
commit 72bac0dd3d
Signed by: MicheleC
GPG Key ID: 2A75B7CA8ADED5CF

@ -222,24 +222,23 @@ KisImageBuilder_Result KisPNGConverter::decode(const KURL& uri)
}
bool hasalpha = (color_type == PNG_COLOR_TYPE_RGB_ALPHA || color_type == PNG_COLOR_TYPE_GRAY_ALPHA);
// Read image profile
png_charp profile_name, profile_data;
#if PNG_LIBPNG_VER_MAJOR > 1 || ( PNG_LIBPNG_VER_MAJOR == 1 && PNG_LIBPNG_VER_MINOR >= 5 )
unsigned char* uprofile_data = reinterpret_cast<unsigned char*>(profile_data);
#endif
int compression_type;
png_uint_32 proflen;
int number_of_passes = 1;
if (interlace_type == PNG_INTERLACE_ADAM7)
number_of_passes = png_set_interlace_handling(png_ptr);
// Read image profile
KisProfile* profile = 0;
#if PNG_LIBPNG_VER_MAJOR > 1 || ( PNG_LIBPNG_VER_MAJOR == 1 && PNG_LIBPNG_VER_MINOR >= 5 )
if(png_get_iCCP(png_ptr, info_ptr, &profile_name, &compression_type, &uprofile_data, &proflen))
if (png_get_valid(png_ptr, info_ptr, PNG_INFO_iCCP)) {
png_charp profile_name;
#if PNG_LIBPNG_VER < 10500
png_charp profile_data;
#else
if(png_get_iCCP(png_ptr, info_ptr, &profile_name, &compression_type, &profile_data, &proflen))
png_bytep profile_data;
#endif
int compression_type;
png_uint_32 proflen;
if (png_get_iCCP(png_ptr, info_ptr, &profile_name, &compression_type, &profile_data, &proflen))
{
TQByteArray profile_rawdata;
// XXX: Hardcoded for icc type -- is that correct for us?
@ -257,6 +256,7 @@ KisImageBuilder_Result KisPNGConverter::decode(const KURL& uri)
}
}
}
}
// Retrieve a pointer to the colorspace
KisColorSpace* cs;
@ -636,10 +636,10 @@ KisImageBuilder_Result KisPNGConverter::buildFile(const KURL& uri, KisPaintLayer
} else { // Profile
char* name = new char[(*it)->type().length()+1];
strcpy(name, (*it)->type().ascii());
#if PNG_LIBPNG_VER_MAJOR > 1 || ( PNG_LIBPNG_VER_MAJOR == 1 && PNG_LIBPNG_VER_MINOR >= 5 )
png_set_iCCP(png_ptr, info_ptr, name, PNG_COMPRESSION_TYPE_BASE, (unsigned char*)(*it)->annotation().data(), (*it) -> annotation() . size());
#if PNG_LIBPNG_VER < 10500
png_set_iCCP(png_ptr, info_ptr, name, PNG_COMPRESSION_TYPE_BASE, (png_charp)(*it)->annotation().data(), (*it) -> annotation() . size());
#else
png_set_iCCP(png_ptr, info_ptr, name, PNG_COMPRESSION_TYPE_BASE, (char*)(*it)->annotation().data(), (*it) -> annotation() . size());
png_set_iCCP(png_ptr, info_ptr, name, PNG_COMPRESSION_TYPE_BASE, (png_bytep)(*it)->annotation().data(), (*it) -> annotation() . size());
#endif
}
++it;

Loading…
Cancel
Save