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); } }
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; }
int offsetDst = ConvertRaster.getOffset(raster);
/** * 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; } }
/** * 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; } }
DataBufferInt buffer = (DataBufferInt)raster.getDataBuffer(); int[] outData = buffer.getData(); int outOffset = ConvertRaster.getOffset(raster);
/** * A faster convert that works directly with a specific raster */ public static void bufferedToGray(ShortInterleavedRaster src, GrayI16 dst) { short[] srcData = src.getDataStorage(); 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 == 1) { if (dst.startIndex == 0 && dst.width == dst.stride && srcStrideDiff == 0 && srcOffset == 0 ) System.arraycopy(srcData, 0, dst.data, 0, size); else { for (int y = 0; y < dst.height; y++) { int indexDst = dst.startIndex + dst.stride * y; int indexSrc = srcOffset + srcStride * y; System.arraycopy(srcData, indexSrc, dst.data, indexDst, dst.width); } } } else { throw new RuntimeException("Only single band images are currently support for 16bit"); } }
public static void interleavedToBuffered(InterleavedU8 src, ByteInterleavedRaster dst) { if (src.getNumBands() != dst.getNumBands()) throw new IllegalArgumentException("Unequal number of bands src = " + src.getNumBands() + " dst = " + dst.getNumBands()); final byte[] dstData = dst.getDataStorage(); final int numBands = dst.getNumBands(); final int length = src.width*numBands; int dstStride = dst.getScanlineStride(); int dstOffset = getOffset(dst); for (int y = 0; y < src.height; y++) { int indexSrc = src.startIndex + src.stride * y; int indexDst = dstOffset + dstStride*y; System.arraycopy(src.data,indexSrc,dstData,indexDst,length); } }
int srcOffset = getOffset(src); int srcStrideDiff = srcStride-src.getPixelStride()*dst.width;
int dstOffset = getOffset(dst);
int dstOffset = getOffset(dst);
public static void interleavedToBuffered(InterleavedF32 src, ByteInterleavedRaster dst) { if (src.getNumBands() != dst.getNumBands()) throw new IllegalArgumentException("Unequal number of bands src = " + src.getNumBands() + " dst = " + dst.getNumBands()); final byte[] dstData = dst.getDataStorage(); final int numBands = dst.getNumBands(); final int length = src.width*numBands; int dstStride = dst.getScanlineStride(); int dstOffset = getOffset(dst); for (int y = 0; y < src.height; y++) { int indexSrc = src.startIndex + src.stride * y; int indexDst = dstOffset + dstStride*y; int indexSrcEnd = indexSrc+length; while( indexSrc < indexSrcEnd ) { dstData[indexDst++] = (byte)src.data[indexSrc++]; } } }
int srcOffset = getOffset(src); int srcStrideDiff = srcStride-src.getPixelStride()*dst.width;
/** * 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."); } }
/** * 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."); } }
/** * 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); } }
int srcOffset = getOffset(src); int srcStrideDiff = srcStride-src.getPixelStride()*dst.width;
int srcOffset = getOffset(src); int srcStrideDiff = srcStride-src.getPixelStride()*dst.width;