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 <[email protected]>:
>
>> 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
>> [email protected]
>> 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/lcms-user