static PyObject * pycms_CreateLabProfile(PyObject *self, PyObject *args) { cmsHPROFILE hProfile; hProfile = cmsCreateLab4Profile(0); if(hProfile==NULL) { Py_INCREF(Py_None); return Py_None; } return Py_BuildValue("O", PyCObject_FromVoidPtr((void *)hProfile, (void *)cmsCloseProfile)); }
libcdr::CDRParserState::CDRParserState() : m_bmps(), m_patterns(), m_vects(), m_pages(), m_documentPalette(), m_texts(), m_colorTransformCMYK2RGB(0), m_colorTransformLab2RGB(0), m_colorTransformRGB2RGB(0) { cmsHPROFILE tmpRGBProfile = cmsCreate_sRGBProfile(); m_colorTransformRGB2RGB = cmsCreateTransform(tmpRGBProfile, TYPE_RGB_8, tmpRGBProfile, TYPE_RGB_8, INTENT_PERCEPTUAL, 0); cmsHPROFILE tmpCMYKProfile = cmsOpenProfileFromMem(CMYK_icc, sizeof(CMYK_icc)/sizeof(CMYK_icc[0])); m_colorTransformCMYK2RGB = cmsCreateTransform(tmpCMYKProfile, TYPE_CMYK_DBL, tmpRGBProfile, TYPE_RGB_8, INTENT_PERCEPTUAL, 0); cmsHPROFILE tmpLabProfile = cmsCreateLab4Profile(0); m_colorTransformLab2RGB = cmsCreateTransform(tmpLabProfile, TYPE_Lab_DBL, tmpRGBProfile, TYPE_RGB_8, INTENT_PERCEPTUAL, 0); cmsCloseProfile(tmpLabProfile); cmsCloseProfile(tmpCMYKProfile); cmsCloseProfile(tmpRGBProfile); }
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"); }
// PCS -> PCS round trip transform, always uses relative intent on the device -> pcs static cmsHTRANSFORM CreateRoundtripXForm(cmsHPROFILE hProfile, cmsUInt32Number nIntent) { cmsHPROFILE hLab = cmsCreateLab4Profile(NULL); cmsHTRANSFORM xform; cmsBool BPC[4] = { FALSE, FALSE, FALSE, FALSE }; cmsFloat64Number States[4] = { 1.0, 1.0, 1.0, 1.0 }; cmsHPROFILE hProfiles[4]; cmsUInt32Number Intents[4]; cmsContext ContextID = cmsGetProfileContextID(hProfile); hProfiles[0] = hLab; hProfiles[1] = hProfile; hProfiles[2] = hProfile; hProfiles[3] = hLab; Intents[0] = INTENT_RELATIVE_COLORIMETRIC; Intents[1] = nIntent; Intents[2] = INTENT_RELATIVE_COLORIMETRIC; Intents[3] = INTENT_RELATIVE_COLORIMETRIC; xform = cmsCreateExtendedTransform(ContextID, 4, hProfiles, BPC, Intents, States, NULL, 0, TYPE_Lab_DBL, TYPE_Lab_DBL, cmsFLAGS_NOCACHE|cmsFLAGS_NOOPTIMIZE); cmsCloseProfile(hLab); return xform; }
cmsHPROFILE OpenStockProfile(const char* File) { if (!File) return cmsCreate_sRGBProfile(); if (stricmp(File, "*Lab") == 0) return cmsCreateLabProfile(NULL); if (stricmp(File, "*Lab4") == 0) return cmsCreateLab4Profile(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; } if (stricmp(File, "*srgb") == 0) return cmsCreate_sRGBProfile(); if (stricmp(File, "*null") == 0) return cmsCreateNULLProfile(); return cmsOpenProfileFromFile(File, "r"); }
// Creates all needed color transforms static cmsBool OpenTransforms(void) { cmsHPROFILE hInput, hOutput, hProof; cmsUInt32Number dwIn, dwOut, dwFlags; cmsNAMEDCOLORLIST* List; int i; // We don't need cache dwFlags = cmsFLAGS_NOCACHE; if (lIsDeviceLink) { hInput = OpenStockProfile(0, cInProf); if (hInput == NULL) return FALSE; hOutput = NULL; hProof = NULL; if (cmsGetDeviceClass(hInput) == cmsSigNamedColorClass) { OutputColorSpace = cmsGetColorSpace(hInput); InputColorSpace = cmsGetPCS(hInput); } else { InputColorSpace = cmsGetColorSpace(hInput); OutputColorSpace = cmsGetPCS(hInput); } // Read colorant tables if present if (cmsIsTag(hInput, cmsSigColorantTableTag)) { List = cmsReadTag(hInput, cmsSigColorantTableTag); InputColorant = cmsDupNamedColorList(List); InputRange = 1; } else InputColorant = ComponentNames(InputColorSpace, TRUE); if (cmsIsTag(hInput, cmsSigColorantTableOutTag)){ List = cmsReadTag(hInput, cmsSigColorantTableOutTag); OutputColorant = cmsDupNamedColorList(List); OutputRange = 1; } else OutputColorant = ComponentNames(OutputColorSpace, FALSE); } else { hInput = OpenStockProfile(0, cInProf); if (hInput == NULL) return FALSE; hOutput = OpenStockProfile(0, cOutProf); if (hOutput == NULL) return FALSE; hProof = NULL; if (cmsGetDeviceClass(hInput) == cmsSigLinkClass || cmsGetDeviceClass(hOutput) == cmsSigLinkClass) FatalError("Use %cl flag for devicelink profiles!\n", SW); InputColorSpace = cmsGetColorSpace(hInput); OutputColorSpace = cmsGetColorSpace(hOutput); // Read colorant tables if present if (cmsIsTag(hInput, cmsSigColorantTableTag)) { List = cmsReadTag(hInput, cmsSigColorantTableTag); InputColorant = cmsDupNamedColorList(List); if (cmsNamedColorCount(InputColorant) <= 3) SetRange(255, TRUE); else SetRange(1, TRUE); // Inks are already divided by 100 in the formatter } else InputColorant = ComponentNames(InputColorSpace, TRUE); if (cmsIsTag(hOutput, cmsSigColorantTableTag)){ List = cmsReadTag(hOutput, cmsSigColorantTableTag); OutputColorant = cmsDupNamedColorList(List); if (cmsNamedColorCount(OutputColorant) <= 3) SetRange(255, FALSE); else SetRange(1, FALSE); // Inks are already divided by 100 in the formatter } else OutputColorant = ComponentNames(OutputColorSpace, FALSE); if (cProofing != NULL) { hProof = OpenStockProfile(0, cProofing); if (hProof == NULL) return FALSE; dwFlags |= cmsFLAGS_SOFTPROOFING; } } // Print information on profiles if (Verbose > 2) { printf("Profile:\n"); PrintProfileInformation(hInput); if (hOutput) { printf("Output profile:\n"); PrintProfileInformation(hOutput); } if (hProof != NULL) { printf("Proofing profile:\n"); PrintProfileInformation(hProof); } } // Input is always in floating point dwIn = cmsFormatterForColorspaceOfProfile(hInput, 0, TRUE); if (lIsDeviceLink) { dwOut = cmsFormatterForPCSOfProfile(hInput, lIsFloat ? 0 : 2, lIsFloat); } else { // 16 bits or floating point (only on output) dwOut = cmsFormatterForColorspaceOfProfile(hOutput, lIsFloat ? 0 : 2, lIsFloat); } // For named color, there is a specialized formatter if (cmsGetDeviceClass(hInput) == cmsSigNamedColorClass) { dwIn = TYPE_NAMED_COLOR_INDEX; InputNamedColor = TRUE; } // Precision mode switch (PrecalcMode) { case 0: dwFlags |= cmsFLAGS_NOOPTIMIZE; break; case 2: dwFlags |= cmsFLAGS_HIGHRESPRECALC; break; case 3: dwFlags |= cmsFLAGS_LOWRESPRECALC; break; case 1: break; default: FatalError("Unknown precalculation mode '%d'", PrecalcMode); } if (BlackPointCompensation) dwFlags |= cmsFLAGS_BLACKPOINTCOMPENSATION; if (GamutCheck) { cmsUInt16Number Alarm[cmsMAXCHANNELS]; if (hProof == NULL) FatalError("I need proofing profile -p for gamut checking!"); for (i=0; i < cmsMAXCHANNELS; i++) Alarm[i] = 0xFFFF; cmsSetAlarmCodes(Alarm); dwFlags |= cmsFLAGS_GAMUTCHECK; } // The main transform hTrans = cmsCreateProofingTransform(hInput, dwIn, hOutput, dwOut, hProof, Intent, ProofingIntent, dwFlags); if (hProof) cmsCloseProfile(hProof); if (hTrans == NULL) return FALSE; // PCS Dump if requested hTransXYZ = NULL; hTransLab = NULL; if (hOutput && Verbose > 1) { cmsHPROFILE hXYZ = cmsCreateXYZProfile(); cmsHPROFILE hLab = cmsCreateLab4Profile(NULL); hTransXYZ = cmsCreateTransform(hInput, dwIn, hXYZ, lIsFloat ? TYPE_XYZ_DBL : TYPE_XYZ_16, Intent, cmsFLAGS_NOCACHE); if (hTransXYZ == NULL) return FALSE; hTransLab = cmsCreateTransform(hInput, dwIn, hLab, lIsFloat? TYPE_Lab_DBL : TYPE_Lab_16, Intent, cmsFLAGS_NOCACHE); if (hTransLab == NULL) return FALSE; cmsCloseProfile(hXYZ); cmsCloseProfile(hLab); } if (hInput) cmsCloseProfile(hInput); if (hOutput) cmsCloseProfile(hOutput); return TRUE; }
cmsHPROFILE dt_colorspaces_create_lab_profile() { return cmsCreateLab4Profile(cmsD50_xyY()); }
/** * mcm_picker_refresh_results: **/ static void mcm_picker_refresh_results (void) { McmXyz *xyz = NULL; GtkImage *image; GtkLabel *label; GdkPixbuf *pixbuf = NULL; gdouble color_xyz[3]; guint8 color_rgb[3]; gdouble color_lab[3]; gdouble color_error[3]; gchar *text_xyz = NULL; gchar *text_lab = NULL; gchar *text_rgb = NULL; gchar *text_error = NULL; cmsHPROFILE profile_xyz; cmsHPROFILE profile_rgb; cmsHPROFILE profile_lab; cmsHTRANSFORM transform_rgb; cmsHTRANSFORM transform_lab; cmsHTRANSFORM transform_error; /* nothing set yet */ if (profile_filename == NULL) goto out; /* get new value */ g_object_get (calibrate, "xyz", &xyz, NULL); /* create new pixbuf of the right size */ pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, 200, 200); /* get values */ g_object_get (xyz, "cie-x", &color_xyz[0], "cie-y", &color_xyz[1], "cie-z", &color_xyz[2], NULL); /* lcms scales these for some reason */ color_xyz[0] /= 100.0f; color_xyz[1] /= 100.0f; color_xyz[2] /= 100.0f; /* get profiles */ profile_xyz = cmsCreateXYZProfile (); profile_rgb = cmsOpenProfileFromFile (profile_filename, "r"); profile_lab = cmsCreateLab4Profile (cmsD50_xyY ()); /* create transforms */ transform_rgb = cmsCreateTransform (profile_xyz, TYPE_XYZ_DBL, profile_rgb, TYPE_RGB_8, INTENT_PERCEPTUAL, 0); if (transform_rgb == NULL) goto out; transform_lab = cmsCreateTransform (profile_xyz, TYPE_XYZ_DBL, profile_lab, TYPE_Lab_DBL, INTENT_PERCEPTUAL, 0); if (transform_lab == NULL) goto out; transform_error = cmsCreateTransform (profile_rgb, TYPE_RGB_8, profile_xyz, TYPE_XYZ_DBL, INTENT_PERCEPTUAL, 0); if (transform_error == NULL) goto out; cmsDoTransform (transform_rgb, color_xyz, color_rgb, 1); cmsDoTransform (transform_lab, color_xyz, color_lab, 1); cmsDoTransform (transform_error, color_rgb, color_error, 1); /* destroy lcms state */ cmsDeleteTransform (transform_rgb); cmsDeleteTransform (transform_lab); cmsDeleteTransform (transform_error); cmsCloseProfile (profile_xyz); cmsCloseProfile (profile_rgb); cmsCloseProfile (profile_lab); /* set XYZ */ label = GTK_LABEL (gtk_builder_get_object (builder, "label_xyz")); text_xyz = g_strdup_printf ("%.3f, %.3f, %.3f", color_xyz[0], color_xyz[1], color_xyz[2]); gtk_label_set_label (label, text_xyz); /* set LAB */ label = GTK_LABEL (gtk_builder_get_object (builder, "label_lab")); text_lab = g_strdup_printf ("%.3f, %.3f, %.3f", color_lab[0], color_lab[1], color_lab[2]); gtk_label_set_label (label, text_lab); /* set RGB */ label = GTK_LABEL (gtk_builder_get_object (builder, "label_rgb")); text_rgb = g_strdup_printf ("%i, %i, %i (#%02X%02X%02X)", color_rgb[0], color_rgb[1], color_rgb[2], color_rgb[0], color_rgb[1], color_rgb[2]); gtk_label_set_label (label, text_rgb); mcm_picker_set_pixbuf_color (pixbuf, color_rgb[0], color_rgb[1], color_rgb[2]); /* set error */ label = GTK_LABEL (gtk_builder_get_object (builder, "label_error")); text_error = g_strdup_printf ("%.1f%%, %.1f%%, %.1f%%", ABS ((color_error[0] - color_xyz[0]) / color_xyz[0] * 100), ABS ((color_error[1] - color_xyz[1]) / color_xyz[1] * 100), ABS ((color_error[2] - color_xyz[2]) / color_xyz[2] * 100)); gtk_label_set_label (label, text_error); /* set image */ image = GTK_IMAGE (gtk_builder_get_object (builder, "image_preview")); gtk_image_set_from_pixbuf (image, pixbuf); out: g_free (text_xyz); g_free (text_lab); g_free (text_rgb); g_free (text_error); if (xyz != NULL) g_object_unref (xyz); if (pixbuf != NULL) g_object_unref (pixbuf); }
static void gcm_picker_refresh_results (GcmPickerPrivate *priv) { cmsCIExyY xyY; cmsHPROFILE profile_lab; cmsHPROFILE profile_rgb; cmsHPROFILE profile_xyz; cmsHTRANSFORM transform_error; cmsHTRANSFORM transform_lab; cmsHTRANSFORM transform_rgb; gboolean ret; CdColorLab color_lab; CdColorRGB8 color_rgb; CdColorXYZ color_error; CdColorXYZ color_xyz; gdouble temperature = 0.0f; GtkImage *image; GtkLabel *label; g_autoptr(GdkPixbuf) pixbuf = NULL; g_autofree gchar *text_ambient = NULL; g_autofree gchar *text_error = NULL; g_autofree gchar *text_lab = NULL; g_autofree gchar *text_rgb = NULL; g_autofree gchar *text_temperature = NULL; g_autofree gchar *text_whitepoint = NULL; g_autofree gchar *text_xyz = NULL; /* nothing set yet */ if (priv->profile_filename == NULL) return; /* copy as we're modifying the value */ cd_color_xyz_copy (&priv->last_sample, &color_xyz); /* create new pixbuf of the right size */ image = GTK_IMAGE (gtk_builder_get_object (priv->builder, "image_preview")); pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, gtk_widget_get_allocated_width (GTK_WIDGET (image)), gtk_widget_get_allocated_height (GTK_WIDGET (image))); /* lcms scales these for some reason */ color_xyz.X /= 100.0f; color_xyz.Y /= 100.0f; color_xyz.Z /= 100.0f; /* get profiles */ profile_xyz = cmsCreateXYZProfile (); profile_rgb = cmsOpenProfileFromFile (priv->profile_filename, "r"); profile_lab = cmsCreateLab4Profile (cmsD50_xyY ()); /* create transforms */ transform_rgb = cmsCreateTransform (profile_xyz, TYPE_XYZ_DBL, profile_rgb, TYPE_RGB_8, INTENT_PERCEPTUAL, 0); if (transform_rgb == NULL) return; transform_lab = cmsCreateTransform (profile_xyz, TYPE_XYZ_DBL, profile_lab, TYPE_Lab_DBL, INTENT_PERCEPTUAL, 0); if (transform_lab == NULL) return; transform_error = cmsCreateTransform (profile_rgb, TYPE_RGB_8, profile_xyz, TYPE_XYZ_DBL, INTENT_PERCEPTUAL, 0); if (transform_error == NULL) return; cmsDoTransform (transform_rgb, &color_xyz, &color_rgb, 1); cmsDoTransform (transform_lab, &color_xyz, &color_lab, 1); cmsDoTransform (transform_error, &color_rgb, &color_error, 1); /* destroy lcms state */ cmsDeleteTransform (transform_rgb); cmsDeleteTransform (transform_lab); cmsDeleteTransform (transform_error); cmsCloseProfile (profile_xyz); cmsCloseProfile (profile_rgb); cmsCloseProfile (profile_lab); /* set XYZ */ label = GTK_LABEL (gtk_builder_get_object (priv->builder, "label_xyz")); text_xyz = g_strdup_printf ("%.3f, %.3f, %.3f", priv->last_sample.X, priv->last_sample.Y, priv->last_sample.Z); gtk_label_set_label (label, text_xyz); /* set LAB */ label = GTK_LABEL (gtk_builder_get_object (priv->builder, "label_lab")); text_lab = g_strdup_printf ("%.3f, %.3f, %.3f", color_lab.L, color_lab.a, color_lab.b); gtk_label_set_label (label, text_lab); /* set whitepoint */ cmsXYZ2xyY (&xyY, (cmsCIEXYZ *)&priv->last_sample); label = GTK_LABEL (gtk_builder_get_object (priv->builder, "label_whitepoint")); text_whitepoint = g_strdup_printf ("%.3f,%.3f [%.3f]", xyY.x, xyY.y, xyY.Y); gtk_label_set_label (label, text_whitepoint); /* set temperature */ ret = cmsTempFromWhitePoint (&temperature, &xyY); if (ret) { /* round to nearest 10K */ temperature = (((guint) temperature) / 10) * 10; } label = GTK_LABEL (gtk_builder_get_object (priv->builder, "label_temperature")); text_temperature = g_strdup_printf ("%.0fK", temperature); gtk_label_set_label (label, text_temperature); /* set RGB */ label = GTK_LABEL (gtk_builder_get_object (priv->builder, "label_rgb")); text_rgb = g_strdup_printf ("%i, %i, %i (#%02X%02X%02X)", color_rgb.R, color_rgb.G, color_rgb.B, color_rgb.R, color_rgb.G, color_rgb.B); gtk_label_set_label (label, text_rgb); gcm_picker_set_pixbuf_color (pixbuf, color_rgb.R, color_rgb.G, color_rgb.B); /* set error */ label = GTK_LABEL (gtk_builder_get_object (priv->builder, "label_error")); if (color_xyz.X > 0.01f && color_xyz.Y > 0.01f && color_xyz.Z > 0.01f) { text_error = g_strdup_printf ("%.1f%%, %.1f%%, %.1f%%", ABS ((color_error.X - color_xyz.X) / color_xyz.X * 100), ABS ((color_error.Y - color_xyz.Y) / color_xyz.Y * 100), ABS ((color_error.Z - color_xyz.Z) / color_xyz.Z * 100)); gtk_label_set_label (label, text_error); } else { /* TRANSLATORS: this is when the error is invalid */ gtk_label_set_label (label, _("Unknown")); } /* set ambient */ label = GTK_LABEL (gtk_builder_get_object (priv->builder, "label_ambient")); if (priv->last_ambient < 0) { /* TRANSLATORS: this is when the ambient light level is unknown */ gtk_label_set_label (label, _("Unknown")); } else { text_ambient = g_strdup_printf ("%.1f Lux", priv->last_ambient); gtk_label_set_label (label, text_ambient); } /* set image */ gtk_image_set_from_pixbuf (image, pixbuf); }
void Color::LoadICCProfiles() { if(m_iccSearchPaths!= NULL){ delete m_iccSearchPaths; } const Int32 NUMSEARCHPATHS = 4; m_iccSearchPaths = new String[NUMSEARCHPATHS]; Filename cmykDir = GeGetPluginPath(); cmykDir += Filename(String("cmyk")); m_iccSearchPaths[0] = cmykDir.GetString(); m_iccSearchPaths[1] = "/Library/ColorSync/Profiles/"; m_iccSearchPaths[2] = "/Users/vidarn/Library/ColorSync"; m_iccSearchPaths[3] = "C:\\Windows\\System32\\Spool\\Drivers\\Color\\"; Logger::AddLine("Creating LAB profile",1); m_LABProfile = cmsCreateLab4Profile(NULL); Logger::AddLine("Creating default sRGB profile",1); m_displayProfile = cmsCreate_sRGBProfile(); m_RGBProfiles.Insert(vnColorProfile("sRGB",m_displayProfile),0); for(Int32 i=0;i<NUMSEARCHPATHS;++i){ BrowseFiles* bf = BrowseFiles::Alloc(); Filename dir(m_iccSearchPaths[i]); bf->Init(dir,FALSE); int RGBPos = m_RGBProfiles.GetCount(); int CMYKPos = m_CMYKProfiles.GetCount(); int spotPos = m_spotProfiles.GetCount(); if (bf) { while (bf->GetNext()) { Filename fileName = bf->GetFilename(); fileName.SetDirectory(dir); String str = fileName.GetString(); Char *buffer = new Char[str.GetCStringLen()+1]; str.GetCString(buffer,str.GetCStringLen()+1); Logger::AddLine(buffer,1); cmsHPROFILE profile = cmsOpenProfileFromFile(buffer, "r"); if(profile != NULL){ cmsColorSpaceSignature sig = cmsGetColorSpace(profile); Int32 length = cmsGetProfileInfoASCII(profile,cmsInfoDescription,"en","US",NULL,0); Char *buffer2 = new Char[length]; cmsGetProfileInfoASCII(profile,cmsInfoDescription,"en","US",buffer2,length); String info(buffer2); int pt = _cmsLCMScolorSpace(sig); if(PT_RGB == pt){ Logger::AddLine("RGB profile",1); m_RGBProfiles.Insert(vnColorProfile(info,profile),RGBPos); RGBPos++; } if(PT_CMYK == pt){ cmsHTRANSFORM xform = cmsCreateTransform(profile,TYPE_NAMED_COLOR_INDEX,m_displayProfile,TYPE_RGB_DBL,INTENT_PERCEPTUAL,0); if(xform != NULL){ cmsNAMEDCOLORLIST* colorList = cmsGetNamedColorList(xform); if(colorList != NULL){ m_spotProfiles.Insert(vnColorProfile(info,profile),spotPos); spotPos++; } else{ Logger::AddLine("CMYK profile",1); m_CMYKProfiles.Insert(vnColorProfile(info,profile),CMYKPos); CMYKPos++; } cmsDeleteTransform(xform); } } delete buffer2; } else { Logger::AddLine("Invalid",1); } delete buffer; } } BrowseFiles::Free(bf); } }