【问题标题】:Using CMYK colours in WPF/XAML在 WPF/XAML 中使用 CMYK 颜色
【发布时间】:2011-06-17 04:04:45
【问题描述】:

有没有办法直接在 XAML 文档中指定 CMYK 颜色?

在它们前面加上 # 字符会创建 RGB 颜色,但是如何指定 CMYK 颜色呢?

一些注意事项:

  1. 问题是不是关于将从 CMYK 转换为 RGB,而是要使用真正的 CMYK
  2. 目的是允许生成的 XPS 文档(例如使用 System.Windows.Xps.Packaging)将颜色视为 CMYK 并生成颜色代码为“ContextColor /swopcmykprofile.icc a,b, c,d,e" 不是 "#aarrggbb"

我尝试使用 ColorContext 定义 CMYK 颜色,但没有成功。

【问题讨论】:

  • 那么,如果你用这种方法创建XPS文档,它是一个正确的CMYK xps文档吗?
  • 是的,XPS 文档在内部存储 icc 文件,所有颜色参考都将指向该文件。

标签: wpf xaml colors xps cmyk


【解决方案1】:

好的!我找到了答案:

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”(如 RGB 的 #RRGGBB)之类的内容转换为 真实 CMYK 颜色。

【讨论】:

    【解决方案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">
    

    【讨论】:

    • 如何以编程方式获取这些 CMYK 值?似乎我们只能访问转换后的 RGB 以及 scRGB 值,以及配置文件 uri。
    • 我自己想出来的:Color.GetNativeColorValues()
    • 嗯,你也把这些打印成PDF了吗?创建的 pdf 文件不考虑颜色通道,例如,黑色将 PDF 转到所有通道。你知道吗?即使我们创建一个 XPS 并将其打印为 PDF,结果仍然使用所有黑色墨水。
    猜你喜欢
    • 1970-01-01
    • 2021-08-09
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    • 2017-08-20
    相关资源
    最近更新 更多