/** * A faster convert that works directly with a specific raster */ public static void bufferedToMulti_U8(ByteInterleavedRaster src, Planar<GrayU8> dst) { byte[] srcData = src.getDataStorage(); int numBands = src.getNumBands(); int srcStride = src.getScanlineStride(); int srcOffset = getOffset(src); int srcStrideDiff = srcStride-src.getPixelStride()*dst.width; if (numBands == 3) { from_3BU8_to_PLU8(dst, srcData, srcOffset, srcStrideDiff); } else if (numBands == 1) { from_1BU8_to_PLU8(dst, srcData, srcOffset, srcStrideDiff); } else if (numBands == 4) { from_4BU8_to_PLU8(dst, srcData, srcOffset, srcStrideDiff); } else { throw new RuntimeException("Write more code here."); } }
public static void bufferedToGray(BufferedImage src, InterleavedU8 dst) { bufferedToGray(src, dst.data, dst.startIndex, dst.stride); }
if(src.getType() != BufferedImage.TYPE_BYTE_INDEXED) { if (src.getType() == BufferedImage.TYPE_BYTE_GRAY) { ConvertRaster.bufferedToGray(src, (InterleavedU8) dst); } else { ConvertRaster.bufferedToInterleaved((ByteInterleavedRaster) src.getRaster(), (InterleavedU8) dst); ConvertRaster.bufferedToInterleaved(src, (InterleavedU8) dst); ConvertRaster.bufferedToInterleaved((IntegerInterleavedRaster) src.getRaster(), (InterleavedU8) dst); } else if (src.getRaster() instanceof SunWritableRaster) { ConvertRaster.bufferedToInterleaved((SunWritableRaster) src.getRaster(), (InterleavedU8) dst); } else { ConvertRaster.bufferedToInterleaved(src, (InterleavedU8) dst); if(src.getType() != BufferedImage.TYPE_BYTE_INDEXED) { if (src.getType() == BufferedImage.TYPE_BYTE_GRAY) { ConvertRaster.bufferedToGray(src, (InterleavedF32) dst); } else { ConvertRaster.bufferedToInterleaved((ByteInterleavedRaster) src.getRaster(), (InterleavedF32) dst); ConvertRaster.bufferedToInterleaved(src, (InterleavedF32) dst); ConvertRaster.bufferedToInterleaved((IntegerInterleavedRaster) src.getRaster(), (InterleavedF32) dst); } else if (src.getRaster() instanceof SunWritableRaster) { ConvertRaster.bufferedToInterleaved((SunWritableRaster) src.getRaster(), (InterleavedF32) dst); } else { ConvertRaster.bufferedToInterleaved(src, (InterleavedF32) dst); ConvertRaster.bufferedToInterleaved(src, (InterleavedU8) dst);
/** * A faster convert that works directly with a specific raster */ public static void bufferedToMulti_F32(ByteInterleavedRaster src, Planar<GrayF32> dst) { byte[] srcData = src.getDataStorage(); int numBands = src.getNumBands(); int srcStride = src.getScanlineStride(); int srcOffset = getOffset(src); int srcStrideDiff = srcStride-src.getPixelStride()*dst.width; if (numBands == 3) { from_3BU8_to_PLF32(dst, srcData, srcOffset, srcStrideDiff); } else if (numBands == 1) { from_1BU8_to_PLF32(dst, srcData, srcOffset, srcStrideDiff); } else if (numBands == 4) { from_4BU8_to_PLF32(dst, srcData, srcOffset, srcStrideDiff); } else { throw new RuntimeException("Write more code here."); } }
/** * A faster convert that works directly with a specific raster */ public static void bufferedToGray(ByteInterleavedRaster src, GrayF32 dst) { byte[] srcData = src.getDataStorage(); float[] data = dst.data; int numBands = src.getNumBands(); int srcStride = src.getScanlineStride(); int srcOffset = getOffset(src); int srcStrideDiff = srcStride-src.getPixelStride()*dst.width; if (numBands == 3) { from_3BU8_to_F32(dst, srcData, data, srcOffset, srcStrideDiff); } else if (numBands == 1) { from_1BU8_to_F32(dst, srcData, data, srcStride, srcOffset); } else if (numBands == 4) { from_4BU8_to_F32(dst, srcData, data, srcOffset, srcStrideDiff); } else { throw new RuntimeException("Write more code here."); } }
public static void bufferedToInterleaved(ByteInterleavedRaster src, InterleavedU8 dst) { byte[] srcData = src.getDataStorage(); int numBands = src.getNumBands(); int srcStride = src.getScanlineStride(); int srcOffset = getOffset(src); int length = dst.width*dst.numBands; for (int y = 0; y < dst.height; y++) { int indexDst = dst.startIndex + y*dst.stride; int indexSrc = srcOffset + y*srcStride; System.arraycopy(srcData,indexSrc,dst.data,indexDst,length); } }
/** * A faster convert that works directly with a specific raster */ public static void bufferedToGray(ByteInterleavedRaster src, GrayU8 dst) { byte[] srcData = src.getDataStorage(); byte[] data = dst.data; int numBands = src.getNumBands(); int size = dst.getWidth() * dst.getHeight(); int srcStride = src.getScanlineStride(); int srcOffset = getOffset(src); int srcStrideDiff = srcStride-src.getPixelStride()*dst.width; if (numBands == 3) { from_3BU8_to_U8(dst, srcData, data, srcOffset, srcStrideDiff); } else if (numBands == 1) { from_1BU8_to_U8(dst, srcData, data, size, srcStride, srcOffset, srcStrideDiff); } else if (numBands == 4) { from_4BU8_to_U8(dst, srcData, data, srcOffset, srcStrideDiff); } else { throw new RuntimeException("Unexpected number of bands found. Bands = "+numBands); } }
public static BufferedImage renderOrientation(GrayU8 direction , BufferedImage out ) { if( out == null ) { out = new BufferedImage(direction.getWidth(),direction.getHeight(),BufferedImage.TYPE_INT_RGB); } WritableRaster raster = out.getRaster(); if( raster.getDataBuffer().getDataType() == DataBuffer.TYPE_INT) { int colors[] = new int[4]; colors[0] = Color.RED.getRGB(); colors[1] = Color.GREEN.getRGB(); colors[2] = Color.BLUE.getRGB(); colors[3] = Color.BLACK.getRGB(); int dataDst[] = ((DataBufferInt)raster.getDataBuffer()).getData(); int strideDst = ConvertRaster.stride(raster); int offsetDst = ConvertRaster.getOffset(raster); int w = direction.getWidth(); int h = direction.getHeight(); for( int y = 0; y < h; y++ ) { int indexDst = offsetDst + y*strideDst; int indexSrc = direction.startIndex + y*direction.stride; for( int x = 0; x < w; x++ ) { dataDst[indexDst++] = colors[direction.data[indexSrc++]]; } } } else { throw new RuntimeException("Raster not supported yet"); } return out; }
/** * A faster convert that works directly with a specific raster */ public static void bufferedToMulti_U8(SunWritableRaster src, Planar<GrayU8> dst) { if( src.getDataBuffer().getDataType() != DataBuffer.TYPE_BYTE ) throw new RuntimeException("Unsupported type"); DataBufferByte byteBuffer = (DataBufferByte)src.getDataBuffer(); byte[] srcData = byteBuffer.getData(); int numBands = src.getNumBands(); int srcOffset = 0; int srcStrideDiff = 0; if (numBands == 3) { from_3BU8_to_PLU8(dst, srcData, srcOffset, srcStrideDiff); } else if (numBands == 1) { from_1BU8_to_PLU8(dst, srcData, srcOffset, srcStrideDiff); } else if (numBands == 4) { from_4BU8_to_PLU8(dst, srcData, srcOffset, srcStrideDiff); } else { throw new RuntimeException("Write more code here."); } }
/** * A faster convert that works directly with a specific raster */ public static void bufferedToMulti_F32(SunWritableRaster src, Planar<GrayF32> dst) { if( src.getDataBuffer().getDataType() != DataBuffer.TYPE_BYTE ) throw new RuntimeException("Unsupported type"); DataBufferByte byteBuffer = (DataBufferByte)src.getDataBuffer(); byte[] srcData = byteBuffer.getData(); int numBands = src.getNumBands(); int srcOffset = 0; int srcStrideDiff = 0; if (numBands == 3) { from_3BU8_to_PLF32(dst, srcData, srcOffset, srcStrideDiff); } else if (numBands == 1) { from_1BU8_to_PLF32(dst, srcData, srcOffset, srcStrideDiff); } else if (numBands == 4) { from_4BU8_to_PLF32(dst, srcData, srcOffset, srcStrideDiff); } else { throw new RuntimeException("Write more code here."); } }
/** * A faster convert that works directly with a specific raster */ public static void bufferedToGray(SunWritableRaster src, GrayF32 dst) { if( src.getDataBuffer().getDataType() != DataBuffer.TYPE_BYTE ) throw new RuntimeException("Unsupported type"); DataBufferByte byteBuffer = (DataBufferByte)src.getDataBuffer(); byte[] srcData = byteBuffer.getData(); float[] dstData = dst.data; int numBands = src.getNumBands(); int srcOffset = 0; int srcStrideDiff = 0; if (numBands == 3) { from_3BU8_to_F32(dst, srcData, dstData, srcOffset, srcStrideDiff); } else if (numBands == 1) { from_1BU8_to_F32(dst, srcData, dstData, srcOffset, srcStrideDiff); } else if (numBands == 4) { from_4BU8_to_F32(dst, srcData, dstData, srcOffset, srcStrideDiff); } else { throw new RuntimeException("Unexpected number of bands found. Bands = "+numBands); } }
/** * A faster convert that works directly with a specific raster */ public static void bufferedToGray(SunWritableRaster src, GrayU8 dst) { if( src.getDataBuffer().getDataType() != DataBuffer.TYPE_BYTE ) throw new RuntimeException("Unsupported type"); DataBufferByte byteBuffer = (DataBufferByte)src.getDataBuffer(); byte[] srcData = byteBuffer.getData(); byte[] dstData = dst.data; int numBands = src.getNumBands(); int srcStride = src.getWidth()*numBands; int srcOffset = 0; int srcStrideDiff = 0; int size = dst.getWidth() * dst.getHeight(); if (numBands == 3) { from_3BU8_to_U8(dst, srcData, dstData, srcOffset, srcStrideDiff); } else if (numBands == 1) { from_1BU8_to_U8(dst, srcData, dstData, size, srcStride, srcOffset, srcStrideDiff); } else if (numBands == 4) { from_4BU8_to_U8(dst, srcData, dstData, srcOffset, srcStrideDiff); } else { throw new RuntimeException("Unexpected number of bands found. Bands = "+numBands); } }
if( src.getType() == BufferedImage.TYPE_BYTE_GRAY) { for( int i = 0; i < dst.getNumBands(); i++ ) ConvertRaster.bufferedToGray(src, ((Planar<GrayU8>) dst).getBand(i)); } else { ConvertRaster.bufferedToMulti_U8((ByteInterleavedRaster) src.getRaster(), (Planar<GrayU8>) dst); ConvertRaster.bufferedToMulti_U8((IntegerInterleavedRaster) src.getRaster(), (Planar<GrayU8>) dst); } else { ConvertRaster.bufferedToMulti_U8(src, (Planar<GrayU8>) dst); if( src.getType() == BufferedImage.TYPE_BYTE_GRAY) { for( int i = 0; i < dst.getNumBands(); i++ ) ConvertRaster.bufferedToGray(src,((Planar<GrayF32>)dst).getBand(i)); } else { ConvertRaster.bufferedToMulti_F32((ByteInterleavedRaster) src.getRaster(), (Planar<GrayF32>) dst); ConvertRaster.bufferedToMulti_F32((IntegerInterleavedRaster) src.getRaster(), (Planar<GrayF32>) dst); } else { ConvertRaster.bufferedToMulti_F32(src, (Planar<GrayF32>) dst); ConvertRaster.bufferedToMulti_U8(src, (Planar<GrayU8>) dst); } else if( type == GrayF32.class ) { ConvertRaster.bufferedToMulti_F32(src, (Planar<GrayF32>)dst);
/** * A faster convert that works directly with a specific raster */ public static void bufferedToInterleaved(ByteInterleavedRaster src, InterleavedF32 dst) { byte[] srcData = src.getDataStorage(); int srcStride = src.getScanlineStride(); int srcOffset = getOffset(src); int srcStrideDiff = srcStride-src.getPixelStride()*dst.width; int indexSrc = srcOffset; int length = dst.width*dst.numBands; for (int y = 0; y < dst.height; y++) { int indexDst = dst.startIndex + dst.stride * y; int indexDstEnd = indexDst + length; while( indexDst < indexDstEnd) { dst.data[indexDst++] = srcData[indexSrc++] & 0xFF; } indexSrc += srcStrideDiff; } }
/** * A faster convert that works directly with a specific raster */ public static void bufferedToGray(IntegerInterleavedRaster src, GrayF32 dst) { int[] srcData = src.getDataStorage(); float[] data = dst.data; int srcStride = src.getScanlineStride(); int srcOffset = getOffset(src); int srcStrideDiff = srcStride-src.getPixelStride()*dst.width; int indexSrc = srcOffset; for (int y = 0; y < dst.height; y++) { int indexDst = dst.startIndex + y * dst.stride; for (int x = 0; x < dst.width; x++) { int rgb = srcData[indexSrc++]; int r = (rgb >>> 16) & 0xFF; int g = (rgb >>> 8) & 0xFF; int b = rgb & 0xFF; float ave = (r + g + b) / 3.0f; data[indexDst++] = ave; } indexSrc += srcStrideDiff; } }
public static void bufferedToGray(BufferedImage src, InterleavedF32 dst) { bufferedToGray(src,dst.data,dst.startIndex,dst.stride); }
/** * A faster convert that works directly with a specific raster */ public static void bufferedToGray(IntegerInterleavedRaster src, GrayU8 dst) { int[] srcData = src.getDataStorage(); byte[] data = dst.data; int srcStride = src.getScanlineStride(); int srcOffset = getOffset(src); int srcStrideDiff = srcStride-src.getPixelStride()*dst.width; int indexSrc = srcOffset; for (int y = 0; y < dst.height; y++) { int indexDst = dst.startIndex + y * dst.stride; for (int x = 0; x < dst.width; x++) { int rgb = srcData[indexSrc++]; int r = (rgb >>> 16) & 0xFF; int g = (rgb >>> 8) & 0xFF; int b = rgb & 0xFF; int ave = (r + g + b) / 3; data[indexDst++] = (byte) ave; } indexSrc += srcStrideDiff; } }
/** * <p> * Converts a buffered image into an 8bit intensity image using the * BufferedImage's RGB interface. * </p> * <p> * This is much slower than working * directly with the BufferedImage's internal raster and should be * avoided if possible. * </p> * * @param src Input image. * @param dst Output image. */ public static void bufferedToGray(BufferedImage src, GrayF32 dst) { bufferedToGray(src,dst.data,dst.startIndex,dst.stride); }
DataBufferInt buffer = (DataBufferInt)raster.getDataBuffer(); int[] outData = buffer.getData(); int outOffset = ConvertRaster.getOffset(raster);