private static long getNumBanksCSM(ComponentSampleModel csm) { int[] bankIndices = csm.getBankIndices(); int maxIndex = bankIndices[0]; for (int i = 1; i < bankIndices.length; i++) { int bankIndex = bankIndices[i]; if (bankIndex > maxIndex) { maxIndex = bankIndex; } } return maxIndex + 1; }
private static long getNumBanksCSM(ComponentSampleModel csm) { int[] bankIndices = csm.getBankIndices(); int maxIndex = bankIndices[0]; for (int i = 1; i < bankIndices.length; i++) { int bankIndex = bankIndices[i]; if (bankIndex > maxIndex) { maxIndex = bankIndex; } } return maxIndex + 1; }
private static long getNumBanksCSM(ComponentSampleModel csm) { int[] bankIndices = csm.getBankIndices(); int maxIndex = bankIndices[0]; for (int i = 1; i < bankIndices.length; i++) { int bankIndex = bankIndices[i]; if (bankIndex > maxIndex) { maxIndex = bankIndex; } } return maxIndex + 1; }
private static long getNumBanksCSM(ComponentSampleModel csm) { int[] bankIndices = csm.getBankIndices(); int maxIndex = bankIndices[0]; for (int i = 1; i < bankIndices.length; i++) { int bankIndex = bankIndices[i]; if (bankIndex > maxIndex) { maxIndex = bankIndex; } } return maxIndex + 1; }
/** * 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; }
int bankIndices[] = csm.getBankIndices(); if (pixelStride != bandOffsets.length) { return false;
int bankIndices[] = csm.getBankIndices(); if (pixelStride != bandOffsets.length) { return false;
private int maxDiff(ComponentSampleModel csm, byte[][] banks, ComponentSampleModel csm2, byte[][] banks2) { int w = csm.getWidth(); int h = csm.getHeight(); int bands = csm.getNumBands(); int stride = csm.getScanlineStride(); int pixelStride = csm.getPixelStride(); int[] bankIndices = csm.getBankIndices(); int[] bandOffsets = csm.getBandOffsets(); int stride2 = csm2.getScanlineStride(); int pixelStride2 = csm2.getPixelStride(); int[] bankIndices2 = csm2.getBankIndices(); int[] bandOffsets2 = csm2.getBandOffsets(); int diff, maxDiff = 0; for (int b = 0; b < bands; b++) { byte[] bank = banks[bankIndices[b]]; byte[] bank2 = banks2[bankIndices2[b]]; int off = bandOffsets[b]; int off2 = bandOffsets2[b]; for (int y = 0; y < h; y++) { for (int x = w, i = y * stride + off, i2 = y * stride2 + off2; x-- > 0; i += pixelStride, i2 += pixelStride2) { if (maxDiff < (diff = Math.abs(bank[i] - bank2[i2]))) maxDiff = diff; } } } return maxDiff; }
private int maxDiff(ComponentSampleModel csm, byte[][] banks, ComponentSampleModel csm2, byte[][] banks2) { int w = csm.getWidth(); int h = csm.getHeight(); int bands = csm.getNumBands(); int stride = csm.getScanlineStride(); int pixelStride = csm.getPixelStride(); int[] bankIndices = csm.getBankIndices(); int[] bandOffsets = csm.getBandOffsets(); int stride2 = csm2.getScanlineStride(); int pixelStride2 = csm2.getPixelStride(); int[] bankIndices2 = csm2.getBankIndices(); int[] bandOffsets2 = csm2.getBandOffsets(); int diff, maxDiff = 0; for (int b = 0; b < bands; b++) { byte[] bank = banks[bankIndices[b]]; byte[] bank2 = banks2[bankIndices2[b]]; int off = bandOffsets[b]; int off2 = bandOffsets2[b]; for (int y = 0; y < h; y++) { for (int x = w, i = y * stride + off, i2 = y * stride2 + off2; x-- > 0; i += pixelStride, i2 += pixelStride2) { if (maxDiff < (diff = Math.abs(bank[i] - bank2[i2]))) maxDiff = diff; } } } return maxDiff; } }
int[] bankIndices = csm.getBankIndices(); for (int i = 0; i < bandOffsets.length; i++) { if (bankIndices[i] != 0) {
int[] bankIndices = csm.getBankIndices(); for (int i = 0; i < bandOffsets.length; i++) { if (bankIndices[i] != 0) {
int[] bankIndices = csm.getBankIndices(); for (int i = 0; i < bandOffsets.length; i++) { if (bankIndices[i] != 0) {
/** * Create and return an adapted default read-only raster iterator to read on raster sub-area. * * @param raster {@link Raster} will be traveled by iterator from it's sub-area. * @param subReadArea {@link Rectangle} which define raster read area. * @return adapted {@link PixelIterator}. */ public static PixelIterator createDefaultIterator(final Raster raster, final Rectangle subReadArea) { final SampleModel sampleM = raster.getSampleModel(); if (sampleM instanceof ComponentSampleModel) { if (checkBankIndices(((ComponentSampleModel)sampleM).getBankIndices())) { switch (sampleM.getDataType()) { case DataBuffer.TYPE_BYTE : return new DefaultDirectByteIterator(raster, subReadArea); case DataBuffer.TYPE_FLOAT : return new DefaultDirectFloatIterator(raster, subReadArea); default : return new DefaultIterator(raster, subReadArea); } } } return new DefaultIterator(raster, subReadArea); }
/** * Create and return an adapted default read and write rendered image iterator from it's sub-area. * * @param renderedImage {@link RenderedImage} will be traveled by iterator from it's sub-area. * @param writableRenderedImage {@link WritableRenderedImage} rendered image wherein value is set (write). * @param subArea {@link Rectangle} which define rendered image read and write area. * @return adapted {@link PixelIterator}. */ public static PixelIterator createDefaultWriteableIterator(final RenderedImage renderedImage, final WritableRenderedImage writableRenderedImage, final Rectangle subArea) { final SampleModel srcSampleM = renderedImage.getSampleModel(); final SampleModel destSampleM = renderedImage.getSampleModel(); if (srcSampleM instanceof ComponentSampleModel && destSampleM instanceof ComponentSampleModel) { ComponentSampleModel srcCSModel = (ComponentSampleModel) srcSampleM; ComponentSampleModel destCSModel = (ComponentSampleModel) destSampleM; // Source and destination image must have identical structure in order to allow a single iterator to move through them. if (checkBankIndices(srcCSModel.getBankIndices()) && checkBankIndices(destCSModel.getBankIndices()) && Arrays.equals(srcCSModel.getBandOffsets(), destCSModel.getBandOffsets()) && srcCSModel.getPixelStride() == destCSModel.getPixelStride() && srcCSModel.getScanlineStride() == destCSModel.getScanlineStride()) { switch (srcSampleM.getDataType()) { case DataBuffer.TYPE_BYTE : return new DefaultWritableDirectByteIterator(renderedImage, writableRenderedImage, subArea); case DataBuffer.TYPE_FLOAT : return new DefaultWritableDirectFloatIterator(renderedImage, writableRenderedImage, subArea); default : return new DefaultWritableIterator(renderedImage, writableRenderedImage, subArea); } } } return new DefaultWritableIterator(renderedImage, writableRenderedImage, subArea); }
/** * Create and return an adapted Row Major read-only rendered image iterator from it's sub-area. * RowMajor : iterator move forward line per line one by one in downward order. * * @param renderedImage {@link RenderedImage} will be traveled by iterator from it's sub-area. * @param subReadArea {@link Rectangle} which define rendered image read-only area. * @return adapted {@link PixelIterator}. */ public static PixelIterator createRowMajorIterator(final RenderedImage renderedImage, final Rectangle subReadArea) { final SampleModel sampleM = renderedImage.getSampleModel(); if (sampleM instanceof ComponentSampleModel) { if (checkBankIndices(((ComponentSampleModel)sampleM).getBankIndices())) { switch (sampleM.getDataType()) { case DataBuffer.TYPE_BYTE : return new RowMajorDirectByteIterator(renderedImage, subReadArea); case DataBuffer.TYPE_FLOAT : return new RowMajorDirectFloatIterator(renderedImage, subReadArea); default : return new RowMajorIterator(renderedImage, subReadArea); } } } return new RowMajorIterator(renderedImage, subReadArea); }
if (checkBankIndices(srcCSModel.getBankIndices()) && checkBankIndices(destCSModel.getBankIndices()) && Arrays.equals(srcCSModel.getBandOffsets(), destCSModel.getBandOffsets()) && srcCSModel.getPixelStride() == destCSModel.getPixelStride()
/** * Create and return an adapted default read and write raster iterator. * Iterator move in a raster sub-area. * * @param raster {@link Raster} will be traveled by read-only iterator. * @param writeableRaster {@link WritableRaster} raster wherein value is set (write). * @param subArea {@link Rectangle} which define raster read and write area. * @return adapted {@link PixelIterator}. */ public static PixelIterator createDefaultWriteableIterator(final Raster raster, final WritableRaster writeableRaster, final Rectangle subArea) { final SampleModel srcSampleM = raster.getSampleModel(); final SampleModel destSampleM = raster.getSampleModel(); PixelIterator.checkRasters(raster, writeableRaster); if (srcSampleM instanceof ComponentSampleModel && destSampleM instanceof ComponentSampleModel) { ComponentSampleModel srcCSModel = (ComponentSampleModel) srcSampleM; ComponentSampleModel destCSModel = (ComponentSampleModel) destSampleM; // Source and destination image must have identical structure in order to allow a single iterator to move through them. if (checkBankIndices(srcCSModel.getBankIndices()) && checkBankIndices(destCSModel.getBankIndices()) && Arrays.equals(srcCSModel.getBandOffsets(), destCSModel.getBandOffsets()) && srcCSModel.getPixelStride() == destCSModel.getPixelStride() && srcCSModel.getScanlineStride() == destCSModel.getScanlineStride()) { switch (srcSampleM.getDataType()) { case DataBuffer.TYPE_BYTE : return new DefaultWritableDirectByteIterator(raster, writeableRaster, subArea); case DataBuffer.TYPE_FLOAT : return new DefaultWritableDirectFloatIterator(raster, writeableRaster, subArea); default : return new DefaultWritableIterator(raster, writeableRaster, subArea); } } } return new DefaultWritableIterator(raster, writeableRaster, subArea); }
size += scanlineStride * (sm.getHeight() - 1); int[] bankIndices = csm.getBankIndices(); maxBandOff = bankIndices[0]; for (int i=1; i<bankIndices.length; i++)
/** * Create and return an adapted default read-only raster iterator to read on raster sub-area. * * @param renderedImage {@link RenderedImage} will be traveled by iterator from it's sub-area. * @param subReadArea {@link Rectangle} which define rendered image read area. * @return adapted {@link PixelIterator}. */ public static PixelIterator createDefaultIterator(final RenderedImage renderedImage, final Rectangle subReadArea) { if(isSingleRaster(renderedImage)){ return createDefaultIterator(renderedImage.getTile(renderedImage.getMinTileX(), renderedImage.getMinTileY()), subReadArea); } final SampleModel sampleM = renderedImage.getSampleModel(); if (sampleM instanceof ComponentSampleModel ) { if (checkBankIndices(((ComponentSampleModel)sampleM).getBankIndices())) { switch (sampleM.getDataType()) { case DataBuffer.TYPE_BYTE : return new DefaultDirectByteIterator(renderedImage, subReadArea); case DataBuffer.TYPE_FLOAT : return new DefaultDirectFloatIterator(renderedImage, subReadArea); default : return new DefaultIterator(renderedImage, subReadArea); } } } return new DefaultIterator(renderedImage, subReadArea); }
((ComponentSampleModel)sm).getPixelStride(), ((ComponentSampleModel)sm).getScanlineStride(), ((ComponentSampleModel)sm).getBankIndices(), ((ComponentSampleModel)sm).getBandOffsets() );