@Override public void paint(BufferedImage image, Graphics2D graphics) { DataBuffer dataBuf = image.getRaster().getDataBuffer(); switch (dataBuf.getDataType()) { int imageWidth = image.getWidth(); int imageHeight = image.getHeight(); int[] imageBuffer = dataBuffer.getData(); for (int srcLine = 0, dstLine = y; srcLine < height && dstLine < imageHeight; srcLine++, dstLine++) { try {
private DataBuffer createDataBufferFilledWithNoDataValues( WritableRaster raster, int pixelSize) { int dataType = raster.getDataBuffer().getDataType(); int dataBufferSize = raster.getDataBuffer().getSize(); int nrBanks = raster.getDataBuffer().getNumBanks(); DataBuffer dataBuffer; switch (dataType) { Arrays.fill(intDataArray[i], noDataValue.intValue()); dataBuffer = new DataBufferInt(intDataArray, dataBufferSize); break; case DataBuffer.TYPE_FLOAT: Arrays.fill(shortDataArray[i], noDataValue.shortValue()); dataBuffer = new DataBufferShort(shortDataArray, dataBufferSize); break; Arrays.fill(byteDataArray[i], noDataValue.byteValue()); dataBuffer = new DataBufferByte(byteDataArray, dataBufferSize); break; Arrays.fill(ushortDataArray[i], noDataValue.shortValue()); dataBuffer = new DataBufferUShort(ushortDataArray, dataBufferSize); break;
if (colorMapData.getNumBanks() < 3 || colorMapData.getNumBanks() > 4) { throw new IllegalArgumentException( "colorMapData shall have 3 or 4 banks: " + colorMapData.getNumBanks()); final int numBanks = colorMapData.getNumBanks(); final int mapSize = colorMapData.getSize(); r[i] = (byte) (colorMapData.getElem(0, i) & 0xFF); g[i] = (byte) (colorMapData.getElem(1, i) & 0xFF); b[i] = (byte) (colorMapData.getElem(2, i) & 0xFF); a[i] = (byte) ((numBanks == 3 ? 255 : colorMapData.getElem(3, i)) & 0xFF);
public void recycleTile(Raster tile) { DataBuffer db = tile.getDataBuffer(); Long key = getKey(db.getDataType(), db.getNumBanks(), db.getSize()); if (LOGGER.isLoggable(Level.FINER)) { LOGGER.log( Level.FINER, "Recycling tile hit on type:{1}, banks: {2}, arrayLength: {3}", new Object[] {db.getDataType(), db.getNumBanks(), db.getSize()}); } ConcurrentLinkedQueue<SoftReference<?>> arrays = get(key); if (arrays == null) { arrays = new ConcurrentLinkedQueue<SoftReference<?>>(); arrays.add(getBankReference(db)); put(key, arrays); return; } else { arrays.add(getBankReference(db)); } }
InvertedRaster(final Raster raster) { super(raster.getSampleModel(), new DataBuffer(raster.getDataBuffer().getDataType(), raster.getDataBuffer().getSize()) { private final DataBuffer delegate = raster.getDataBuffer(); @Override public int getElem(final int bank, final int i) { return (255 - delegate.getElem(bank, i)); } @Override public void setElem(int bank, int i, int val) { throw new UnsupportedOperationException("setElem"); } }, new Point()); } }
if (image.getColorModel().getPixelSize() != bits) BufferedImage packedImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_BYTE_BINARY); Graphics graphics = packedImage.getGraphics(); DataBuffer dBuf = image.getData().getDataBuffer(); if (dBuf.getDataType() == DataBuffer.TYPE_BYTE) decoded.write(((DataBufferByte) dBuf).getData());
BufferedImage image = readJPX(encoded, options, result); Raster raster = image.getRaster(); switch (raster.getDataBuffer().getDataType()) DataBufferByte byteBuffer = (DataBufferByte) raster.getDataBuffer(); decoded.write(byteBuffer.getData()); return result; DataBufferUShort wordBuffer = (DataBufferUShort) raster.getDataBuffer(); for (short w : wordBuffer.getData()) int[] ar = new int[raster.getNumBands()]; for (int y = 0; y < image.getHeight(); ++y) for (int x = 0; x < image.getWidth(); ++x) raster.getPixel(x, y, ar); throw new IOException("Data type " + raster.getDataBuffer().getDataType() + " not implemented");
strideElementsAligned = strideBytesAligned / 2; cm = new DirectColorModel(16, 0x7C00, 0x3E0, 0x1F); buffer = new DataBufferUShort(strideElementsAligned * height); raster = Raster.createPackedRaster(buffer, bih.biWidth, height, strideElementsAligned, ((DirectColorModel) cm).getMasks(), null); break; case 32: strideElementsAligned = strideBytesAligned / 4; cm = new DirectColorModel(32, 0xFF0000, 0xFF00, 0xFF); buffer = new DataBufferInt(strideElementsAligned * height); raster = Raster.createPackedRaster(buffer, bih.biWidth, height, strideElementsAligned, ((DirectColorModel) cm).getMasks(), null); break; default: switch (buffer.getDataType()) int[] pixels = ((DataBufferInt) buffer).getData(); ok = GDI.GetDIBits(blitDC, outputBitmap, 0, raster.getHeight(), pixels, bi, 0); short[] pixels = ((DataBufferUShort) buffer).getData(); ok = GDI.GetDIBits(blitDC, outputBitmap, 0, raster.getHeight(), pixels, bi, 0); throw new AssertionError("Unexpected buffer element type: " + buffer.getDataType()); return new BufferedImage(cm, raster, false, null);
private void addExtraPages(final PDDocument document, final PDFRenderer pdfRenderer, final int minPageCount, final int color, final boolean expected) throws IOException { for (int pageIndex = minPageCount; pageIndex < document.getNumberOfPages(); pageIndex++) { ImageWithDimension image = renderPageAsImage(document, pdfRenderer, pageIndex); final DataBuffer dataBuffer = image.bufferedImage.getRaster().getDataBuffer(); for (int i = 0; i < image.bufferedImage.getWidth() * MARKER_WIDTH; i++) { dataBuffer.setElem(i, color); } for (int i = 0; i < image.bufferedImage.getHeight(); i++) { for (int j = 0; j < MARKER_WIDTH; j++) { dataBuffer.setElem(i * image.bufferedImage.getWidth() + j, color); } } if (expected) { compareResult.addPage(new PageDiffCalculator(true, false), pageIndex, image, blank(image), image); } else { compareResult.addPage(new PageDiffCalculator(true, false), pageIndex, blank(image), image, image); } } }
/** * Constructs a grid coverage from the specified {@linkplain WritableRaster raster} and * "{@linkplain GridGeometry2D#getGridToCoordinateSystem grid to CRS}" transform. * * @param name The grid coverage name. * @param raster The raster. * @param crs The coordinate reference system. This specifies the CRS used when accessing a grid * coverage with the {@code evaluate} methods. The number of dimensions must matches the * number of target dimensions of {@code gridToCRS}. * @param gridToCRS The math transform from grid to coordinate reference system. * @param bands Sample dimensions for each image band, or {@code null} for default sample * dimensions. If non-null, then this array's length must matches the number of bands in * {@code image}. * @return The new grid coverage. * @since 2.2 */ public GridCoverage2D create( final CharSequence name, final WritableRaster raster, final CoordinateReferenceSystem crs, final MathTransform gridToCRS, GridSampleDimension[] bands) { if (bands == null) { bands = RenderedSampleDimension.create(name, raster, null, null, null, null, null); } final ColorModel model = bands[0].getColorModel(0, bands.length, raster.getDataBuffer().getDataType()); final RenderedImage image = new BufferedImage(model, raster, false, null); return create(name, image, crs, gridToCRS, bands, null, null); }
final int[] pByteCounts, final int pCompression) throws IOException { WritableRaster destRaster = destination.getRaster(); ColorModel destCM = destination.getColorModel(); WritableRaster rowRaster = singleBandRowSpec.createBufferedImage(header.width, 1).getRaster(); boolean banded = destRaster.getDataBuffer().getNumBanks() > 1; int interleavedBands = banded ? 1 : destRaster.getNumBands(); byte[] row1 = ((DataBufferByte) rowRaster.getDataBuffer()).getData(); read1bitChannel(c, channels, destRaster.getDataBuffer(), interleavedBands, bandOffset, pSourceCM, row1, pSource, pDest, pXSub, pYSub, header.width, header.height, pByteCounts, pCompression == PSD.COMPRESSION_RLE); break; case 8: byte[] row8 = ((DataBufferByte) rowRaster.getDataBuffer()).getData(); read8bitChannel(c, channels, destRaster.getDataBuffer(), interleavedBands, bandOffset, pSourceCM, row8, pSource, pDest, pXSub, pYSub, header.width, header.height, pByteCounts, c * header.height, pCompression == PSD.COMPRESSION_RLE); break; case 16: short[] row16 = ((DataBufferUShort) rowRaster.getDataBuffer()).getData(); read16bitChannel(c, channels, destRaster.getDataBuffer(), interleavedBands, bandOffset, pSourceCM, row16, pSource, pDest, pXSub, pYSub, header.width, header.height, pByteCounts, c * header.height, pCompression == PSD.COMPRESSION_RLE); break; case 32: int[] row32 = ((DataBufferInt) rowRaster.getDataBuffer()).getData(); read32bitChannel(c, channels, destRaster.getDataBuffer(), interleavedBands, bandOffset, pSourceCM, row32, pSource, pDest, pXSub, pYSub, header.width, header.height, pByteCounts, c * header.height, pCompression == PSD.COMPRESSION_RLE); break;
public static PlanarImage createMapping2(RenderedImage sourceImage, IntMap indexMap) { final Raster sourceData = sourceImage.getData(); final WritableRaster targetData = sourceData.createCompatibleWritableRaster(); final DataBuffer targetBuffer = targetData.getDataBuffer(); for (int i = 0; i < targetBuffer.getSize(); i++) { final int index = indexMap.getValue(sourceData.getDataBuffer().getElem(i)); targetBuffer.setElem(i, index); } final BufferedImage image = new BufferedImage(sourceData.getWidth(), sourceData.getHeight(), BufferedImage.TYPE_BYTE_GRAY); image.setData(targetData); return PlanarImage.wrapRenderedImage(image); }
/** * Returns the (A)RGB equivalent of the given raster, using the given AWT color space * to perform the conversion. * @param raster the source raster * @param colorSpace the AWT * @return an (A)RGB buffered image */ protected BufferedImage toRGBImageAWT(WritableRaster raster, ColorSpace colorSpace) { // // WARNING: this method is performance sensitive, modify with care! // // ICC Profile color transforms are only fast when performed using ColorConvertOp ColorModel colorModel = new ComponentColorModel(colorSpace, false, false, Transparency.OPAQUE, raster.getDataBuffer().getDataType()); BufferedImage src = new BufferedImage(colorModel, raster, false, null); BufferedImage dest = new BufferedImage(raster.getWidth(), raster.getHeight(), BufferedImage.TYPE_INT_RGB); ColorConvertOp op = new ColorConvertOp(null); op.filter(src, dest); return dest; }
private static BufferedImage createSourceImage(int sourceType, int[] sourceValues) { final BufferedImage sourceImage = new BufferedImage(4, 4, sourceType); for (int i = 0; i < sourceValues.length; i++) { sourceImage.getRaster().getDataBuffer().setElem(i, sourceValues[i]); } return sourceImage; }
public static void extractFromPixeldata(Raster raster, int mask, byte[] ovlyData, int off, int length) { ComponentSampleModel sm = (ComponentSampleModel) raster.getSampleModel(); int columns = raster.getWidth(); int stride = sm.getScanlineStride(); DataBuffer db = raster.getDataBuffer(); switch (db.getDataType()) { case DataBuffer.TYPE_BYTE: extractFromPixeldata(((DataBufferByte) db).getData(), columns, stride, mask, ovlyData, off, length); break; case DataBuffer.TYPE_USHORT: extractFromPixeldata(((DataBufferUShort) db).getData(), columns, stride, mask, ovlyData, off, length); break; case DataBuffer.TYPE_SHORT: extractFromPixeldata(((DataBufferShort) db).getData(), columns, stride, mask, ovlyData, off, length); break; default: throw new UnsupportedOperationException("Unsupported DataBuffer type: " + db.getDataType()); //$NON-NLS-1$ } }
name, raster, minValues, maxValues, units, colors, hints); final ColorModel model = bands[0].getColorModel(0, bands.length, raster.getSampleModel().getDataType()); final RenderedImage image = new BufferedImage(model, raster, false, null); return create(name, image, envelope, bands, null, null); name, raster, minValues, maxValues, units, colors, hints); final ColorModel model = bands[0].getColorModel(0, bands.length, raster.getDataBuffer().getDataType()); final RenderedImage image = new BufferedImage(model, raster, false, null); return create(name, image, crs, gridToCRS, bands, null, null);
private PlanarImage[] createSourceImages(int width, int height) { WritableRaster sourceTile = Raster.createBandedRaster(DataBuffer.TYPE_INT, width, height, 1, new Point(0, 0)); ColorModel cm = PlanarImage.getDefaultColorModel(sourceTile.getDataBuffer().getDataType(), 1); BufferedImage bufferedImage = new BufferedImage(cm, sourceTile, false, null); return new PlanarImage[]{PlanarImage.wrapRenderedImage(bufferedImage)}; }
public final BufferedImage generateBufferedImage( ) { // Create a data buffer using the byte buffer of pixel data. // The pixel data is not copied; the data buffer uses the byte buffer array. DataBuffer dbuf = new DataBufferByte( _imageData, _width_PIXELS * _height_PIXELS, 0 ); // The number of banks should be 1 dbuf.getNumBanks( ); // 1 // Prepare a sample model that specifies a storage 4-bits of // pixel datavd in an 8-bit data element int[] bitMasks = new int[] { ( byte ) 0xf }; SampleModel sampleModel = new SinglePixelPackedSampleModel( DataBuffer.TYPE_BYTE, _width_PIXELS, _height_PIXELS, bitMasks ); // Create a raster using the sample model and data buffer WritableRaster raster = Raster.createWritableRaster( sampleModel, dbuf, null ); // Combine the color model and raster into a buffered image return new BufferedImage( _colorModel, raster, true, null ); }
private Object extractImageData(BufferedImage img){ DataBuffer buf = img.getRaster().getDataBuffer(); switch (buf.getDataType()){ case DataBuffer.TYPE_BYTE: DataBufferByte byteBuf = (DataBufferByte) buf; return byteBuf.getData(); case DataBuffer.TYPE_USHORT: DataBufferUShort shortBuf = (DataBufferUShort) buf; return shortBuf.getData(); } return null; }
throws IOException { DataBuffer dataBuffer = tileRowRaster.getDataBuffer(); int bands = dataBuffer.getNumBanks(); boolean banded = bands > 1; switch (tileRowRaster.getTransferType()) { case DataBuffer.TYPE_BYTE: int bank = banded ? ((BandedSampleModel) tileRowRaster.getSampleModel()).getBankIndices()[band] : band; byte[] rowDataByte = ((DataBufferByte) dataBuffer).getData(bank); WritableRaster destChannel = banded ? raster.createWritableChild(raster.getMinX(), raster.getMinY(), raster.getWidth(), raster.getHeight(), 0, 0, new int[] {band}) : raster; Raster srcChannel = banded case DataBuffer.TYPE_SHORT: short[] rowDataShort = dataBuffer.getDataType() == DataBuffer.TYPE_USHORT ? ((DataBufferUShort) dataBuffer).getData(band) : ((DataBufferShort) dataBuffer).getData(band); case DataBuffer.TYPE_INT: int[] rowDataInt = ((DataBufferInt) dataBuffer).getData(band);