Hi,
> I would like to know if there is a way to create a simple abstract
> profile using only a 3x3 matrix, for example a XYZ<->XYZ profile with
> a Bradford matrix transform without creating heavy 3D Luts or other
> big structures. A profile similar to a monitor one but with PCS<->PCS
> transform would be great, but I don't know if it's possible or even
> accepted by the ICC standard...
It is certainly possible. You need, however, a V4 profile. AToB0 tag
needs tone curves + matrix/offset + tone curves The code in lcms 2
would be something like the code I'm attaching below.
Hope this helps
Marti
---
#include "lcms2.h"
int main(void)
{
cmsHPROFILE hProfile;
cmsPipeline* Pipeline = cmsPipelineAlloc(0, 3, 3);
cmsFloat64Number Data[] = { 1, 0, 0,
0, 1, 0,
0, 0, 1};
cmsFloat64Number Offset[] = { 0, 0, 0 };
cmsToneCurve* Linear3[3];
hProfile = cmsCreateProfilePlaceholder(0);
cmsSetProfileVersion(hProfile, 4.2);
cmsSetDeviceClass(hProfile, cmsSigAbstractClass);
cmsSetColorSpace(hProfile, cmsSigXYZData);
cmsSetPCS(hProfile, cmsSigXYZData);
Linear3[0] = Linear3[1] = Linear3[2] = cmsBuildGamma(0, 1.0);
cmsPipelineInsertStage(Pipeline, cmsAT_BEGIN,
cmsStageAllocToneCurves(0, 3, Linear3));
cmsPipelineInsertStage(Pipeline, cmsAT_END, cmsStageAllocMatrix(0,
3, 3, Data, Offset));
cmsPipelineInsertStage(Pipeline, cmsAT_END,
cmsStageAllocToneCurves(0, 3, Linear3));
cmsFreeToneCurve(Linear3[0]);
cmsWriteTag(hProfile, cmsSigAToB0Tag, Pipeline);
cmsPipelineFree(Pipeline);
cmsSaveProfileToFile(hProfile, "abstract_xyz.icc");
cmsCloseProfile(hProfile);
return 0;
}
------------------------------------------------------------------------------
_______________________________________________
Lcms-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/lcms-user