//======================================================================== // // sanitychecks.cc // // This file is licensed under the GPLv2 or later // // Copyright (C) 2020 Philipp Knechtges // // To see a description of the changes please see the Changelog file that // came with your tarball or type make ChangeLog if you are building from git // //======================================================================== #include #include #include #include #include #include "sanitychecks.h" #ifdef USE_CMS bool checkICCProfile(const GfxLCMSProfilePtr &profile, const char *filename, cmsUInt32Number UsedDirection, cmsColorSpaceSignature expectedColorSpace) { if (!profile) { fprintf(stderr, "Could not open the ICC profile \"%s\".\n", filename); return false; } if (!cmsIsIntentSupported(profile.get(), INTENT_RELATIVE_COLORIMETRIC, UsedDirection) && !cmsIsIntentSupported(profile.get(), INTENT_ABSOLUTE_COLORIMETRIC, UsedDirection) && !cmsIsIntentSupported(profile.get(), INTENT_SATURATION, UsedDirection) && !cmsIsIntentSupported(profile.get(), INTENT_PERCEPTUAL, LCMS_USED_AS_OUTPUT)) { if (UsedDirection == LCMS_USED_AS_OUTPUT) { fprintf(stderr, "ICC profile \"%s\" is not an output profile.\n", filename); } else if (UsedDirection == LCMS_USED_AS_INPUT) { fprintf(stderr, "ICC profile \"%s\" is not an input profile.\n", filename); } else { fprintf(stderr, "ICC profile \"%s\" is not suitable.\n", filename); } return false; } auto profilecolorspace = cmsGetColorSpace(profile.get()); if (profilecolorspace != expectedColorSpace) { if (expectedColorSpace == cmsSigCmykData) { fprintf(stderr, "Supplied ICC profile \"%s\" is not a CMYK profile.\n", filename); } else if (expectedColorSpace == cmsSigGrayData) { fprintf(stderr, "Supplied ICC profile \"%s\" is not a monochrome profile.\n", filename); } else if (expectedColorSpace == cmsSigRgbData) { fprintf(stderr, "Supplied ICC profile \"%s\" is not a RGB profile.\n", filename); } return false; } return true; } #endif