static long getBufferSizeCSM(ComponentSampleModel csm) { int[] bandOffsets = csm.getBandOffsets(); int maxBandOff = bandOffsets[0]; for (int i = 1; i < bandOffsets.length; i++) maxBandOff = Math.max(maxBandOff, bandOffsets[i]); long size = 0; if (maxBandOff >= 0) size += maxBandOff + 1; int pixelStride = csm.getPixelStride(); if (pixelStride > 0) size += pixelStride * (csm.getWidth() - 1); int scanlineStride = csm.getScanlineStride(); if (scanlineStride > 0) size += scanlineStride * (csm.getHeight() - 1); return size; }
private static long getBufferSizeCSM(ComponentSampleModel csm) { int[] bandOffsets = csm.getBandOffsets(); int maxBandOff = bandOffsets[0]; for (int i = 1; i < bandOffsets.length; i++) maxBandOff = Math.max(maxBandOff, bandOffsets[i]); long size = 0; if (maxBandOff >= 0) size += maxBandOff + 1; int pixelStride = csm.getPixelStride(); if (pixelStride > 0) size += pixelStride * (csm.getWidth() - 1); int scanlineStride = csm.getScanlineStride(); if (scanlineStride > 0) size += scanlineStride * (csm.getHeight() - 1); return size; }
/** * Compute the pixelStride for the provided raster. * The actual raster pixelStride will be returned in case the raster number of bands * is not equal to the pixelStride. * Otherwise the expected pixelStride will be returned. * The expectedPixelStrides array can optionally have size = 2 (instead of 1). * The second value will be returned in case the raster has alpha. **/ public static int computePixelStride(Raster raster, int[] expectedPixelStrides, boolean hasAlpha) { int pixelStride = ((ComponentSampleModel) raster.getSampleModel()).getPixelStride(); if (raster.getNumBands() != pixelStride) { return pixelStride; } return (expectedPixelStrides.length == 2 && hasAlpha) ? expectedPixelStrides[1] : expectedPixelStrides[0]; }
/** * Define appropriate tiff tag value for planar configuration from {@link SampleModel} properties. * * @param sm needed {@link SampleModel} to define planar configuration. * @return 1 for pixel interleaved or 2 for band interleaved. * @see #PLANAR_INTERLEAVED * @see #PLANAR_BANDED */ public static short getPlanarConfiguration(final SampleModel sm) { final int numband = sm.getNumBands(); if (numband > 1 && sm instanceof ComponentSampleModel) { final ComponentSampleModel csm = (ComponentSampleModel) sm; final int[] bankIndice = csm.getBankIndices(); if (csm.getPixelStride() != 1 || bankIndice.length == 1) return PLANAR_INTERLEAVED; int b = 0; while (++b < bankIndice.length) if (bankIndice[b] == bankIndice[b - 1]) return PLANAR_INTERLEAVED; return PLANAR_BANDED; } return PLANAR_INTERLEAVED; }
public RasterByteGrayAlphaProvider(Raster raster) { super(raster, 8, raster.getWidth() * computePixelStride(raster, PIXEL_STRIDES)); this.bytes = ((DataBufferByte) raster.getDataBuffer()).getData(); ComponentSampleModel sm = (ComponentSampleModel) raster.getSampleModel(); this.bandOffsets = sm.getBandOffsets(); this.numBands = sm.getNumBands(); this.pixelStride = sm.getPixelStride(); this.alphaFirst = bandOffsets[0] != 0; }
private int maxDiff(ComponentSampleModel csm, short[] data, ComponentSampleModel csm2, short[] data2) { int w = csm.getWidth() * csm.getPixelStride(); int h = csm.getHeight(); int stride = csm.getScanlineStride(); int stride2 = csm2.getScanlineStride(); int diff, maxDiff = 0; for (int y = 0; y < h; y++) { for (int j = w, i = y * stride, i2 = y * stride2; j-- > 0; i++, i2++) { if (maxDiff < (diff = Math.abs(data[i] - data2[i2]))) maxDiff = diff; } } return maxDiff; }
private int maxDiff(ComponentSampleModel csm, short[] data, ComponentSampleModel csm2, short[] data2) { int w = csm.getWidth() * csm.getPixelStride(); int h = csm.getHeight(); int stride = csm.getScanlineStride(); int stride2 = csm2.getScanlineStride(); int diff, maxDiff = 0; for (int y = 0; y < h; y++) { for (int j = w, i = y * stride, i2 = y * stride2; j-- > 0; i++, i2++) { if (maxDiff < (diff = Math.abs(data[i] - data2[i2]))) maxDiff = diff; } } return maxDiff; }
public RasterByteABGRProvider(Raster raster, boolean hasAlpha) { super(raster, 8, raster.getWidth() * (computePixelStride(raster, PIXEL_STRIDES, hasAlpha))); this.hasAlpha = hasAlpha; this.bytes = ((DataBufferByte) raster.getDataBuffer()).getData(); ComponentSampleModel sm = (ComponentSampleModel) raster.getSampleModel(); this.bgrOrder = sm.getBandOffsets()[0] != 0; this.pixelStride = sm.getPixelStride(); this.bandOffsets = sm.getBandOffsets(); this.numBands = sm.getNumBands(); }
private static long getBufferSizeCSM(ComponentSampleModel csm) { int[] bandOffsets = csm.getBandOffsets(); int maxBandOff = bandOffsets[0]; for (int i = 1; i < bandOffsets.length; i++) maxBandOff = Math.max(maxBandOff, bandOffsets[i]); long size = 0; if (maxBandOff >= 0) size += maxBandOff + 1; int pixelStride = csm.getPixelStride(); if (pixelStride > 0) size += pixelStride * (csm.getWidth() - 1); int scanlineStride = csm.getScanlineStride(); if (scanlineStride > 0) size += scanlineStride * (csm.getHeight() - 1); return size; }
private static long getBufferSizeCSM(ComponentSampleModel csm) { int[] bandOffsets = csm.getBandOffsets(); int maxBandOff = bandOffsets[0]; for (int i = 1; i < bandOffsets.length; i++) maxBandOff = Math.max(maxBandOff, bandOffsets[i]); long size = 0; if (maxBandOff >= 0) size += maxBandOff + 1; int pixelStride = csm.getPixelStride(); if (pixelStride > 0) size += pixelStride * (csm.getWidth() - 1); int scanlineStride = csm.getScanlineStride(); if (scanlineStride > 0) size += scanlineStride * (csm.getHeight() - 1); return size; }
private static void writeTo(SampleModel sm, byte[][] bankData, OutputStream out) throws IOException { int h = sm.getHeight(); int w = sm.getWidth(); ComponentSampleModel csm = (ComponentSampleModel) sm; int len = w * csm.getPixelStride(); int stride = csm.getScanlineStride(); if (csm.getBandOffsets()[0] != 0) bgr2rgb(bankData[0]); for (byte[] b : bankData) for (int y = 0, off = 0; y < h; ++y, off += stride) out.write(b, off, len); }
public static long getBandSize(SampleModel sm) { int elementSize = DataBuffer.getDataTypeSize(sm.getDataType()); if (sm instanceof ComponentSampleModel) { ComponentSampleModel csm = (ComponentSampleModel)sm; int pixelStride = csm.getPixelStride(); int scanlineStride = csm.getScanlineStride(); long size = Math.min(pixelStride, scanlineStride); if (pixelStride > 0) size += pixelStride * (sm.getWidth() - 1); if (scanlineStride > 0) size += scanlineStride * (sm.getHeight() - 1); return size * ((elementSize + 7) / 8); } else return getTileSize(sm); }
public static long getBandSize(SampleModel sm) { int elementSize = DataBuffer.getDataTypeSize(sm.getDataType()); if (sm instanceof ComponentSampleModel) { ComponentSampleModel csm = (ComponentSampleModel)sm; int pixelStride = csm.getPixelStride(); int scanlineStride = csm.getScanlineStride(); long size = Math.min(pixelStride, scanlineStride); if (pixelStride > 0) size += pixelStride * (sm.getWidth() - 1); if (scanlineStride > 0) size += scanlineStride * (sm.getHeight() - 1); return size * ((elementSize + 7) / 8); } else return getTileSize(sm); }
public static long getBandSize(SampleModel sm) { int elementSize = DataBuffer.getDataTypeSize(sm.getDataType()); if (sm instanceof ComponentSampleModel) { ComponentSampleModel csm = (ComponentSampleModel)sm; int pixelStride = csm.getPixelStride(); int scanlineStride = csm.getScanlineStride(); long size = Math.min(pixelStride, scanlineStride); if (pixelStride > 0) size += pixelStride * (sm.getWidth() - 1); if (scanlineStride > 0) size += scanlineStride * (sm.getHeight() - 1); return size * ((elementSize + 7) / 8); } else return getTileSize(sm); }
public static long getBandSize(SampleModel sm) { int elementSize = DataBuffer.getDataTypeSize(sm.getDataType()); if (sm instanceof ComponentSampleModel) { ComponentSampleModel csm = (ComponentSampleModel)sm; int pixelStride = csm.getPixelStride(); int scanlineStride = csm.getScanlineStride(); long size = Math.min(pixelStride, scanlineStride); if (pixelStride > 0) size += pixelStride * (sm.getWidth() - 1); if (scanlineStride > 0) size += scanlineStride * (sm.getHeight() - 1); return size * ((elementSize + 7) / 8); } else return getTileSize(sm); }
/** * Returns the <cite>pixel stride</cite> of the given sample model <strong>in bits</strong>. * This is the number of bits between two samples for the same band on the same scanline. * * @param model The sample model from which to get the pixel stride. * @return The pixel stride in <strong>bits</strong>. * @throws IllegalArgumentException If the given model is not of a known type. */ public static int getPixelBitStride(final SampleModel model) throws IllegalArgumentException { if (model instanceof ComponentSampleModel) { return ((ComponentSampleModel) model).getPixelStride() * getDataTypeSize(model); } if (model instanceof SinglePixelPackedSampleModel) { return getDataTypeSize(model); } if (model instanceof MultiPixelPackedSampleModel) { return ((MultiPixelPackedSampleModel) model).getPixelBitStride(); } throw new IllegalArgumentException(Errors.format( Errors.Keys.UnknownType_1, Classes.getShortClassName(model))); } }
public boolean is_INT_PACK_BYTE_COMP(SampleModel srcSM, SampleModel alpSM) { // Check SampleModel types DirectColorModel if(!(srcSM instanceof SinglePixelPackedSampleModel)) return false; if(!(alpSM instanceof ComponentSampleModel)) return false; // Check transfer types if(srcSM.getDataType() != DataBuffer.TYPE_INT) return false; if(alpSM.getDataType() != DataBuffer.TYPE_BYTE) return false; SinglePixelPackedSampleModel sppsm; sppsm = (SinglePixelPackedSampleModel)srcSM; int [] masks = sppsm.getBitMasks(); if(masks.length != 4) return false; if(masks[0] != 0x00ff0000) return false; if(masks[1] != 0x0000ff00) return false; if(masks[2] != 0x000000ff) return false; if(masks[3] != 0xff000000) return false; ComponentSampleModel csm; csm = (ComponentSampleModel)alpSM; if (csm.getNumBands() != 1) return false; if (csm.getPixelStride() != 1) return false; return true; }
public boolean is_INT_PACK_BYTE_COMP(SampleModel srcSM, SampleModel alpSM) { // Check SampleModel types DirectColorModel if(!(srcSM instanceof SinglePixelPackedSampleModel)) return false; if(!(alpSM instanceof ComponentSampleModel)) return false; // Check transfer types if(srcSM.getDataType() != DataBuffer.TYPE_INT) return false; if(alpSM.getDataType() != DataBuffer.TYPE_BYTE) return false; SinglePixelPackedSampleModel sppsm; sppsm = (SinglePixelPackedSampleModel)srcSM; int [] masks = sppsm.getBitMasks(); if(masks.length != 4) return false; if(masks[0] != 0x00ff0000) return false; if(masks[1] != 0x0000ff00) return false; if(masks[2] != 0x000000ff) return false; if(masks[3] != 0xff000000) return false; ComponentSampleModel csm; csm = (ComponentSampleModel)alpSM; if (csm.getNumBands() != 1) return false; if (csm.getPixelStride() != 1) return false; return true; }
public boolean is_INT_PACK_BYTE_COMP(SampleModel srcSM, SampleModel alpSM) { // Check SampleModel types DirectColorModel if(!(srcSM instanceof SinglePixelPackedSampleModel)) return false; if(!(alpSM instanceof ComponentSampleModel)) return false; // Check transfer types if(srcSM.getDataType() != DataBuffer.TYPE_INT) return false; if(alpSM.getDataType() != DataBuffer.TYPE_BYTE) return false; SinglePixelPackedSampleModel sppsm; sppsm = (SinglePixelPackedSampleModel)srcSM; int [] masks = sppsm.getBitMasks(); if(masks.length != 4) return false; if(masks[0] != 0x00ff0000) return false; if(masks[1] != 0x0000ff00) return false; if(masks[2] != 0x000000ff) return false; if(masks[3] != 0xff000000) return false; ComponentSampleModel csm; csm = (ComponentSampleModel)alpSM; if (csm.getNumBands() != 1) return false; if (csm.getPixelStride() != 1) return false; return true; }
private void write(SampleModel sm, byte[][] bankData) throws IOException { int h = sm.getHeight(); int w = sm.getWidth(); ComponentSampleModel csm = (ComponentSampleModel) sm; int len = w * csm.getPixelStride(); int stride = csm.getScanlineStride(); if (csm.getBandOffsets()[0] != 0) bgr2rgb(bankData[0]); for (byte[] b : bankData) for (int y = 0, off = 0; y < h; ++y, off += stride) dos.write(b, off, len); }