Dear Marti, Thanks for your quick reply!
I am a colour engineer and studying the new ICCv4 architecture. Also, I am a long-term user of Little CMS (as well as Argyll CMS for that matter) and really appreciate your work! Many times I have encountered situations were clipping (bounding) of the data was undesired. The new MPE tools seem to be very useful in this respect. Today, I am simply trying to create a v4 profile which does RGB -> YCbCr -> RGB conversion. It was easy to put it in a v2 profile, *BUT*, using a clut. With ICCv4 and Little CMS 2.0, I can now use a smaller, more accurate and more elegant approach. I will let you know my progress (should be finished today, I guess). Are you sure that CS4 does not support the new MPE tags? (I may have to upgrade). Best regards, Auke > > Hi, > > Congratulations. That's the first question ever > on this list about MPE :-) > > For those of you that don't know what he is talking > about, latest ICC revision does allow a extended > type of profiles that can store data in floating > point encoding and can deal with new structures like > segmented parametric curves. AFAIK Photoshop CS5 > does support such profiles.LittleCMS 2.0 allows > you tou use and create those profiles. > > > The process should be straightforward. Basically > you have to create a pipeline with desired elements, > segmented curves and a matrix in your case, then > savethe pipeline as MPE in a cmsBToDTag. Please see > some code below. Creation of segmented curves takes > most of code. All parameters of cmsCurveSegment are > described in the documentation. > > static > void CreateBToD0(cmsHPROFILE hProfile) > { > cmsPipeline* p; > cmsFloat64Number m[] = { 1, 0, 0, > 0, 1, 0, > 0, 0, 1}; > cmsFloat64Number o[] = { 0, 0, 0}; > cmsStage* Matrix; > cmsStage* Curves; > cmsToneCurve* t[3]; > cmsCurveSegment Seg[2]; > > > // Initialize segmented curve > // Segment 0: Force from minus infinite to 0 to be zero > Seg[0].x0 = -1; > Seg[0].x1 = 0; > Seg[0].Type = 6; > > Seg[0].Params[0] = 1; > Seg[0].Params[1] = 0; > Seg[0].Params[2] = 0; > Seg[0].Params[3] = 0; > Seg[0].Params[4] = 0; > > // Segment 1: From zero to any, power function > Seg[1].x0 = 0; > Seg[1].x1 = 1.0; > Seg[1].Type = 6; > > Seg[1].Params[0] = 1; > Seg[1].Params[1] = 1; > Seg[1].Params[2] = 0; > Seg[1].Params[3] = 0; > Seg[1].Params[4] = 0; > > // Create segmented curve > t[0] = t[1] = t[2] = cmsBuildSegmentedToneCurve(0, 2, Seg); > > // Create empty pipeline > p = cmsPipelineAlloc(0, 3, 3); > > // Create stages > Curves = cmsStageAllocToneCurves(0, 3, t); > Matrix = cmsStageAllocMatrix(0, 3, 3, m, o); > > // Populate pipeline with stages > cmsPipelineInsertStage(p, cmsAT_END, Curves); > cmsPipelineInsertStage(p, cmsAT_END, Matrix); > > // Write the pipeline as BToD0 tag > if (!cmsWriteTag(hProfile, cmsSigBToD0Tag, p)) > { > printf("Error!"); > } > > // Free resources > cmsPipelineFree(p); > cmsFreeToneCurve(t[0]); > } > > > Note that MPE only accepts parametric curves of type > 6, 7 and 8, which corresponds with formula 0, 1, and > 2 in ICCSpecRevision_02_11_06_Float.pdf I did that in > such way to allow both types of curves to coexist in > pipeline structures. > > Also, those profiles will only work in lcms if you > specify float or double types when creating the > transform. The spec requires to include a reduced > precision LUT16 for CMM that does not support such > advanced features. > > Good luck in your efforts, you are using rather new > and unexplored features of lcms. Please let me know > if it worked to you. > > Best regards > Marti > > Quoting Auke Nauta <a...@nautanet.info>: > >> Hi group, >> >> I really could use some help in creating a B2Dx tag(s) in a profile. >> It just needs a segmented tone curve (output unbounded) and a matrix. >> >> For regular B2Ax or A2Bx tags I have no difficulties, I just don't know >> how to create the B2Dx ones. >> I also could not find much information in the docs regarding this. >> >> Can anyone help? >> >> Thanks and greetings, >> Auke Nauta >> >> >> -- >> Everyone knew it was impossible. >> Then an idiot came along who didnt know... >> [original: Marcel Pagnol] >> >> >> ------------------------------------------------------------------------------ >> >> _______________________________________________ >> Lcms-user mailing list >> Lcms-user@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/lcms-user >> > > -- Everyone knew it was impossible. Then an idiot came along who didnt know... [original: Marcel Pagnol] ------------------------------------------------------------------------------ _______________________________________________ Lcms-user mailing list Lcms-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lcms-user