【发布时间】:2013-02-08 04:51:34
【问题描述】:
我需要将 CMYK 图像转换为灰度 CMYK 图像。起初我以为我可以使用与 RGB -> 灰度转换相同的方法,例如 (R + G + B) / 3 或 max(r, g, b) / 2 + min(r, g, b)。但不幸的是,这对 CMYK 很不利,因为 CMY 和 K 是多余的。而黑色 cmyk (0, 0, 0, 255) 将变为 64。我应该使用
int grayscaled = max((c + m + y) / 3, k)
或者它会更棘手吗?我不确定,因为 CMYK 实际上是一种冗余的颜色模型,相同的颜色可以用不同的方式编码。
【问题讨论】:
-
如果你想得到一个灰度图像,输出不只是K通道吗?我不太了解 CMYK,所以如果我错了,请向我解释。
-
@Hawken 不,最大 CMY 是黑色的,所以在 CMYK 中表示颜色的方法有很多。我的意思是 (1, 1, 1, 0) 和 (0, 0, 0, 1) 理论上是相同的黑色。
-
是的,但是如果它们是相同的颜色,只使用黑色墨水会节省墨水,不是吗?此外,某些打印机在进行灰度时使用不同的黑色墨水;也许只使用“K”频道可能会触发这个?
-
@Hawken 是的,但问题是关于在 CMYK 中转换图像。而且您不能假设此图像已针对墨水进行了优化。所以如果你有一个 CMY 图像,其中 K 通道是空的,它也应该被正确转换。