/****************************************************************************** * CreateColorTransformW [MSCMS.@] * * Create a color transform. * * PARAMS * space [I] Input color space. * dest [I] Color profile of destination device. * target [I] Color profile of target device. * flags [I] Flags. * * RETURNS * Success: Handle to a transform. * Failure: NULL */ HTRANSFORM WINAPI CreateColorTransformW( LPLOGCOLORSPACEW space, HPROFILE dest, HPROFILE target, DWORD flags ) { HTRANSFORM ret = NULL; #ifdef HAVE_LCMS struct transform transform; struct profile *dst, *tgt = NULL; cmsHPROFILE cmsinput, cmsoutput, cmstarget = NULL; DWORD in_format, out_format, proofing = 0; int intent; TRACE( "( %p, %p, %p, 0x%08x )\n", space, dest, target, flags ); if (!space || !(dst = grab_profile( dest ))) return FALSE; if (target && !(tgt = grab_profile( target ))) { release_profile( dst ); return FALSE; } intent = space->lcsIntent > 3 ? INTENT_PERCEPTUAL : space->lcsIntent; TRACE( "lcsIntent: %x\n", space->lcsIntent ); TRACE( "lcsCSType: %s\n", MSCMS_dbgstr_tag( space->lcsCSType ) ); TRACE( "lcsFilename: %s\n", debugstr_w( space->lcsFilename ) ); in_format = TYPE_RGB_16; out_format = from_profile( dest ); cmsinput = cmsCreate_sRGBProfile(); /* FIXME: create from supplied color space */ if (target) { proofing = cmsFLAGS_SOFTPROOFING; cmstarget = tgt->cmsprofile; } cmsoutput = dst->cmsprofile; transform.cmstransform = cmsCreateProofingTransform(cmsinput, in_format, cmsoutput, out_format, cmstarget, intent, INTENT_ABSOLUTE_COLORIMETRIC, proofing); ret = create_transform( &transform ); if (tgt) release_profile( tgt ); release_profile( dst ); #endif /* HAVE_LCMS */ return ret; }
static DWORD from_profile( HPROFILE profile ) { PROFILEHEADER header; GetColorProfileHeader( profile, &header ); TRACE( "color space: 0x%08x %s\n", header.phDataColorSpace, MSCMS_dbgstr_tag( header.phDataColorSpace ) ); switch (header.phDataColorSpace) { case 0x434d594b: return TYPE_CMYK_16; /* 'CMYK' */ case 0x47524159: return TYPE_GRAY_16; /* 'GRAY' */ case 0x4c616220: return TYPE_Lab_16; /* 'Lab ' */ case 0x52474220: return TYPE_RGB_16; /* 'RGB ' */ case 0x58595a20: return TYPE_XYZ_16; /* 'XYZ ' */ default: WARN("unhandled format\n"); return TYPE_RGB_16; } }
BOOL WINAPI SelectCMM( DWORD id ) { FIXME( "(%s) stub\n", MSCMS_dbgstr_tag(id) ); return TRUE; }
BOOL WINAPI UnregisterCMMW( PCWSTR machine, DWORD id ) { FIXME( "( %p, %s ) stub\n", machine, MSCMS_dbgstr_tag(id) ); return TRUE; }
BOOL WINAPI RegisterCMMW( PCWSTR machine, DWORD id, PCWSTR dll ) { FIXME( "( %p, %s, %p ) stub\n", machine, MSCMS_dbgstr_tag(id), dll ); return TRUE; }