Hi,

I found this logic quite strange because a device is a device and it's 
intrinsic limits does not (or shouldn't) depend on the encoding format of the 
data. For me, the gamut information is in the clipping itself, even if the 
device is a theoretical space like sRGB. For the latter, I never expect to be 
"purer" than the primaries and I don't see any meaning of a color space if, 
whatever it can be, it can return the whole Lab range if you go outside the 
"limits" !

I see limitation (clipping) as a definition of the space boundary, not a 
limitation of the data format. It has been scaled to the maximum value of the 
lowest (8 bit) format not the reverse. I can be wrong but thinking the reverse 
is quite twisted... And I don't see color spaces like Adobe, sRGB or similar as 
something fundamentally different from a display profile (my Eizo ColorEdge is 
almost a sRGB device). Showing the sRGB (or other) boundaries is important when 
a document uses this space compared to the other devices (printer and/or 
display).I've always seen sRGB and similar spaces as having an actual 
boundaries ! 

I checked out the document about the floating point encoding. They mainly speak 
about problem of precision and bad limitations of the original ICC standard 
(like XYZ), but boundless conversion is a very specific point (they take 
example of camera profiles) that is not always desired (or mandatory).

Anyway, it's only an opinion and semantic stuff !

Technically, can I create a simple clipping stage (profile) in between (at the 
third position for my example) that clips for any data format (floating point 
included) ?

Moreover, I have to say that the V2 works great ! there is a large improvement 
in some profiles I have that caused some "color flips" (yellow that goes to 
blue) with very saturated colors. Even if I had to change a lot of things 
because of the removal of the ChangeBufferFormat() function, V2 is a large step 
ahead in quality.

J.

-----Message d'origine-----
De : marti.ma...@littlecms.com [mailto:marti.ma...@littlecms.com] 
Envoyé : mercredi 2 juin 2010 12:48
À : Prevost Jerome
Cc : lcms-user@lists.sourceforge.net
Objet : Re: [Lcms-user] Transform difference with older versions.

Hi,

You are seeing the unbounded mode in action, which is
a feature, not a bug. See a posting on my blog about that:

http://littlecms2.blogspot.com/2009/09/unbounded-cmm.html

If you use sRGB, which is a matrix and a set of curves,
where is the gamut information? Right, the gamut is defined
by the device encoding and only by the device encoding.
But then you use double values, so the encoding is no longer
limiting the gamut, and in this case you see no clamping
because there is nothing that forces such clamping. If you
want this effect, you need to specify the encoding you
want to restrict, TYPE_RGB_16, or TYPE_RGB_8, for example.

Regards
Marti

Quoting Prevost Jerome <j.prev...@lectra.com>:

> Hello,
>
> For profiles without any gamut information (like display profiles) , 
> I use to use a < back and forth > transform PCS->Device->PCS using 
> the CreateMultiprofileTransform() function. When I transform the Lab 
> boundary, I got something similar to the gamut boundary of the 
> profile. As I'm migrating to V2, I got different results.
>
> I get sometimes identity. It depends on the profile. For printer 
> ones, it seems to work. For display ones, some of them return 
> identity, other return much larger gamut than expected and perhaps 
> some return the same results than before. I guess that the analysis 
> of the transformation is different according the stages (LUT, matrix, 
> CLUTs and so on..). Probably, it's not the way I should do to get 
> what I expect !
>
> Now, this results in an identity profile if I use this code (sRGB profile) :
>
>      double In[3],Out[3];
>
>      cmsSetLogErrorHandler(ErrorLog);
>      cmsHPROFILE sRGB=cmsCreate_sRGBProfile();
>      cmsHPROFILE XYZ=cmsCreateXYZProfile();
>      cmsHPROFILE Profiles[4]={XYZ,sRGB,sRGB,XYZ};
>
>      cmsHTRANSFORM 
> Trans=cmsCreateMultiprofileTransform(Profiles,4,TYPE_XYZ_DBL,TYPE_XYZ_DBL,INTENT_ABSOLUTE_COLORIMETRIC,cmsFLAGS_HIGHRESPRECALC);
>
>      In[0]=0.75;
>      In[1]=0.50;
>      In[2]=0.45;
>
>      cmsDoTransform(Trans,In,Out,1);
>
>      cmsDeleteTransform(Trans);
>      cmsCloseProfile(sRGB);
>
> The Out array always have the original values whatever the In array 
> contains, not the ones expected because of some gamut mapping. I 
> guess that's it's an optimization somewhere that detects an identity 
> where there is not. Is it normal ? Or, is there a different way now 
> to do this correctly (other function or flags)  ?
>
> Thanks in advance,
>
> J.
>



------------------------------------------------------------------------------

_______________________________________________
Lcms-user mailing list
Lcms-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lcms-user

Reply via email to