/** * Creates a direct buffer of the specified size (in elements) and type.. * @param size size of the buffer in elements * @param order byte order of the direct buffer * @param bufferClass type of the buffer. Must be one of IntBuffer.class, LongBuffer.class, ShortBuffer.class, ByteBuffer.class, DoubleBuffer.class, FloatBuffer.class * @return view on new direct buffer */ @SuppressWarnings("unchecked") public static <B extends Buffer> B directBuffer(int size, ByteOrder order, Class<B> bufferClass) { if (IntBuffer.class.isAssignableFrom(bufferClass)) return (B)directInts(size, order); if (LongBuffer.class.isAssignableFrom(bufferClass)) return (B)directLongs(size, order); if (ShortBuffer.class.isAssignableFrom(bufferClass)) return (B)directShorts(size, order); if (ByteBuffer.class.isAssignableFrom(bufferClass)) return (B)directBytes(size, order); if (DoubleBuffer.class.isAssignableFrom(bufferClass)) return (B)directDoubles(size, order); if (FloatBuffer.class.isAssignableFrom(bufferClass)) return (B)directFloats(size, order); if (CharBuffer.class.isAssignableFrom(bufferClass)) return (B)directChars(size, order); throw new UnsupportedOperationException("Cannot create direct buffers of type " + bufferClass.getName()); } /**
public Buffer getData(BufferedImage image, Buffer optionalExistingOutput, boolean directBuffer, boolean allowDeoptimizingDirectRead, ByteOrder byteOrder) { int width = image.getWidth(), height = image.getHeight(); WritableRaster raster = checkWritableRaster(image); checkSinglePixelPackedSampleModel(raster); int length = width * height; short[] existingArray = getIndirectArray(optionalExistingOutput, length, short[].class); short[] array = (short[])raster.getDataElements(0, 0, width, height, existingArray); ShortBuffer output = null; if (optionalExistingOutput instanceof ShortBuffer) { output = (ShortBuffer)optionalExistingOutput; if (output.capacity() != length * 4) output = null; } if (output == null) output = NIOUtils.directShorts(length * 4, byteOrder); for (int i = 0; i < length; i++) { int offset = i * 4; short value = array[i]; output.put(offset, value); output.put(offset + 1, value); output.put(offset + 2, value); output.put(offset + 3, (short)0xffff); } return output; } },
public Buffer getData(BufferedImage image, Buffer optionalExistingOutput, boolean directBuffer, boolean allowDeoptimizingDirectRead, ByteOrder byteOrder) { int width = image.getWidth(), height = image.getHeight(); WritableRaster raster = checkWritableRaster(image); checkSinglePixelPackedSampleModel(raster); int length = width * height; short[] existingArray = getIndirectArray(optionalExistingOutput, length, short[].class); short[] array = (short[])raster.getDataElements(0, 0, width, height, existingArray); ShortBuffer output = null; if (optionalExistingOutput instanceof ShortBuffer) { output = (ShortBuffer)optionalExistingOutput; if (output.capacity() != length * 4) output = null; } if (output == null) output = NIOUtils.directShorts(length * 4, byteOrder); for (int i = 0; i < length; i++) { int offset = i * 4; short value = array[i]; output.put(offset, value); output.put(offset + 1, value); output.put(offset + 2, value); output.put(offset + 3, (short)0xffff); } return output; } },