我一直在使用ColorConvertOp在Java中转换灰度图像,但注意到有时它们最终会失去许多中间色调的颜色,并且看起来比应有的要暗。我调查了一下,发现Photoshop使用黑点补偿(BPC)来补偿此问题。我找到了有关BPC here的文章,但对我来说有点技术性。 Java是否使用渲染意图或其他方式原生支持此功能,还是我将不得不弄清楚如何实现文档中说明的算法?我知道发生BPC是因为绝对黑色在颜色空间内是不同的颜色,但是我需要使用BPC才能使图像看起来相同。有任何想法吗?
我目前使用以下代码转换为新的色彩空间。
private void convertToColorSpace(ColorSpace colorSpace) {
RenderingHints hints = new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
hints.put(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
hints.put(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE);
ColorConvertOp op = new ColorConvertOp(colorSpace, hints);
image = op.filter(image, null);
}
注意: ImageMagick不是一个选项,因此请不要将其作为答案。
最佳答案
我有一个主要基于黑点补偿ISO草案工作的解决方案,这意味着它不是标准的,here。包括变量名在内的过程以及完整的步骤都得到了很好的定义。我找不到Java原生的东西,尽管有一个用c编写的Little CMS库,它可能可以与JNI一起使用。