【问题标题】:Does Java support BufferedImage with >8 bit depth? (Deep color)Java 是否支持大于 8 位深度的 BufferedImage? (深色)
【发布时间】:2018-11-02 02:27:21
【问题描述】:

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

有没有办法在高位深度图像的基础图像上使用 BufferedImage 代码?我的意思是 >16m 颜色,>24bit,我相信它被称为 "Deep Color"

【问题讨论】:

    标签: java bufferedimage bit-depth


    【解决方案1】:

    是的,确实如此。 :-)

    虽然没有用于深色的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);
    

    【讨论】:

    • 我试过上面的代码。它创建了 16 位图像而不是 64 位。有的话请分享sn-p。
    • @PushpakJain 上面的代码创建每个样本 16 位的图像。对于 RGB,每像素 48 位,对于 ARGB,每像素 64 位。数学很简单。如果这不是您想要/需要的,请提出不同的问题。
    • 这很漂亮,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多