Java是否支持> 8位深度的BufferedImage? (深色)

时间:2018-11-02 02:27:22

标签: java bufferedimage bit-depth

我平均要处理几百张图像,四舍五入的误差使其变成灰暗的混乱状态。如果我可以使用每个通道具有> 8位的BufferedImages,我敢打赌,舍入不会对我造成太大的伤害。

是否可以在高位深度图像的基础图像上使用BufferedImage代码?我的意思是> 1600万种颜色,> 24位,我相信这就是"Deep Color"

1 个答案:

答案 0 :(得分:0)

是的,确实如此。 :-)

尽管没有BufferedImage.TYPE_*用于深色,所以您必须以比“常规”更详细的方式创建它。此外,由于结果类型将为TYPE_CUSTOM,因此绘制和显示的速度可能会大大降低。但是,如果仅将其用作临时的“工作”图像,则可能不是主要问题。

一个例子:

private BufferedImage create48BitRGBImage(int width, int height) {
    int precision = 16; // You could in theory use less than the full 16 bits/component (ie. 12 bits/component)
    ColorSpace colorSpace = ColorSpace.getInstance(ColorSpace.CS_sRGB);
    ColorModel colorModel = new ComponentColorModel(colorSpace, new int[] {precision, precision, precision}, false, false, Transparency.OPAQUE, DataBuffer.TYPE_USHORT);
    return new BufferedImage(colorModel, colorModel.createCompatibleWritableRaster(width, height), colorModel.isAlphaPremultiplied(), null);
}

如果要使用64位ARGB,请像这样更改colorModel

new ComponentColorModel(colorSpace, new int[] {precision, precision, precision, precision}, true, false, Transparency.TRANSLUCENT, DataBuffer.TYPE_USHORT);