|
@@ -68,7 +68,12 @@ void our_InitRGBProfile(int Linear,cmsCIExyYTRIPLE* primaries_pre_quantized, voi
|
|
|
(*ptr)=calloc(1,*psize); cmsSaveProfileToMem(profile4, *ptr, psize);
|
|
|
cmsMLUfree(copy); cmsMLUfree(manu); cmsMLUfree(desc); cmsFreeToneCurve(tonecurve); cmsCloseProfile(profile4);
|
|
|
}
|
|
|
+void our_cmsErrorLogger(cmsContext ContextID,cmsUInt32Number ErrorCode,const char *Text){
|
|
|
+ logPrintNew("[LCMS] %s\n",Text);
|
|
|
+}
|
|
|
void our_InitColorProfiles(){
|
|
|
+ cmsSetLogErrorHandler(our_cmsErrorLogger);
|
|
|
+
|
|
|
cmsCIExyYTRIPLE srgb_primaries_pre_quantized = { {0.639998686, 0.330010138, 1.0}, {0.300003784, 0.600003357, 1.0}, {0.150002046, 0.059997204, 1.0} };
|
|
|
cmsCIExyYTRIPLE adobe_primaries_prequantized = { {0.639996511, 0.329996864, 1.0}, {0.210005295, 0.710004866, 1.0}, {0.149997606, 0.060003644, 1.0} };
|
|
|
char* manu="sRGB chromaticities from A Standard Default Color Space for the Internet - sRGB, http://www.w3.org/Graphics/Color/sRGB; and http://www.color.org/specification/ICC1v43_2010-12.pdf";
|
|
@@ -77,6 +82,54 @@ void our_InitColorProfiles(){
|
|
|
manu="ClayRGB chromaticities as given in Adobe RGB (1998) Color Image Encoding, Version 2005-05, https://www.adobe.com/digitalimag/pdfs/AdobeRGB1998.pdf";
|
|
|
our_InitRGBProfile(1,&adobe_primaries_prequantized,&Our->icc_LinearClay,&Our->iccsize_LinearClay,"Copyright Yiming 2022.",manu,"Yiming's Linear ClayRGB icc profile.");
|
|
|
our_InitRGBProfile(2,&adobe_primaries_prequantized,&Our->icc_Clay,&Our->iccsize_Clay,"Copyright Yiming 2022.",manu,"Yiming's ClayRGB icc profile.");
|
|
|
+
|
|
|
+ real data[12288];
|
|
|
+ real data_new[12288];
|
|
|
+ real cmyk8[16384];
|
|
|
+ for(int i=0;i<16;i++){
|
|
|
+ for(int j=0;j<16;j++){
|
|
|
+ for(int k=0;k<16;k++){
|
|
|
+ real* p=&data[(i*256+j*16+k)*3];
|
|
|
+ p[0]=(real)i/16; p[1]=(real)j/16; p[2]=(real)k/16;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(0){ // TRYING TO CREATE GLSL LUT FOR REAL TIME CMYK PROOFING
|
|
|
+ char path[4096]; getcwd(path,4096); strcat(path,"/SWOP2006_Coated3v2.icc");
|
|
|
+ printf("%s\n",path);
|
|
|
+ cmsHPROFILE cmyk=cmsOpenProfileFromFile(path,"r");
|
|
|
+ cmsHPROFILE srgb=cmsOpenProfileFromMem(Our->icc_sRGB,Our->iccsize_sRGB);
|
|
|
+ cmsHPROFILE argb=cmsOpenProfileFromMem(Our->icc_LinearClay,Our->iccsize_LinearClay);
|
|
|
+ cmsHTRANSFORM htransform=cmsCreateProofingTransform(srgb,TYPE_RGB_DBL,cmyk,TYPE_CMYK_DBL,cmyk,INTENT_ABSOLUTE_COLORIMETRIC,cmsFLAGS_SOFTPROOFING|cmsFLAGS_GAMUTCHECK,cmsFLAGS_HIGHRESPRECALC);
|
|
|
+ cmsDoTransform(htransform,data,cmyk8,4096);
|
|
|
+ htransform=cmsCreateProofingTransform(cmyk,TYPE_CMYK_DBL,srgb,TYPE_RGB_DBL,cmyk,INTENT_ABSOLUTE_COLORIMETRIC,cmsFLAGS_SOFTPROOFING|cmsFLAGS_GAMUTCHECK,cmsFLAGS_HIGHRESPRECALC);
|
|
|
+ cmsDoTransform(htransform,cmyk8,data_new,4096);
|
|
|
+
|
|
|
+ FILE* fp=fopen("transform_out_table","w");
|
|
|
+ for(int i=0;i<16;i++){
|
|
|
+ for(int j=0;j<16;j++){
|
|
|
+ for(int k=0;k<16;k++){
|
|
|
+ real* p=&data_new[(i*256+j*16+k)*3];
|
|
|
+ fprintf(fp,"{%.2lf,%.2lf,%.2lf},",p[0],p[1],p[2]);
|
|
|
+ }
|
|
|
+ fprintf(fp," ");
|
|
|
+ }
|
|
|
+ fprintf(fp,"\n");
|
|
|
+ }
|
|
|
+ fprintf(fp,"\n");
|
|
|
+ for(int i=0;i<16;i++){
|
|
|
+ for(int j=0;j<16;j++){
|
|
|
+ for(int k=0;k<16;k++){
|
|
|
+ real* p=&data[(i*256+j*16+k)*3];
|
|
|
+ fprintf(fp,"{%.2lf,%.2lf,%.2lf},",p[0],p[1],p[2]);
|
|
|
+ }
|
|
|
+ fprintf(fp," ");
|
|
|
+ }
|
|
|
+ fprintf(fp,"\n");
|
|
|
+ }
|
|
|
+ fflush(fp);fclose(fp);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
void ourui_NotesPanel(laUiList *uil, laPropPack *This, laPropPack *DetachedProps, laColumn *UNUSED, int context){
|