Да, это так. : -)
Для глубокого цвета нет 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);