Использование цветов CMYK в WPF/XAML

Есть ли способ указать цвета CMYK непосредственно в документе XAML?

добавление к ним префикса с символом # создаст цвета RGB, но как указать цвет CMYK?

Некоторые примечания:

  1. Вопрос заключается НЕ в преобразовании из CMYK в RGB, а в использовании настоящего CMYK.
  2. Цель состоит в том, чтобы сгенерированные документы XPS (например, с использованием System.Windows.Xps.Packaging) отображали цвет как CMYK и генерировали цветовые коды как "ContextColor /swopcmykprofile.icc a,b,c,d ,e", а не "#aarrggbb"

Я безуспешно пытался определить цвета CMYK с помощью ColorContext.


person el_shayan    schedule 28.01.2011    source источник
comment
Итак, если вы создаете документ XPS с помощью этого метода, является ли он правильным документом XPS CMYK?   -  person Alireza    schedule 12.01.2013
comment
Да, документ XPS хранит файл icc внутри, и все ссылки на цвета будут относиться к этому файлу.   -  person el_shayan    schedule 12.01.2013


Ответы (2)


ОК снова! Это оказалось намного проще, чем я думал: CMYK можно напрямую использовать в XAML:

<Grid Background="ContextColor file://C:/WINDOWS/system32/spool/drivers/color/EuroscaleCoated.icc 1.0,0.0,0.0,1.0,1.0">
person el_shayan    schedule 31.01.2011
comment
Как вы программно получаете эти значения CMYK? Кажется, что у нас есть доступ только к преобразованным значениям RGB, а также значениям scRGB и uri профиля. - person Alireza; 26.01.2013
comment
Сам разобрался: Color.GetNativeColorValues() - person Alireza; 26.01.2013
comment
Ну, ты тоже распечатывал их в PDF? Созданный PDF-файл не учитывает цветовые каналы, поэтому, например, черный цвет переходит в PDF для всех каналов. Вы знаете что-нибудь об этом? Даже если мы создадим XPS и распечатаем его в PDF, в результате все равно будут использоваться все чернила для черного. - person Alireza; 01.04.2013

В ПОРЯДКЕ! Я нашел ответ:

Цветовые модели используются в WPF с помощью статического конструктора System.Windows.Media.Color FromValues() и введения цветового профиля:

Например, следующий код:

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

создает 100% голубой цвет.

Профили можно загрузить с http://www.eci.org/doku.php?id=en:start

Я протестировал это решение с помощью XpsDocumentWriter и подтверждаю, что оно создает правильный цветовой код CMYK.

Для XAML достаточно построить IValueConverter, который преобразует что-то вроде "~C,M,Y,K" (как #RRGGBB для RGB) в настоящий цвет CMYK.

person el_shayan    schedule 31.01.2011