Using CMYK colours in WPF/XAML

3.2k views Asked by At

Is there any way to specify CMYK colours directly in a XAML document?

prefixing them with # character will create RGB colours, but how to specify a CMYK colour?

Some notes:

  1. The question is NOT about converting from CMYK to RGB but to use real CMYK
  2. The purpose is to allow generated XPS documents (using System.Windows.Xps.Packaging for example) see the colour as CMYK and generate colour codes as "ContextColor /swopcmykprofile.icc a,b,c,d,e" not as "#aarrggbb"

I have tried to define CMYK colours by using ColorContext without any success.

2

There are 2 answers

3
el_shayan On BEST ANSWER

OK again! It turned out to be much more easier than what I though: CMYK is directly usable in XAML:

<Grid Background="ContextColor file://C:/WINDOWS/system32/spool/drivers/color/EuroscaleCoated.icc 1.0,0.0,0.0,1.0,1.0">
0
el_shayan On

OK! I found the answer:

The way that WPF uses colour models is by System.Windows.Media.Color's static constructor FromValues() and introducing a colour profile:

The following code, for example:

var c = Color.FromValues(
               new float[] {1.0f,0.0f,0.0f,0.0f } , 
               new Uri("file://C:/ICCProfile.icc",  UriKind.Absolute));

creates a 100% Cyan colour.

Profiles can be downloaded from http://www.eci.org/doku.php?id=en:start

I tested this solution with XpsDocumentWriter and I confirm that it creates the correct CMYK colour code.

For XAML it is just the matter of building an IValueConverter that converts something like "~C,M,Y,K" (as #RRGGBB for RGB) to a real CMYK colour.