int gscms_transform_named_color(gsicc_link_t *icclink, float tint_value, const char* ColorName, gx_color_value device_values[] ) { cmsHPROFILE hTransform = icclink->link_handle; unsigned short *deviceptr = device_values; int index; /* Check if name is present in the profile */ /* If it is not return -1. Caller will need to use an alternate method */ if((index = cmsNamedColorIndex(hTransform, ColorName)) < 0) return -1; /* Get the device value. */ cmsDoTransform(hTransform,&index,deviceptr,1); return(0); }
static void TakeCGATSValues(int nPatch, cmsFloat64Number Float[]) { // At first take the name if SAMPLE_ID is present if (cmsIT8GetPatchName(hIT8in, nPatch, CGATSPatch) == NULL) { FatalError("Sorry, I need 'SAMPLE_ID' on input CGATS to operate."); } // Special handling for named color profiles. // Lookup the name in the names database (the transform) if (InputNamedColor) { const cmsNAMEDCOLORLIST* NamedColorList; int index; NamedColorList = cmsGetNamedColorList(hTrans); if (NamedColorList == NULL) FatalError("Malformed named color profile"); index = cmsNamedColorIndex(NamedColorList, CGATSPatch); if (index < 0) FatalError("Named color '%s' not found in the profile", CGATSPatch); Float[0] = index; return; } // Color is not a spot color, proceed. switch (InputColorSpace) { // Encoding should follow CGATS specification. case cmsSigXYZData: Float[0] = cmsIT8GetDataDbl(hIT8in, CGATSPatch, "XYZ_X") / 100.0; Float[1] = cmsIT8GetDataDbl(hIT8in, CGATSPatch, "XYZ_Y") / 100.0; Float[2] = cmsIT8GetDataDbl(hIT8in, CGATSPatch, "XYZ_Z") / 100.0; break; case cmsSigLabData: Float[0] = cmsIT8GetDataDbl(hIT8in, CGATSPatch, "LAB_L"); Float[1] = cmsIT8GetDataDbl(hIT8in, CGATSPatch, "LAB_A"); Float[2] = cmsIT8GetDataDbl(hIT8in, CGATSPatch, "LAB_B"); break; case cmsSigRgbData: Float[0] = GetIT8Val("RGB_R", 255.0); Float[1] = GetIT8Val("RGB_G", 255.0); Float[2] = GetIT8Val("RGB_B", 255.0); break; case cmsSigGrayData: Float[0] = GetIT8Val("GRAY", 255.0); break; case cmsSigCmykData: Float[0] = GetIT8Val("CMYK_C", 1.0); Float[1] = GetIT8Val("CMYK_M", 1.0); Float[2] = GetIT8Val("CMYK_Y", 1.0); Float[3] = GetIT8Val("CMYK_K", 1.0); break; case cmsSigCmyData: Float[0] = GetIT8Val("CMY_C", 1.0); Float[1] = GetIT8Val("CMY_M", 1.0); Float[2] = GetIT8Val("CMY_Y", 1.0); break; case cmsSig1colorData: case cmsSig2colorData: case cmsSig3colorData: case cmsSig4colorData: case cmsSig5colorData: case cmsSig6colorData: case cmsSig7colorData: case cmsSig8colorData: case cmsSig9colorData: case cmsSig10colorData: case cmsSig11colorData: case cmsSig12colorData: case cmsSig13colorData: case cmsSig14colorData: case cmsSig15colorData: { cmsUInt32Number i, n; n = cmsChannelsOf(InputColorSpace); for (i=0; i < n; i++) { char Buffer[255]; sprintf(Buffer, "%uCLR_%u", n, i+1); Float[i] = GetIT8Val(Buffer, 100.0); } } break; default: { cmsUInt32Number i, n; n = cmsChannelsOf(InputColorSpace); for (i=0; i < n; i++) { char Buffer[255]; sprintf(Buffer, "CHAN_%u", i+1); Float[i] = GetIT8Val(Buffer, 1.0); } } } }