Java 中的图像黑点补偿
Image Black Point Compensation in Java
我一直在使用 ColorConvertOp 转换 Java 中的灰度图像,但我注意到有时它们最终会失去很多中间色调颜色并且看起来比它们应该的颜色更暗。我调查了一下,发现 Photoshop 使用黑点补偿 (BPC) 来补偿这个问题。我找到了一篇关于 BPC here 的文章,但它对我来说有点技术性。 Java 是否使用渲染意图或其他方式原生支持此功能,或者我是否必须弄清楚如何实现文档中解释的算法?我了解 BPC 的发生是因为绝对黑色在颜色 spaces 中是不同的颜色,但我需要使用 BPC 来使图像看起来相同。有什么想法吗?
我目前使用以下代码转换为新颜色space。
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 草案的解决方案,这意味着它还不是标准的,找到了用 c 编写的 here. The process, including variable names, and complete steps are very well defined. I couldn't find anything native to Java, though there is a Little CMS 库,它可能与 JNI 一起使用。
我一直在使用 ColorConvertOp 转换 Java 中的灰度图像,但我注意到有时它们最终会失去很多中间色调颜色并且看起来比它们应该的颜色更暗。我调查了一下,发现 Photoshop 使用黑点补偿 (BPC) 来补偿这个问题。我找到了一篇关于 BPC here 的文章,但它对我来说有点技术性。 Java 是否使用渲染意图或其他方式原生支持此功能,或者我是否必须弄清楚如何实现文档中解释的算法?我了解 BPC 的发生是因为绝对黑色在颜色 spaces 中是不同的颜色,但我需要使用 BPC 来使图像看起来相同。有什么想法吗?
我目前使用以下代码转换为新颜色space。
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 草案的解决方案,这意味着它还不是标准的,找到了用 c 编写的 here. The process, including variable names, and complete steps are very well defined. I couldn't find anything native to Java, though there is a Little CMS 库,它可能与 JNI 一起使用。