【发布时间】:2018-11-02 02:27:21
【问题描述】:
我平均几百张图像,四舍五入的错误使它变成灰色的混乱混乱。如果我可以使用每个通道具有 >8 位的 BufferedImages,我敢打赌四舍五入不会对我造成太大伤害。
有没有办法在高位深度图像的基础图像上使用 BufferedImage 代码?我的意思是 >16m 颜色,>24bit,我相信它被称为 "Deep Color"。
【问题讨论】:
标签: java bufferedimage bit-depth
我平均几百张图像,四舍五入的错误使它变成灰色的混乱混乱。如果我可以使用每个通道具有 >8 位的 BufferedImages,我敢打赌四舍五入不会对我造成太大伤害。
有没有办法在高位深度图像的基础图像上使用 BufferedImage 代码?我的意思是 >16m 颜色,>24bit,我相信它被称为 "Deep Color"。
【问题讨论】:
标签: java bufferedimage bit-depth
是的,确实如此。 :-)
虽然没有用于深色的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);
【讨论】: