2011-01-28 28 views
8

¿Hay alguna manera de especificar CMYK colores directamente en un documento XAML?Uso de colores CMYK en WPF/XAML

al prefijarlos con # personaje se crearán colores RGB, pero ¿cómo especificar un color CMYK?

Algunas notas:

  1. La pregunta es NO sobre la conversión de de CMYK a RGB sino usar verdadera CMYK
  2. El propósito es permitir que genera XPS documentos (utilizando System.Windows.Xps .Packaging por ejemplo) ver el color como CMYK y generar códigos de color como "ContextColor /swopcmykprofile.icc a, b, c, d, e" no como "#aarrggbb"

he tratado para definir colores CMYK utilizando ColorContext sin éxito.

+0

Por lo tanto, si crea documento XPS con este método, es que un documento XPS CMYK correcta? – Alireza

+1

Sí, el documento XPS almacena el archivo icc internamente y todas las referencias de color estarán en ese archivo. –

Respuesta

7

¡OK otra vez! Resultó ser mucho más fácil de lo que sin embargo: CMYK es directamente utilizables en XAML:

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

¿Cómo obtiene programáticamente estos valores CMYK? Parece que solo tenemos acceso a los valores convertidos RGB y scRGB, y al perfil uri. – Alireza

+0

Me lo imaginé: 'Color.GetNativeColorValues ​​()' – Alireza

+0

Bueno, ¿también imprimiste esto en PDF? El archivo pdf creado no respeta los canales de color, por lo que, por ejemplo, el negro va a PDF a todos los canales. ¿Sabes algo sobre esto? Incluso, si creamos un XPS e imprimimos en PDF, el resultado todavía utiliza todas las tintas para negro. – Alireza

6

¡Bien! He encontrado la respuesta:

La forma en que WPF utiliza modelos de color es por System.Windows.Media.Color 's constructor FromValues() y la introducción de un perfil de color estática:

El siguiente código, por ejemplo:

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

crea una 100% cian color.

Los perfiles pueden ser descargados desde http://www.eci.org/doku.php?id=en:start

He probado esta solución con XpsDocumentWriter y me confirman que crea el código de color CMYK correcta.

Para XAML es sólo la cuestión de la construcción de un IValueConverter que convierte algo así como "~ C, M, Y, K" (como #RRGGBB para RGB) a un color CMYK verdadera.