private SampleModel getMPSampleModel(int tileWidth, int tileHeight) { SampleModel sampleModel; if ((tileWidth == ROIExcessGranuleRemover.DEFAULT_TILE_SIZE) && (tileHeight == ROIExcessGranuleRemover.DEFAULT_TILE_SIZE)) { sampleModel = DEFAULT_PACKED_SAMPLE_MODEL; } else { String key = tileWidth + "x" + tileHeight; sampleModel = mpSampleModelCache.get(key); if (sampleModel == null) { sampleModel = new MultiPixelPackedSampleModel( DataBuffer.TYPE_BYTE, tileWidth, tileHeight, 1); mpSampleModelCache.put(key, (MultiPixelPackedSampleModel) sampleModel); } } return sampleModel; }
int dataTypeSize = DataBuffer.getDataTypeSize(type); size = mppsm.getScanlineStride() * mppsm.getHeight() + (mppsm.getDataBitOffset() + dataTypeSize - 1) / dataTypeSize; } else if (sampleModel instanceof SinglePixelPackedSampleModel) { SinglePixelPackedSampleModel sppsm = (SinglePixelPackedSampleModel) sampleModel; Arrays.fill(bankData[i], (byte) 0); db = new DataBufferByte(bankData, (int) size); Arrays.fill(bankData[i], (short) 0); db = new DataBufferUShort(bankData, (int) size); Arrays.fill(bankData[i], (short) 0); db = new DataBufferShort(bankData, (int) size); Arrays.fill(bankData[i], 0); db = new DataBufferInt(bankData, (int) size); db = sampleModel.createDataBuffer(); return Raster.createWritableRaster(sampleModel, db, location);
/** * Check whether a <code>SampleModel</code> represents a binary data set, i.e., a single band of data with one bit per pixel packed into a * <code>MultiPixelPackedSampleModel</code>. */ public static boolean isBinary(SampleModel sm) { return sm instanceof MultiPixelPackedSampleModel && ((MultiPixelPackedSampleModel) sm).getPixelBitStride() == 1 && sm.getNumBands() == 1; }
SampleModel sm = raster.getSampleModel(); if (!isBinary(sm)) { throw new IllegalArgumentException("Not a binary raster!"); int rectHeight = rect.height; DataBuffer dataBuffer = raster.getDataBuffer(); int dx = rectX - raster.getSampleModelTranslateX(); int dy = rectY - raster.getSampleModelTranslateY(); int lineStride = mpp.getScanlineStride(); int eltOffset = dataBuffer.getOffset() + mpp.getOffset(dx, dy); int bitOffset = mpp.getBitOffset(dx); byte[] data = ((DataBufferByte) dataBuffer).getData(); for (int y = rectY; y < maxY; y++) { int bOffset = eltOffset * 8 + bitOffset; short[] data = dataBuffer instanceof DataBufferShort ? ((DataBufferShort) dataBuffer).getData() : ((DataBufferUShort) dataBuffer).getData(); for (int y = rectY; y < maxY; y++) { int bOffset = eltOffset * 16 + bitOffset; int[] data = ((DataBufferInt) dataBuffer).getData(); for (int y = rectY; y < maxY; y++) { int bOffset = eltOffset * 32 + bitOffset;
int dataType = sampleModel.getDataType(); int numBands = sampleModel.getNumBands(); sampleModel = sampleModel.createSubsetSampleModel(sourceBands); colorModel = null; noSubband = false; MultiPixelPackedSampleModel mppsm = (MultiPixelPackedSampleModel)sm; pos = mppsm.getOffset(startX, startY); } else if (sm instanceof SinglePixelPackedSampleModel) { SinglePixelPackedSampleModel sppsm = ((DataBufferShort)src.getDataBuffer()).getData(); stream.writeShorts(sdata, pos, destScanlineLength); break; ((DataBufferUShort)src.getDataBuffer()).getData(); stream.writeShorts(usdata, pos, destScanlineLength); break; ((DataBufferInt)src.getDataBuffer()).getData(); stream.writeInts(idata, pos, destScanlineLength); break;
sampleModel = inputRaster.getSampleModel(); } else { input = image.getRenderedImage(); sourceRegion = inputRaster.getBounds(); else sourceRegion = sourceRegion.intersection(inputRaster.getBounds()); sampleModel = sampleModel.createCompatibleSampleModel(w, h); if(sampleModel.getDataType() != DataBuffer.TYPE_BYTE || !(sampleModel instanceof MultiPixelPackedSampleModel) || ((MultiPixelPackedSampleModel)sampleModel).getDataBitOffset() != 0) { destSM = new MultiPixelPackedSampleModel(DataBuffer.TYPE_BYTE, w, h, 1, w + 7 >> 3, 0); new Point(minX, minY)); byte[] data = ((DataBufferByte)ras.getDataBuffer()).getData(); ((MultiPixelPackedSampleModel)destSM).getScanlineStride(); int bytesPerRow = (w + 7)/8; byte[] bdata = ((DataBufferByte)inputRaster.getDataBuffer()).getData();
public static ByteBuffer createImageBuffer(BufferedImage image) { SampleModel model = image.getSampleModel(); Raster raster = image.getRaster(); DataBuffer inBuffer = raster.getDataBuffer(); ByteBuffer outBuffer = ByteBuffer.allocateDirect(image.getWidth() * image.getHeight() * model.getNumBands()); int x = -raster.getSampleModelTranslateX(); int y = -raster.getSampleModelTranslateY(); int step = model.getWidth() * model.getNumBands(); int channels = model.getNumBands(); step = multiModel.getScanlineStride(); channels = ((MultiPixelPackedSampleModel) model).getPixelBitStride() / 8; byte[] a = ((DataBufferByte) inBuffer).getData(); copy(ByteBuffer.wrap(a, start, a.length - start), step, outBuffer, step, false); short[] a = ((DataBufferShort) inBuffer).getData(); copy(ShortBuffer.wrap(a, start, a.length - start), step, outBuffer.asShortBuffer(), step / 2, true); short[] a = ((DataBufferUShort) inBuffer).getData(); copy(ShortBuffer.wrap(a, start, a.length - start), step, outBuffer.asShortBuffer(), step / 2, false); int[] a = ((DataBufferInt) inBuffer).getData(); copy(IntBuffer.wrap(a, start, a.length - start), step, outBuffer.asIntBuffer(), step / 4);
DataBufferByte dbb = (DataBufferByte)db; DataBufferUShort dbus = (DataBufferUShort)db; DataBufferShort dbs = (DataBufferShort)db; DataBufferInt dbi = (DataBufferInt)db; (MultiPixelPackedSampleModel)sm; dstOffset = mppsm.getOffset(-ras.getSampleModelTranslateX(), -ras.getSampleModelTranslateY()); pixelBitStride = mppsm.getPixelBitStride(); scanlineStride = mppsm.getScanlineStride(); if(db instanceof DataBufferByte) { DataBufferByte dbb = (DataBufferByte)db; intData = dbi.getData(); isSupportedType = true; DataBufferByte dbb = (DataBufferByte)db; DataBufferUShort dbus = (DataBufferUShort)db; DataBufferInt dbi = (DataBufferInt)db;
private void intLoopBinary(int dataType, RasterAccessor src, Raster source, WritableRaster dest, Rectangle destRect, Raster roi, int srcRectX, int srcRectY, RandomIter roiIter) { int sourceTransX = source.getSampleModelTranslateX(); int sourceTransY = source.getSampleModelTranslateY(); int sourceDataBitOffset = sourceSM.getDataBitOffset(); int sourceScanlineStride = sourceSM.getScanlineStride(); int sourcePixelStride = sourceSM.getPixelBitStride(); int destDataBitOffset = destSM.getDataBitOffset(); int destScanlineStride = destSM.getScanlineStride(); int sourceDBOffset = sourceDB.getOffset(); int[] destData = destDB.getData(); int destDBOffset = destDB.getOffset(); roiTransY = roi.getSampleModelTranslateY(); roiScanlineStride = roiSM.getScanlineStride(); DataBuffer roiDB = roi.getDataBuffer(); byte[] roiDataB = roiDBByte.getData(); roiData = new int[roiDataB.length]; for (int ii = 0; ii < roiDataB.length; ii++) {
private void ushortLoopBinary(int dataType, RasterAccessor src, Raster source, WritableRaster dest, Rectangle destRect, Raster roi, int srcRectX, int srcRectY, RandomIter roiIter) { int sourceTransX = source.getSampleModelTranslateX(); int sourceTransY = source.getSampleModelTranslateY(); int sourceDataBitOffset = sourceSM.getDataBitOffset(); int sourceScanlineStride = sourceSM.getScanlineStride(); int sourcePixelStride = sourceSM.getPixelBitStride(); int destDataBitOffset = destSM.getDataBitOffset(); int destScanlineStride = destSM.getScanlineStride(); int sourceDBOffset = sourceDB.getOffset(); short[] destData = destDB.getData(); int destDBOffset = destDB.getOffset(); roiTransY = roi.getSampleModelTranslateY(); roiScanlineStride = roiSM.getScanlineStride(); DataBuffer roiDB = roi.getDataBuffer(); byte[] roiDataB = roiDBByte.getData(); roiData = new int[roiDataB.length]; for (int ii = 0; ii < roiDataB.length; ii++) {
.getSampleModel(); int sourceTransX = source.getSampleModelTranslateX(); int sourceTransY = source.getSampleModelTranslateY(); int sourceDataBitOffset = sourceSM.getDataBitOffset(); int sourceScanlineStride = sourceSM.getScanlineStride(); int sourcePixelStride = sourceSM.getPixelBitStride(); roiTransY = roi.getSampleModelTranslateY(); roiScanlineStride = roiSM.getScanlineStride(); roiDB = roi.getDataBuffer(); int destDataBitOffset = destSM.getDataBitOffset(); int destScanlineStride = destSM.getScanlineStride(); int bitNum = 0; dataType=destSM.getDataType(); sourceDataB = sourceDBByte.getData(); destDataB = destDBByte.getData(); sourceDataS = sourceDBShort.getData(); destDataS = destDBShort.getData();
Rectangle bounds = raster.getBounds(); SampleModel sampleModel = raster.getSampleModel(); boolean hasAlpha = sampleModel.getNumBands() == 4; if (raster.getParent() == null && bounds.x == 0 && bounds.y == 0) { if (packedSampleModel.getPixelBitStride() == 1) { return outputOccupiedRangesOfBinaryPixels(((DataBufferByte)data).getData(), bounds.width, bounds.height, out); if (sampleModel.getDataType() == DataBuffer.TYPE_INT) { return outputOccupiedRanges(((DataBufferInt)data).getData(), bounds.width, bounds.height, hasAlpha ? 0xff000000 : 0xffffff, out);
int lineStride = mpp.getScanlineStride(); int eltOffset = dataBuffer.getOffset() + mpp.getOffset(dx, dy); int bitOffset = mpp.getBitOffset(dx); byte[] data = ((DataBufferByte) dataBuffer).getData(); for (int y = 0; y < rectHeight; y++) { int bOffset = eltOffset * 8 + bitOffset; short[] data = dataBuffer instanceof DataBufferShort ? ((DataBufferShort) dataBuffer).getData() : ((DataBufferUShort) dataBuffer).getData(); for (int y = 0; y < rectHeight; y++) { int bOffset = eltOffset * 16 + bitOffset; int[] data = ((DataBufferInt) dataBuffer).getData(); for (int y = 0; y < rectHeight; y++) { int bOffset = eltOffset * 32 + bitOffset;
int lineStride = mpp.getScanlineStride(); int eltOffset = dataBuffer.getOffset() + mpp.getOffset(dx, dy); int bitOffset = mpp.getBitOffset(dx); switch (sm.getDataType()) { case DataBuffer.TYPE_BYTE: { byte[] data = ((DataBufferByte) dataBuffer).getData(); int bits = bitOffset & 7; int otherBits = (bits == 0) ? 0 : 8 - bits; short[] data = ((DataBufferUShort) dataBuffer).getData(); int bits = bitOffset & 15; int otherBits = (bits == 0) ? 0 : 16 - bits; int[] data = ((DataBufferInt) dataBuffer).getData(); int bits = bitOffset & 31; int otherBits = (bits == 0) ? 0 : 32 - bits;
public void lookup(Raster src, Raster dst, int alpha, int channels, int skip) { int srcWidth = src.getWidth(); int dstWidth = dst.getWidth(); int srcHeight = src.getHeight(); int dstHeight = dst.getHeight(); int dstScanlineStride; if (sourceSm instanceof MultiPixelPackedSampleModel) { srcScanlineStride = ((MultiPixelPackedSampleModel)sourceSm).getScanlineStride(); dstScanlineStride = ((MultiPixelPackedSampleModel)destSm).getScanlineStride(); } else { srcScanlineStride = ((ComponentSampleModel)sourceSm).getScanlineStride(); byte[][] data = ((DataBufferByte) dstdata).getBankData(); for (int bank = 0; bank < data.length; bank++) { lookup(srcdata, srcWidth, srcHeight, srcScanlineStride,
int dataTypeSize = getDataTypeSize(sm.getDataType()); int numBands = sm.getNumBands(); for(int i = 0; i < numBands; i++) { if(sm.getSampleSize(i) != dataTypeSize) { MultiPixelPackedSampleModel mppsm = (MultiPixelPackedSampleModel)sm; if(dataTypeSize % mppsm.getPixelBitStride() != 0) {
public static long getTileSize(SampleModel sm) { int elementSize = DataBuffer.getDataTypeSize(sm.getDataType()); return (mppsm.getScanlineStride() * mppsm.getHeight() + (mppsm.getDataBitOffset() + elementSize -1) / elementSize) * ((elementSize + 7) / 8); } else if (sm instanceof ComponentSampleModel) { size += maxBandOff + 1; if (pixelStride > 0) size += pixelStride * (sm.getWidth() - 1); if (scanlineStride > 0) size += scanlineStride * (sm.getHeight() - 1);
if ((variant == PBM_ASCII) || (variant == PBM_RAW)) { sampleModel = new MultiPixelPackedSampleModel( DataBuffer.TYPE_BYTE, destinationRegion.width, sampleModel = sampleModel.createCompatibleSampleModel( destinationRegion.x + destinationRegion.width, destinationRegion.y + destinationRegion.height); if (seleBand) sampleModel = sampleModel.createSubsetSampleModel(sourceBands); raster = Raster.createWritableRaster(sampleModel, new Point()); bi = new BufferedImage(colorModel, raster, false, null); } else { byte[] buf = ((DataBufferByte)dataBuffer).getData(); if (noTransform) { iis.readFully(buf, 0, buf.length); byte[] buf = ((DataBufferByte)dataBuffer).getData(); if (noTransform) for (int i = 0, n = 0; i < height; i++) { DataBufferUShort sbuf = (DataBufferUShort)raster.getDataBuffer(); short[] shortArray = sbuf.getData(); skipInteger(iis, sourceRegion.y * width * numBands + sourceRegion.x);
DataBufferByte dataBuffer = (DataBufferByte)raster.getDataBuffer(); if (img.getSampleModel() instanceof MultiPixelPackedSampleModel && dataBuffer.getNumBanks() == 1) { byte[] buf = dataBuffer.getData(); MultiPixelPackedSampleModel sampleModel = (MultiPixelPackedSampleModel)img.getSampleModel(); int scanlineStride = sampleModel.getScanlineStride(); int idx = 0; for (int y = 0, maxy = img.getHeight(); y < maxy; y++) { DataBufferInt dataBuffer = (DataBufferInt)raster.getDataBuffer(); if (img.getSampleModel() instanceof SinglePixelPackedSampleModel && dataBuffer.getNumBanks() == 1) { int[] buf = dataBuffer.getData(); SinglePixelPackedSampleModel sampleModel = (SinglePixelPackedSampleModel)img.getSampleModel(); int scanlineStride = sampleModel.getScanlineStride();
DataBuffer db = new DataBufferByte(backed, backed.length); new MultiPixelPackedSampleModel(DataBuffer.TYPE_BYTE, width, height, 1, stride, 0); WritableRaster wr = Raster.createWritableRaster(packing, db, null);