static cmsHPROFILE gimp_color_profile_new_d65_gray_linear_internal (void) { cmsHPROFILE profile; /* white point is D65 from the sRGB specs */ cmsCIExyY whitepoint = { 0.3127, 0.3290, 1.0 }; cmsToneCurve *curve = cmsBuildGamma (NULL, 1.0); profile = cmsCreateGrayProfile (&whitepoint, curve); cmsFreeToneCurve (curve); gimp_color_profile_set_tag (profile, cmsSigProfileDescriptionTag, "GIMP built-in D65 Linear Grayscale"); gimp_color_profile_set_tag (profile, cmsSigDeviceMfgDescTag, "GIMP"); gimp_color_profile_set_tag (profile, cmsSigDeviceModelDescTag, "D65 Linear Grayscale"); gimp_color_profile_set_tag (profile, cmsSigCopyrightTag, "Public Domain"); return profile; }
static cmsHPROFILE * gimp_color_profile_new_d50_gray_lab_trc_internal (void) { cmsHPROFILE profile; /* white point is D50 from the ICC profile illuminant specs */ cmsCIExyY whitepoint = {0.345702915, 0.358538597, 1.0}; cmsFloat64Number lab_parameters[5] = { 3.0, 1.0 / 1.16, 0.16 / 1.16, 2700.0 / 24389.0, 0.08000 }; cmsToneCurve *curve = cmsBuildParametricToneCurve (NULL, 4, lab_parameters); profile = cmsCreateGrayProfile (&whitepoint, curve); cmsFreeToneCurve (curve); gimp_color_profile_set_tag (profile, cmsSigProfileDescriptionTag, "GIMP built-in D50 Grayscale with LAB L TRC"); gimp_color_profile_set_tag (profile, cmsSigDeviceMfgDescTag, "GIMP"); gimp_color_profile_set_tag (profile, cmsSigDeviceModelDescTag, "D50 Grayscale with LAB L TRC"); gimp_color_profile_set_tag (profile, cmsSigCopyrightTag, "Public Domain"); return profile; }
static cmsHPROFILE * gimp_color_profile_new_d65_gray_srgb_trc_internal (void) { cmsHPROFILE profile; /* white point is D65 from the sRGB specs */ cmsCIExyY whitepoint = { 0.3127, 0.3290, 1.0 }; cmsFloat64Number srgb_parameters[5] = { 2.4, 1.0 / 1.055, 0.055 / 1.055, 1.0 / 12.92, 0.04045 }; cmsToneCurve *curve = cmsBuildParametricToneCurve (NULL, 4, srgb_parameters); profile = cmsCreateGrayProfile (&whitepoint, curve); cmsFreeToneCurve (curve); gimp_color_profile_set_tag (profile, cmsSigProfileDescriptionTag, "GIMP built-in D65 Grayscale with sRGB TRC"); gimp_color_profile_set_tag (profile, cmsSigDeviceMfgDescTag, "GIMP"); gimp_color_profile_set_tag (profile, cmsSigDeviceModelDescTag, "D65 Grayscale with sRGB TRC"); gimp_color_profile_set_tag (profile, cmsSigCopyrightTag, "Public Domain"); return profile; }
static cmsHPROFILE OpenProfile(const char* File) { if (!File) return cmsCreate_sRGBProfile(); if (stricmp(File, "*sRGB") == 0) return cmsCreate_sRGBProfile(NULL); if (stricmp(File, "*Lab") == 0) return cmsCreateLabProfile(NULL); if (stricmp(File, "*LabD65") == 0) { cmsCIExyY D65xyY; cmsWhitePointFromTemp(6504, &D65xyY); return cmsCreateLabProfile(&D65xyY); } if (stricmp(File, "*XYZ") == 0) return cmsCreateXYZProfile(); if (stricmp(File, "*Gray22") == 0) { LPGAMMATABLE Gamma = cmsBuildGamma(256, 2.2); cmsHPROFILE hProfile = cmsCreateGrayProfile(cmsD50_xyY(), Gamma); cmsFreeGamma(Gamma); return hProfile; } return cmsOpenProfileFromFile(File, "r"); }
static cmsHPROFILE OpenProfile(const char* File) { cmsHPROFILE h; if (!File) return cmsCreate_sRGBProfile(); if (stricmp(File, "*Lab") == 0) return cmsCreateLabProfile(NULL); if (stricmp(File, "*XYZ") == 0) return cmsCreateXYZProfile(); if (stricmp(File, "*srgb") == 0) return cmsCreate_sRGBProfile(); if (stricmp(File, "*Gray22") == 0) { LPGAMMATABLE Gamma = cmsBuildGamma(256, 2.2); cmsHPROFILE hProfile = cmsCreateGrayProfile(cmsD50_xyY(), Gamma); cmsFreeGamma(Gamma); return hProfile; } if (stricmp(File, "*Lin2222") == 0) { LPGAMMATABLE Gamma = cmsBuildGamma(256, 2.2); LPGAMMATABLE Gamma4[4]; cmsHPROFILE hProfile; Gamma4[0] = Gamma4[1] = Gamma4[2] = Gamma4[3] = Gamma; hProfile = cmsCreateLinearizationDeviceLink(icSigCmykData, Gamma4); cmsFreeGamma(Gamma); return hProfile; } h = cmsOpenProfileFromFile(File, "r"); if (cmsGetDeviceClass(h) == icSigNamedColorClass) FatalError("ERROR: Cannot make devicelink of named color profiles!"); return h; }
static void init(void) { cmsCIEXYZ D65_XYZ = {0.95047, 1.0, 1.08883 }; cmsCIExyY D65; cmsXYZ2xyY(&D65, &D65_XYZ); cmsToneCurve *linear = cmsBuildGamma(NULL, 1.0); cmsToneCurve *linrgb[3] = {linear,linear,linear}; cmsCIExyYTRIPLE primaries = { {0.64, 0.33, 1.0}, {0.30, 0.60, 1.0}, {0.15, 0.06, 1.0} }; cmsFloat64Number P[5] = { 2.4, 1. / 1.055, 0.055 / 1.055, 1. / 12.92, 0.04045 }; cmsToneCurve *srgb = cmsBuildParametricToneCurve(NULL, 4, P); cmsToneCurve *srgbcurve[3] = {srgb,srgb,srgb}; cmsHPROFILE hsRGB = cmsCreateRGBProfile(&D65, &primaries, srgbcurve); cmsHPROFILE hLab = cmsCreateLab4Profile(NULL); cmsHPROFILE hlRGB = cmsCreateRGBProfile(&D65, &primaries, linrgb); cmsHPROFILE hlGray = cmsCreateGrayProfile(cmsD50_xyY(), linear); cmsSetHeaderFlags(hlGray, cmsEmbeddedProfileTrue); cmsSaveProfileToFile(hlGray,"lgray.icc"); cmsSetHeaderFlags(hlRGB, cmsEmbeddedProfileTrue); cmsSaveProfileToFile(hlRGB,"lrgb.icc"); xform_srgb_to_lrgb = cmsCreateTransform(hsRGB, TYPE_RGB_DBL, hlRGB, TYPE_RGB_DBL, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE /* preserve precision */ ); xform_srgb_to_lab = cmsCreateTransform(hsRGB, TYPE_RGB_DBL, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE); xform_srgb_to_lgray = cmsCreateTransform(hsRGB, TYPE_RGB_DBL, hlGray, TYPE_GRAY_DBL, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE); cmsCloseProfile(hsRGB); cmsCloseProfile(hlRGB); cmsCloseProfile(hLab); cmsCloseProfile(hlGray); cmsFreeToneCurve(linear); cmsFreeToneCurve(srgb); cmsSetLogErrorHandler(errlog); /* sRGB, RGB, Lab, Gray */ printf("R',G',B',R,G,B,L,a,b,Gray\n"); }
static PyObject * pycms_CreateGrayProfile(PyObject *self, PyObject *args) { cmsHPROFILE hProfile; cmsToneCurve *tonecurve; tonecurve = cmsBuildGamma(NULL, 2.2); hProfile = cmsCreateGrayProfile(0, tonecurve); cmsFreeToneCurve(tonecurve); if(hProfile==NULL) { Py_INCREF(Py_None); return Py_None; } return Py_BuildValue("O", PyCObject_FromVoidPtr((void *)hProfile, (void *)cmsCloseProfile)); }
static PyObject * pycms_CreateGrayProfile(PyObject *self, PyObject *args) { cmsHPROFILE hProfile; LPGAMMATABLE gamma; cmsErrorAction(LCMS_ERROR_IGNORE); gamma = cmsBuildGamma(256, 2.2); hProfile = cmsCreateGrayProfile(cmsD50_xyY(), gamma); cmsFreeGamma(gamma); if(hProfile==NULL) { Py_INCREF(Py_None); return Py_None; } return Py_BuildValue("O", PyCObject_FromVoidPtr((void *)hProfile, (void *)cmsCloseProfile)); }