protected BufferedImage createBufferedImage(int bitsStored,
boolean banded, boolean signed) {
int dataType = bitsAllocated > 8
? (signed ? DataBuffer.TYPE_SHORT : DataBuffer.TYPE_USHORT)
: DataBuffer.TYPE_BYTE;
ComponentColorModel cm = samples == 1
? new ComponentColorModel(
ColorSpace.getInstance(ColorSpace.CS_GRAY),
new int[] { bitsStored },
false,
false,
Transparency.OPAQUE,
dataType)
: new ComponentColorModel(
ColorSpace.getInstance(ColorSpace.CS_sRGB),
new int[] { bitsStored, bitsStored, bitsStored },
false,
false,
Transparency.OPAQUE,
dataType);
SampleModel sm = banded
? new BandedSampleModel(dataType, cols, rows, samples)
: new PixelInterleavedSampleModel(dataType, cols, rows,
samples, cols * samples, bandOffsets());
WritableRaster raster = Raster.createWritableRaster(sm, null);
return new BufferedImage(cm, raster, false, null);
}