throws IOException { DataBuffer dataBuffer = tileRowRaster.getDataBuffer(); int bands = dataBuffer.getNumBanks(); boolean banded = bands > 1; switch (tileRowRaster.getTransferType()) { case DataBuffer.TYPE_BYTE: int bank = banded ? ((BandedSampleModel) tileRowRaster.getSampleModel()).getBankIndices()[band] : band; byte[] rowDataByte = ((DataBufferByte) dataBuffer).getData(bank); WritableRaster destChannel = banded ? raster.createWritableChild(raster.getMinX(), raster.getMinY(), raster.getWidth(), raster.getHeight(), 0, 0, new int[] {band}) case DataBuffer.TYPE_SHORT: short[] rowDataShort = dataBuffer.getDataType() == DataBuffer.TYPE_USHORT ? ((DataBufferUShort) dataBuffer).getData(band) : ((DataBufferShort) dataBuffer).getData(band); case DataBuffer.TYPE_INT: int[] rowDataInt = ((DataBufferInt) dataBuffer).getData(band);
private DataBuffer createDataBufferFilledWithNoDataValues( WritableRaster raster, int pixelSize) { int dataType = raster.getDataBuffer().getDataType(); int dataBufferSize = raster.getDataBuffer().getSize(); int nrBanks = raster.getDataBuffer().getNumBanks(); DataBuffer dataBuffer; switch (dataType) { Arrays.fill(intDataArray[i], noDataValue.intValue()); dataBuffer = new DataBufferInt(intDataArray, dataBufferSize); break; case DataBuffer.TYPE_FLOAT: Arrays.fill(shortDataArray[i], noDataValue.shortValue()); dataBuffer = new DataBufferShort(shortDataArray, dataBufferSize); break; Arrays.fill(byteDataArray[i], noDataValue.byteValue()); dataBuffer = new DataBufferByte(byteDataArray, dataBufferSize); break; Arrays.fill(ushortDataArray[i], noDataValue.shortValue()); dataBuffer = new DataBufferUShort(ushortDataArray, dataBufferSize); break;
case DataBuffer.TYPE_BYTE: DataBufferByte dataBuffer = (DataBufferByte) currentTile.getDataBuffer(); byte[][] bankData = dataBuffer.getBankData(); tileReader.getTile(readerTileX, readerTileY, bankData); (DataBufferUShort) currentTile.getDataBuffer(); short[][] bankData = dataBuffer.getBankData(); tileReader.getTile(readerTileX, readerTileY, bankData); case DataBuffer.TYPE_SHORT: DataBufferShort dataBuffer = (DataBufferShort) currentTile.getDataBuffer(); short[][] bankData = dataBuffer.getBankData(); tileReader.getTile(readerTileX, readerTileY, bankData); DataBufferInt dataBuffer = (DataBufferInt) currentTile.getDataBuffer(); int[][] bankData = dataBuffer.getBankData(); tileReader.getTile(readerTileX, readerTileY, bankData);
WritableRaster ret = Raster.createWritableRaster(ras.getSampleModel(), new Point(0, 0)); ret = ret.createWritableChild(ras.getMinX() - ras.getSampleModelTranslateX(), ras.getMinY() - ras.getSampleModelTranslateY(), ras.getWidth(), ras.getHeight(), minX, minY, null); DataBuffer srcDB = ras.getDataBuffer(); DataBuffer retDB = ret.getDataBuffer(); if (srcDB.getDataType() != retDB.getDataType()) { throw new IllegalArgumentException("New DataBuffer doesn't match original"); int len = srcDB.getSize(); int banks = srcDB.getNumBanks(); int[] offsets = srcDB.getOffsets(); DataBufferByte srcDBT = (DataBufferByte) srcDB; DataBufferByte retDBT = (DataBufferByte) retDB; System.arraycopy(srcDBT.getData(b), offsets[b], retDBT.getData(b), offsets[b], len); break; DataBufferInt srcDBT = (DataBufferInt) srcDB; DataBufferInt retDBT = (DataBufferInt) retDB; System.arraycopy(srcDBT.getData(b), offsets[b], retDBT.getData(b), offsets[b], len); break; DataBufferShort srcDBT = (DataBufferShort) srcDB; DataBufferShort retDBT = (DataBufferShort) retDB; System.arraycopy(srcDBT.getData(b), offsets[b], retDBT.getData(b), offsets[b], len); break;
public static void extractFromPixeldata(Raster raster, int mask, byte[] ovlyData, int off, int length) { ComponentSampleModel sm = (ComponentSampleModel) raster.getSampleModel(); int columns = raster.getWidth(); int stride = sm.getScanlineStride(); DataBuffer db = raster.getDataBuffer(); switch (db.getDataType()) { case DataBuffer.TYPE_BYTE: extractFromPixeldata(((DataBufferByte) db).getData(), columns, stride, mask, ovlyData, off, length); break; case DataBuffer.TYPE_USHORT: extractFromPixeldata(((DataBufferUShort) db).getData(), columns, stride, mask, ovlyData, off, length); break; case DataBuffer.TYPE_SHORT: extractFromPixeldata(((DataBufferShort) db).getData(), columns, stride, mask, ovlyData, off, length); break; default: throw new UnsupportedOperationException("Unsupported DataBuffer type: " + db.getDataType()); //$NON-NLS-1$ } }
public static Object getPrimitiveArray(DataBuffer dataBuffer) { switch (dataBuffer.getDataType()) { case DataBuffer.TYPE_BYTE: return ((DataBufferByte) dataBuffer).getData(); case DataBuffer.TYPE_SHORT: return ((DataBufferShort) dataBuffer).getData(); case DataBuffer.TYPE_USHORT: return ((DataBufferUShort) dataBuffer).getData(); case DataBuffer.TYPE_INT: return ((DataBufferInt) dataBuffer).getData(); case DataBuffer.TYPE_FLOAT: return ((DataBufferFloat) dataBuffer).getData(); case DataBuffer.TYPE_DOUBLE: return ((DataBufferDouble) dataBuffer).getData(); default: throw new IllegalArgumentException("dataBuffer"); } }
SampleModel sm = raster.getSampleModel(); if (!isBinary(sm)) { throw new IllegalArgumentException("Not a binary raster!"); int rectHeight = rect.height; DataBuffer dataBuffer = raster.getDataBuffer(); int dx = rectX - raster.getSampleModelTranslateX(); int dy = rectY - raster.getSampleModelTranslateY(); int eltOffset = dataBuffer.getOffset() + mpp.getOffset(dx, dy); int bitOffset = mpp.getBitOffset(dx); byte[] data = ((DataBufferByte) dataBuffer).getData(); for (int y = rectY; y < maxY; y++) { int bOffset = eltOffset * 8 + bitOffset; short[] data = dataBuffer instanceof DataBufferShort ? ((DataBufferShort) dataBuffer).getData() : ((DataBufferUShort) dataBuffer).getData(); for (int y = rectY; y < maxY; y++) { int bOffset = eltOffset * 16 + bitOffset; int[] data = ((DataBufferInt) dataBuffer).getData(); for (int y = rectY; y < maxY; y++) { int bOffset = eltOffset * 32 + bitOffset;
public static ByteBuffer createImageBuffer(BufferedImage image) { SampleModel model = image.getSampleModel(); Raster raster = image.getRaster(); DataBuffer inBuffer = raster.getDataBuffer(); ByteBuffer outBuffer = ByteBuffer.allocateDirect(image.getWidth() * image.getHeight() * model.getNumBands()); int x = -raster.getSampleModelTranslateX(); int y = -raster.getSampleModelTranslateY(); int step = model.getWidth() * model.getNumBands(); int channels = model.getNumBands(); byte[] a = ((DataBufferByte) inBuffer).getData(); copy(ByteBuffer.wrap(a, start, a.length - start), step, outBuffer, step, false); short[] a = ((DataBufferShort) inBuffer).getData(); copy(ShortBuffer.wrap(a, start, a.length - start), step, outBuffer.asShortBuffer(), step / 2, true); short[] a = ((DataBufferUShort) inBuffer).getData(); copy(ShortBuffer.wrap(a, start, a.length - start), step, outBuffer.asShortBuffer(), step / 2, false); int[] a = ((DataBufferInt) inBuffer).getData(); copy(IntBuffer.wrap(a, start, a.length - start), step, outBuffer.asIntBuffer(), step / 4);
public void lookup(Raster src, Raster dst, int alpha, int channels, int skip) { int srcWidth = src.getWidth(); int dstWidth = dst.getWidth(); int srcHeight = src.getHeight(); + " != dst.height:" + dstHeight); if (srcHeight * dstScanlineStride > dstdata.getSize()) { throw new IllegalArgumentException("srcHeight:" + srcHeight + " * dstScanlineStride:" + dstScanlineStride byte[][] data = ((DataBufferByte) dstdata).getBankData(); for (int bank = 0; bank < data.length; bank++) { lookup(srcdata, srcWidth, srcHeight, srcScanlineStride, case DataBuffer.TYPE_USHORT: lookup(srcdata, srcScanlineStride, srcHeight, srcScanlineStride, ((DataBufferUShort) dstdata).getData(), dstScanlineStride); break; case DataBuffer.TYPE_SHORT: lookup(srcdata, srcScanlineStride, srcHeight, srcScanlineStride, ((DataBufferShort) dstdata).getData(), dstScanlineStride); break; case DataBuffer.TYPE_INT: lookup(srcdata, srcScanlineStride, srcHeight, srcScanlineStride, ((DataBufferInt) dstdata).getData(), dstScanlineStride, alpha); break; default:
final int[] offsets = buffer.getOffsets(); final int size = buffer.getSize(); if (buffer instanceof DataBufferByte) { final DataBufferByte data = (DataBufferByte) buffer; for (int i = 0; i < offsets.length; i++) { final int offset = offsets[i]; Arrays.fill(data.getData(i), offset, offset + size, n); for (int i = 0; i < offsets.length; i++) { final int offset = offsets[i]; Arrays.fill(data.getData(i), offset, offset + size, n); for (int i = 0; i < offsets.length; i++) { final int offset = offsets[i]; Arrays.fill(data.getData(i), offset, offset + size, n); for (int i = 0; i < offsets.length; i++) { final int offset = offsets[i]; Arrays.fill(data.getData(i), offset, offset + size, n);
private void read(DataBuffer db) throws IOException { switch (db.getDataType()) { case DataBuffer.TYPE_BYTE: read(((DataBufferByte) db).getBankData()); break; case DataBuffer.TYPE_USHORT: read(((DataBufferUShort) db).getData()); break; case DataBuffer.TYPE_SHORT: read(((DataBufferShort) db).getData()); break; default: throw new IllegalArgumentException( UNSUPPORTED_DATA_TYPE + db.getDataType()); } }
static void writeTile(ImageOutputStream stream, Raster tile) throws IOException { if (tile.getSampleModel().getNumDataElements() != tile.getDataBuffer().getSize()) { // todo - log error throw new IllegalStateException(); } DataBuffer dataBuffer = tile.getDataBuffer(); if (dataBuffer instanceof DataBufferByte) { byte[] data = ((DataBufferByte) dataBuffer).getData(); stream.write(data, dataBuffer.getOffset(), dataBuffer.getSize()); } else if (dataBuffer instanceof DataBufferShort) { short[] data = ((DataBufferShort) dataBuffer).getData(); stream.writeShorts(data, dataBuffer.getOffset(), dataBuffer.getSize()); } else if (dataBuffer instanceof DataBufferInt) { int[] data = ((DataBufferInt) dataBuffer).getData(); stream.writeInts(data, dataBuffer.getOffset(), dataBuffer.getSize()); } else if (dataBuffer instanceof DataBufferFloat) { float[] data = ((DataBufferFloat) dataBuffer).getData(); stream.writeFloats(data, dataBuffer.getOffset(), dataBuffer.getSize()); } else if (dataBuffer instanceof DataBufferDouble) { double[] data = ((DataBufferDouble) dataBuffer).getData(); stream.writeDoubles(data, dataBuffer.getOffset(), dataBuffer.getSize()); } else { throw new IllegalStateException(); } }
private static void writeTo(Raster raster, OutputStream out) throws IOException { SampleModel sm = raster.getSampleModel(); DataBuffer db = raster.getDataBuffer(); switch (db.getDataType()) { case DataBuffer.TYPE_BYTE: writeTo(sm, ((DataBufferByte) db).getBankData(), out); break; case DataBuffer.TYPE_USHORT: writeTo(sm, ((DataBufferUShort) db).getData(), out); break; case DataBuffer.TYPE_SHORT: writeTo(sm, ((DataBufferShort) db).getData(), out); break; case DataBuffer.TYPE_INT: writeTo(sm, ((DataBufferInt) db).getData(), out); break; default: throw new UnsupportedOperationException( "Unsupported Datatype: " + db.getDataType()); } }
MultiPixelPackedSampleModel mppsm = (MultiPixelPackedSampleModel) sampleModel; numBanks = 1; int dataTypeSize = DataBuffer.getDataTypeSize(type); size = mppsm.getScanlineStride() * mppsm.getHeight() Arrays.fill(bankData[i], (byte) 0); db = new DataBufferByte(bankData, (int) size); Arrays.fill(bankData[i], (short) 0); db = new DataBufferUShort(bankData, (int) size); Arrays.fill(bankData[i], (short) 0); db = new DataBufferShort(bankData, (int) size); Arrays.fill(bankData[i], 0); db = new DataBufferInt(bankData, (int) size); return Raster.createWritableRaster(sampleModel, db, location);
@Override public BufferedImage read(int imageIndex, ImageReadParam param) throws IOException { readHeader(); if (imageIndex > 0) { throw new ArrayIndexOutOfBoundsException("imageIndex is " + imageIndex + " must be 0."); } ImageInputStream in = (ImageInputStream) getInput(); in.seek(dataOffset + imageIndex * width * height * (maxGray > 255 ? 2 : 1)); ComponentColorModel ccm = new ComponentColorModel(// new ICC_ColorSpace(ICC_Profile.getInstance(ColorSpace.CS_GRAY)), new int[]{maxGray > 255 ? 16 : 8},// false, false, Transparency.OPAQUE,// (maxGray > 255) ? DataBuffer.TYPE_SHORT : DataBuffer.TYPE_BYTE); SampleModel sm = ccm.createCompatibleSampleModel(width, height); BufferedImage img; if (maxGray > 255) { DataBufferShort db = new DataBufferShort(width * height); in.readFully(db.getData(), 0, width * height); img = new BufferedImage(ccm, Raster.createWritableRaster(sm, db, new Point(0, 0)), false, new Hashtable<Object, Object>()); } else { DataBufferByte db = new DataBufferByte(width * height); in.readFully(db.getData(), 0, width * height); img = new BufferedImage(ccm, Raster.createWritableRaster(sm, db, new Point(0, 0)), false, new Hashtable<Object, Object>()); } return img; }
byte[] bytes = new byte[pixels]; data.get(bytes); imageDataBuffer = new DataBufferByte(bytes, pixels); } else if (this.dataBufferType == DataBuffer.TYPE_SHORT) { short[] shorts = new short[pixels]; data.asShortBuffer().get(shorts); imageDataBuffer = new DataBufferShort(shorts, shorts.length); } else if (this.dataBufferType == DataBuffer.TYPE_USHORT) { short[] shorts = new short[pixels]; data.asShortBuffer().get(shorts); imageDataBuffer = new DataBufferUShort(shorts, shorts.length); } else if (this.dataBufferType == DataBuffer.TYPE_INT) { int[] ints = new int[pixels]; data.asIntBuffer().get(ints); imageDataBuffer = new DataBufferInt(ints, ints.length); } else if (this.dataBufferType == DataBuffer.TYPE_FLOAT) { float[] floats = new float[pixels]; SampleModel sampleModel = new ComponentSampleModel(imageDataBuffer.getDataType(), imageWidth, imageHeight, 1, imageWidth, index); WritableRaster writableRaster = Raster.createWritableRaster(sampleModel, imageDataBuffer, null); BufferedImage image = null; if (this.band.GetRasterColorInterpretation() == gdalconstConstants.GCI_PaletteIndex) { } else { ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY); ColorModel cm = new ComponentColorModel(cs, false, true, Transparency.OPAQUE, imageDataBuffer.getDataType()); image = new BufferedImage(cm, writableRaster, true, null);
private static final Img<?> createImg(final BufferedImage bi) { final long[] dims = new long[]{bi.getWidth(), bi.getHeight()}; switch (bi.getType()) { case BufferedImage.TYPE_BYTE_GRAY: case BufferedImage.TYPE_BYTE_INDEXED: ByteArray ba = new ByteArray(((DataBufferByte)bi.getRaster().getDataBuffer()).getData()); ArrayImg<UnsignedByteType, ByteArray> b = new ArrayImg<UnsignedByteType, ByteArray>(ba, dims, new Fraction()); b.setLinkedType(new UnsignedByteType(b)); return b; case BufferedImage.TYPE_USHORT_GRAY: ShortArray sa = new ShortArray(((DataBufferShort)bi.getRaster().getDataBuffer()).getData()); ArrayImg<UnsignedShortType, ShortArray> s = new ArrayImg<UnsignedShortType, ShortArray>(sa, dims, new Fraction()); s.setLinkedType(new UnsignedShortType(s)); return s; case BufferedImage.TYPE_INT_RGB: case BufferedImage.TYPE_INT_ARGB: IntArray ia = new IntArray(((DataBufferInt)bi.getRaster().getDataBuffer()).getData()); ArrayImg<ARGBType, IntArray> i = new ArrayImg<ARGBType, IntArray>(ia, dims, new Fraction()); i.setLinkedType(new ARGBType(i)); return i; } throw new UnsupportedOperationException("Cannot wrap images of type " + bi.getType()); } }
/** * Bug fix: CLibImageReader and J2KImageReaderCodecLib (imageio libs) do not handle negative values for short data. * They convert signed short to unsigned short. * * @param source * @return */ public static RenderedImage fixSignedShortDataBuffer(RenderedImage source) { if (source != null && source.getSampleModel().getDataType() == DataBuffer.TYPE_USHORT) { Raster raster = source.getData(); if (raster.getDataBuffer() instanceof DataBufferUShort) { short[] s = ((DataBufferUShort) raster.getDataBuffer()).getData(); DataBufferShort db = new DataBufferShort(s, s.length); ColorModel cm = source.getColorModel(); WritableRaster wr = Raster.createWritableRaster(source.getSampleModel(), db, null); return new BufferedImage(cm, wr, cm.isAlphaPremultiplied(), null); } } return source; }
switch (dataType) { case DataBuffer.TYPE_BYTE: dataBuffer = new DataBufferByte(size, numBanks); break; case DataBuffer.TYPE_USHORT: dataBuffer = new DataBufferUShort(size, numBanks); break; case DataBuffer.TYPE_INT: dataBuffer = new DataBufferInt(size, numBanks); break; case DataBuffer.TYPE_SHORT: dataBuffer = new DataBufferShort(size, numBanks); break; case DataBuffer.TYPE_FLOAT:
/** * Returns a <code>SoftReference</code> to the internal bank data of the <code>DataBuffer</code> * . */ private static Object getBankReference(DataBuffer db) { Object array = null; switch (db.getDataType()) { case DataBuffer.TYPE_BYTE: array = ((DataBufferByte) db).getBankData(); break; case DataBuffer.TYPE_USHORT: array = ((DataBufferUShort) db).getBankData(); break; case DataBuffer.TYPE_SHORT: array = ((DataBufferShort) db).getBankData(); break; case DataBuffer.TYPE_INT: array = ((DataBufferInt) db).getBankData(); break; case DataBuffer.TYPE_FLOAT: array = DataBufferUtils.getBankDataFloat(db); break; case DataBuffer.TYPE_DOUBLE: array = DataBufferUtils.getBankDataDouble(db); break; default: throw new UnsupportedOperationException(""); } return array; }