Partially circumvent a Little CMS bug
This commit is contained in:
parent
3c8a280546
commit
ae8dc3070a
|
@ -30,12 +30,16 @@
|
||||||
#include <lcms2_fast_float.h>
|
#include <lcms2_fast_float.h>
|
||||||
#endif // HAVE_LCMS2_FAST_FLOAT
|
#endif // HAVE_LCMS2_FAST_FLOAT
|
||||||
|
|
||||||
|
// https://github.com/mm2/Little-CMS/issues/430
|
||||||
|
static bool g_broken_cms_premul;
|
||||||
|
|
||||||
void
|
void
|
||||||
fiv_io_profile_init(void)
|
fiv_io_profile_init(void)
|
||||||
{
|
{
|
||||||
// TODO(p): Use Little CMS with contexts instead.
|
// TODO(p): Use Little CMS with contexts instead.
|
||||||
#ifdef HAVE_LCMS2_FAST_FLOAT
|
#ifdef HAVE_LCMS2_FAST_FLOAT
|
||||||
cmsPluginTHR(NULL, cmsFastFloatExtensions());
|
if (cmsPluginTHR(NULL, cmsFastFloatExtensions()))
|
||||||
|
g_broken_cms_premul = LCMS_VERSION <= 2160;
|
||||||
#endif // HAVE_LCMS2_FAST_FLOAT
|
#endif // HAVE_LCMS2_FAST_FLOAT
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -300,6 +304,8 @@ fiv_io_profile_argb32(FivIoImage *image,
|
||||||
{
|
{
|
||||||
g_return_if_fail(image->format == CAIRO_FORMAT_ARGB32);
|
g_return_if_fail(image->format == CAIRO_FORMAT_ARGB32);
|
||||||
|
|
||||||
|
// TODO: With g_no_cms_premultiplication,
|
||||||
|
// this probably also needs to be wrapped in un-premultiplication.
|
||||||
fiv_io_profile_rgb_direct(image->data, image->width, image->height,
|
fiv_io_profile_rgb_direct(image->data, image->width, image->height,
|
||||||
source, target,
|
source, target,
|
||||||
FIV_IO_PROFILE_ARGB32_PREMUL, FIV_IO_PROFILE_ARGB32_PREMUL);
|
FIV_IO_PROFILE_ARGB32_PREMUL, FIV_IO_PROFILE_ARGB32_PREMUL);
|
||||||
|
@ -311,6 +317,9 @@ fiv_io_profile_argb32_premultiply(
|
||||||
{
|
{
|
||||||
if (image->format != CAIRO_FORMAT_ARGB32) {
|
if (image->format != CAIRO_FORMAT_ARGB32) {
|
||||||
fiv_io_profile_xrgb32(image, source, target);
|
fiv_io_profile_xrgb32(image, source, target);
|
||||||
|
} else if (g_broken_cms_premul) {
|
||||||
|
fiv_io_profile_xrgb32(image, source, target);
|
||||||
|
fiv_io_premultiply_argb32(image);
|
||||||
} else if (!fiv_io_profile_rgb_direct(image->data,
|
} else if (!fiv_io_profile_rgb_direct(image->data,
|
||||||
image->width, image->height, source, target,
|
image->width, image->height, source, target,
|
||||||
FIV_IO_PROFILE_ARGB32, FIV_IO_PROFILE_ARGB32_PREMUL)) {
|
FIV_IO_PROFILE_ARGB32, FIV_IO_PROFILE_ARGB32_PREMUL)) {
|
||||||
|
|
Loading…
Reference in New Issue