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; }
bOffs = ((ComponentSampleModel) sm).getBandOffsets(); return Raster.createInterleavedRaster(sm.getDataType(), width, height,
int[] bitOffsets; if (sampleModel instanceof ComponentSampleModel) { bandOffsets = ((ComponentSampleModel) sampleModel).getBandOffsets(); bitOffsets = null;
public ImageLineBufferedImage(ImageInfo imgInfo, BufferedImage bi, byte[] bytesdata) { this.imgInfo = imgInfo; this.image = bi; this.bytes = bytesdata; // bytes = ((DataBufferByte) bi.getRaster().getDataBuffer()).getData(); hasAlpha = image.getColorModel().hasAlpha(); if (hasAlpha) { rowLength = image.getWidth() * 4; } else { rowLength = image.getWidth() * 3; } bgrOrder = ((ComponentSampleModel) image.getSampleModel()).getBandOffsets()[0] != 0; }
public ImageLineARGBbi(ImageInfo imgInfo, BufferedImage bi, byte[] bytesdata) { this.imgInfo = imgInfo; this.image = bi; this.bytes = bytesdata; // bytes = ((DataBufferByte) bi.getRaster().getDataBuffer()).getData(); hasAlpha = image.getColorModel().hasAlpha(); if (hasAlpha) { rowLength = image.getWidth() * 4; } else { rowLength = image.getWidth() * 3; } bgrOrder = ((ComponentSampleModel) image.getSampleModel()).getBandOffsets()[0] != 0; }
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(); }
final int[] offsets = componentSampleModel.getBandOffsets();
public RasterShortABGRProvider(Raster raster, boolean hasAlpha) { super(raster, 16, (hasAlpha ? 8 : 6) * raster.getWidth()); this.hasAlpha = hasAlpha; shorts = ((DataBufferUShort) raster.getDataBuffer()).getData(); bgrOrder = ((ComponentSampleModel) raster.getSampleModel()).getBandOffsets()[0] != 0; }
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 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); }
/** * Whether we can return the data buffer's bank data * without performing any copy or conversion operations. */ private static boolean canUseBankDataDirectly(WritableRaster r, int transferType, Class<? extends DataBuffer> dataBufferClass) { int tt = r.getTransferType(); if (tt != transferType) return false; DataBuffer buffer = r.getDataBuffer(); if (!dataBufferClass.isInstance(buffer)) return false; SampleModel model = r.getSampleModel(); if (!(model instanceof ComponentSampleModel)) return false; ComponentSampleModel csm = (ComponentSampleModel) model; int pixelStride = csm.getPixelStride(); if (pixelStride != 1) return false; int w = r.getWidth(); int scanlineStride = csm.getScanlineStride(); if (scanlineStride != w) return false; int c = r.getNumBands(); int[] bandOffsets = csm.getBandOffsets(); if (bandOffsets.length != c) return false; for (int i=0; i<bandOffsets.length; i++) { if (bandOffsets[i] != 0) return false; } for (int i=0; i<bandOffsets.length; i++) { if (bandOffsets[i] != i) return false; } return true; }
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; } }
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); }
/** * Create default rendered image iterator. * * @param renderedImage image which will be follow by iterator. * @param subArea {@code Rectangle} which represent image sub area iteration. * @throws IllegalArgumentException if subArea don't intersect image boundary. */ protected DefaultDirectIterator(final RenderedImage renderedImage, final Rectangle subArea) { super(renderedImage, subArea); final SampleModel sampleM = renderedImage.getSampleModel(); if (sampleM instanceof ComponentSampleModel) { ComponentSampleModel sModel = (ComponentSampleModel) sampleM; pixelStride = sModel.getPixelStride(); scanLineStride = sModel.getScanlineStride(); bandSteps = getBandSteps(sModel.getBandOffsets(), pixelStride); } else { throw new IllegalArgumentException("DefaultDirectIterator constructor : sample model not conform"); } rasterWidth = renderedImage.getTileWidth(); rasterNumBand = sampleM.getNumBands(); //initialize attributes to update current raster on first next() call. band = -1; tY = tMinY; tX = tMinX - 1; }
/** * 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); }
final int[] bandOff = csm.getBandOffsets();