我平均要处理几百张图像,四舍五入的误差使其变成灰暗的混乱状态。如果我可以使用每个通道具有> 8位的BufferedImages,我敢打赌,舍入不会对我造成太大的伤害。
是否可以在高位深度图像的基础图像上使用BufferedImage代码?我的意思是> 1600万种颜色,> 24位,我相信这就是"Deep Color"。
答案 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);