c# - 将 RGB 转换为 CMYK,使用 ICC 配置文件

标签 c# colors converter cmyk color-profile

我正准备将 RGB 颜色转换为 CMYK 以用于打印目的。 此转换的比例是 Adob​​e Photoshop (图像 -> 模式 -> CMYK 颜色)

我尝试了 2 个解决方案,但没有一个返回正确的值:

解决方案 1 - 使用 .NET Framework

一开始,我是按照这些步骤操作的

  • Adobe 下载 ICC 配置文件(windows 版本)

  • 转换#color to CMYK

  • 使用 System.Windows.Media.Color.FromValues//返回颜色 MSDN

  • string convretedColor = string.Format("#{0:X2}{1:X2}{2:X2}", _color.R, _color.G, _color.B)

结果如下:

  • 配置文件:CoatedFOGRA27.icc

  • 原始颜色:#2f00ff

  • 转换后的颜色:#3b4996

  • 使用 Adob​​e Photoshop(相同配置文件)的转换结果:#3b4996 not even close!

解决方案 2 - 使用 Windows 颜色系统 (WCS)

我也尝试了 Codo's solution同样的流程

结果如下:

  • 配置文件:CoatedFOGRA27.icc

  • 原始颜色:#2f00ff

  • 转换后的颜色:#2032FF

  • Photoshop:#3b4996

JSFiddle for compare

编辑

根据 Codo 的评论,我认为我在理解颜色概念方面存在一些基本问题!! (如有错误请指正)

对于任何颜色,我们都有不同的颜色模型,RGBCMYK,...

RGB 显示生成颜色的 (Red Green Blue) 和 CMYK 的组合 (Cyan Magenta Yellow * )。这些模型的值可以很容易地相互转换。

for example :

  • RGB 十六进制:#2F00FF

  • RGB:47 - 0 - 255

  • CMYK:0,816 - 1,000 - 0,000 - 0,000

几乎所有显示器都使用 RGB 来显示颜色。打印的颜色(因为使用 Ink 而不是 LED o ...)与您在显示器上看到的颜色完全不同/

对于这个问题,像Photoshop这样的图像编辑器使用CMYK **MODE**。在这种模式下,如果您选择RGB颜色,编辑器会将其转换为颜色您在打印后看到并显示到屏幕上。此转换完全取决于颜色配置文件(此处为 ICC)

编辑 2

enter image description here

最佳答案

让我试着帮你解决这一切:

1) RGB 是一种描述颜色值的格式。即:红色为 255,0,0。

2) HSV 是另一种描述颜色值的格式。即:红色为 0,100,100

只有这两个可以为您提供数字准确的颜色
您可以将它们视为颜色的数字表示,或者它是真正的 DNA,感谢上帝,显示器能够呈现它们 - 完全按照它们的本来面目呈现。

让我们继续:

3) Lab 是另一种描述颜色值的格式。

54,81,70 对于红色 RGB 是 (255,0,0) 然而..
54,81,70也可以应用于不同的RGB.. (254,0,0)

这是为什么呢?因为 Lab 格式旨在接近人类视觉。
对于人眼来说,(255,0,0) 和 (254,0,0) 之间没有区别
嗯..对于人眼来说不是很准确..
更准确地说是用来获得 Lab 颜色的模型,它打算......

4) CYMK 旨在告诉打印机将青色、黄色和品红色的哪种混合物压印到纸张上,以及 K(深色或黑色)指示在该混合物中压印多少深色。

所以 0%,100%,100%,0% 将为我们提供红色的混合物..
0%、50%、50%、0% 会给我们粉红色。

让我们继续:

您的努力是将显示器中看到的 RGB 调整为打印机的 CMYK。
天知道你为什么要这样做,因为它已经全自动并由司机处理多年了..
但我假设你有你的理由,所以让我们继续,
每台打印机都有略微不同的 CMYK 值,可以混合以获得特定的红色。

这就是 ICC 配置文件发挥作用的地方。
例如,他们通过提供 (1) 原始 RGB-RED 的表格来给出 RED 的标准 (2) 特定打印机中的 CMYK 红色。

因此,根据 ICC 配置文件从 RGB(红色)转换为 CMYK(红色)是符合逻辑的。

但如果您尝试转换回来 - 您会注意到根据特定配置文件的 RED CMYK 可以具有多个数字 RED 值。

这是因为数字颜色分辨率比结果准确得多 打印纸,另一种看待它的方式是说可以在 Lab 上构建特定的打印机 ICC。

现在我知道了..我知道了..你可能已经知道了大部分,如果不是全部的话。
(我写它只是为了确保我们都在书中的同一页上。)

因此,当您说“它们都没有返回正确的值”时 (假设它们 = 转换)你到底是什么意思?! 对我来说一切似乎都是正确的,因为事实上它们确实返回了正确的值 - 用于打印目的。

关于c# - 将 RGB 转换为 CMYK,使用 ICC 配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18272797/

相关文章:

c# - vsjitdebugger.exe(Visual Studio 调试器)- 在生产服务器的任务管理器中出现很多

c# - 打开文件时,Excel 导入数据集会中断

c# - 如何在 C# 中获取进程的主窗口句柄?

python - Pyplot 颜色不符合预期

image - 如何更改图像的整体色调,类似于 Photoshop 的色调调整?

html - Internet Explorer 11 HTML5 音频持续时间 = 无限问题

asp.net - c# 从 html 到 pdf、xls 的转换器

c# - WPF 中的日期时间格式

java - 如何在 Android 中显示 HDR 图片?

Javascript 准确地将 HSB/HSV 颜色转换为 RGB