java.awt.image.DataBufferInt#getData()源码实例Demo

下面列出了java.awt.image.DataBufferInt#getData() 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: jmonkeyengine   文件: ShaderUtils.java
public static final ByteBuffer getImageDataFromImage(BufferedImage bufferedImage) {
	WritableRaster wr;
	DataBuffer db;

	BufferedImage bi = new BufferedImage(128, 64, BufferedImage.TYPE_INT_ARGB);
	Graphics2D g = bi.createGraphics();
	g.drawImage(bufferedImage, null, null);
	bufferedImage = bi;
	wr = bi.getRaster();
	db = wr.getDataBuffer();

	DataBufferInt dbi = (DataBufferInt) db;
	int[] data = dbi.getData();

	ByteBuffer byteBuffer = ByteBuffer.allocateDirect(data.length * 4);
	byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
	byteBuffer.asIntBuffer().put(data);
	byteBuffer.flip();

	return byteBuffer;
}
 
源代码2 项目: jmonkeyengine   文件: Screenshots.java
public static void convertScreenShot2(IntBuffer bgraBuf, BufferedImage out){
        WritableRaster wr = out.getRaster();
        DataBufferInt db = (DataBufferInt) wr.getDataBuffer();
        
        int[] cpuArray = db.getData();
        
        bgraBuf.clear();
        bgraBuf.get(cpuArray);
        
//        int width  = wr.getWidth();
//        int height = wr.getHeight();
//
//        // flip the components the way AWT likes them
//        for (int y = 0; y < height / 2; y++){
//            for (int x = 0; x < width; x++){
//                int inPtr  = (y * width + x);
//                int outPtr = ((height-y-1) * width + x);
//                int pixel = cpuArray[inPtr];
//                cpuArray[inPtr] = cpuArray[outPtr];
//                cpuArray[outPtr] = pixel;
//            }
//        }
    }
 
源代码3 项目: MikuMikuStudio   文件: ShaderUtils.java
public static final ByteBuffer getImageDataFromImage(BufferedImage bufferedImage) {
	WritableRaster wr;
	DataBuffer db;

	BufferedImage bi = new BufferedImage(128, 64, BufferedImage.TYPE_INT_ARGB);
	Graphics2D g = bi.createGraphics();
	g.drawImage(bufferedImage, null, null);
	bufferedImage = bi;
	wr = bi.getRaster();
	db = wr.getDataBuffer();

	DataBufferInt dbi = (DataBufferInt) db;
	int[] data = dbi.getData();

	ByteBuffer byteBuffer = ByteBuffer.allocateDirect(data.length * 4);
	byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
	byteBuffer.asIntBuffer().put(data);
	byteBuffer.flip();

	return byteBuffer;
}
 
/**
 * {@inheritDoc}
 */
public final Raster getRaster(int x, int y, int w, int h) {
    // If working raster is big enough, reuse it. Otherwise,
    // build a large enough new one.
    Raster raster = saved;
    if (raster == null ||
        raster.getWidth() < w || raster.getHeight() < h)
    {
        raster = getCachedRaster(model, w, h);
        saved = raster;
    }

    // Access raster internal int array. Because we use a DirectColorModel,
    // we know the DataBuffer is of type DataBufferInt and the SampleModel
    // is SinglePixelPackedSampleModel.
    // Adjust for initial offset in DataBuffer and also for the scanline
    // stride.
    // These calls make the DataBuffer non-acceleratable, but the
    // Raster is never Stable long enough to accelerate anyway...
    DataBufferInt rasterDB = (DataBufferInt)raster.getDataBuffer();
    int[] pixels = rasterDB.getData(0);
    int off = rasterDB.getOffset();
    int scanlineStride = ((SinglePixelPackedSampleModel)
                          raster.getSampleModel()).getScanlineStride();
    int adjust = scanlineStride - w;

    fillRaster(pixels, off, adjust, x, y, w, h); // delegate to subclass

    return raster;
}
 
/**
 * {@inheritDoc}
 */
public final Raster getRaster(int x, int y, int w, int h) {
    // If working raster is big enough, reuse it. Otherwise,
    // build a large enough new one.
    Raster raster = saved;
    if (raster == null ||
        raster.getWidth() < w || raster.getHeight() < h)
    {
        raster = getCachedRaster(model, w, h);
        saved = raster;
    }

    // Access raster internal int array. Because we use a DirectColorModel,
    // we know the DataBuffer is of type DataBufferInt and the SampleModel
    // is SinglePixelPackedSampleModel.
    // Adjust for initial offset in DataBuffer and also for the scanline
    // stride.
    // These calls make the DataBuffer non-acceleratable, but the
    // Raster is never Stable long enough to accelerate anyway...
    DataBufferInt rasterDB = (DataBufferInt)raster.getDataBuffer();
    int[] pixels = rasterDB.getData(0);
    int off = rasterDB.getOffset();
    int scanlineStride = ((SinglePixelPackedSampleModel)
                          raster.getSampleModel()).getScanlineStride();
    int adjust = scanlineStride - w;

    fillRaster(pixels, off, adjust, x, y, w, h); // delegate to subclass

    return raster;
}
 
源代码6 项目: jdk8u-jdk   文件: MultipleGradientPaintContext.java
/**
 * {@inheritDoc}
 */
public final Raster getRaster(int x, int y, int w, int h) {
    // If working raster is big enough, reuse it. Otherwise,
    // build a large enough new one.
    Raster raster = saved;
    if (raster == null ||
        raster.getWidth() < w || raster.getHeight() < h)
    {
        raster = getCachedRaster(model, w, h);
        saved = raster;
    }

    // Access raster internal int array. Because we use a DirectColorModel,
    // we know the DataBuffer is of type DataBufferInt and the SampleModel
    // is SinglePixelPackedSampleModel.
    // Adjust for initial offset in DataBuffer and also for the scanline
    // stride.
    // These calls make the DataBuffer non-acceleratable, but the
    // Raster is never Stable long enough to accelerate anyway...
    DataBufferInt rasterDB = (DataBufferInt)raster.getDataBuffer();
    int[] pixels = rasterDB.getData(0);
    int off = rasterDB.getOffset();
    int scanlineStride = ((SinglePixelPackedSampleModel)
                          raster.getSampleModel()).getScanlineStride();
    int adjust = scanlineStride - w;

    fillRaster(pixels, off, adjust, x, y, w, h); // delegate to subclass

    return raster;
}
 
/**
 * {@inheritDoc}
 */
public final Raster getRaster(int x, int y, int w, int h) {
    // If working raster is big enough, reuse it. Otherwise,
    // build a large enough new one.
    Raster raster = saved;
    if (raster == null ||
        raster.getWidth() < w || raster.getHeight() < h)
    {
        raster = getCachedRaster(model, w, h);
        saved = raster;
    }

    // Access raster internal int array. Because we use a DirectColorModel,
    // we know the DataBuffer is of type DataBufferInt and the SampleModel
    // is SinglePixelPackedSampleModel.
    // Adjust for initial offset in DataBuffer and also for the scanline
    // stride.
    // These calls make the DataBuffer non-acceleratable, but the
    // Raster is never Stable long enough to accelerate anyway...
    DataBufferInt rasterDB = (DataBufferInt)raster.getDataBuffer();
    int[] pixels = rasterDB.getData(0);
    int off = rasterDB.getOffset();
    int scanlineStride = ((SinglePixelPackedSampleModel)
                          raster.getSampleModel()).getScanlineStride();
    int adjust = scanlineStride - w;

    fillRaster(pixels, off, adjust, x, y, w, h); // delegate to subclass

    return raster;
}
 
/**
 * {@inheritDoc}
 */
public final Raster getRaster(int x, int y, int w, int h) {
    // If working raster is big enough, reuse it. Otherwise,
    // build a large enough new one.
    Raster raster = saved;
    if (raster == null ||
        raster.getWidth() < w || raster.getHeight() < h)
    {
        raster = getCachedRaster(model, w, h);
        saved = raster;
    }

    // Access raster internal int array. Because we use a DirectColorModel,
    // we know the DataBuffer is of type DataBufferInt and the SampleModel
    // is SinglePixelPackedSampleModel.
    // Adjust for initial offset in DataBuffer and also for the scanline
    // stride.
    // These calls make the DataBuffer non-acceleratable, but the
    // Raster is never Stable long enough to accelerate anyway...
    DataBufferInt rasterDB = (DataBufferInt)raster.getDataBuffer();
    int[] pixels = rasterDB.getData(0);
    int off = rasterDB.getOffset();
    int scanlineStride = ((SinglePixelPackedSampleModel)
                          raster.getSampleModel()).getScanlineStride();
    int adjust = scanlineStride - w;

    fillRaster(pixels, off, adjust, x, y, w, h); // delegate to subclass

    return raster;
}
 
源代码9 项目: mochadoom   文件: MenuMisc.java
public static void WritePNGfile(String imagename, int[] linear, int width, int height) {
    BufferedImage buf = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
    DataBufferInt sh = (DataBufferInt) buf.getRaster().getDataBuffer();
    int[] shd = sh.getData();
    System.arraycopy(linear, 0, shd, 0, Math.min(linear.length, shd.length));
    try {
        ImageIO.write(buf, "PNG", new File(imagename));
    } catch (IOException e) {
        e.printStackTrace();
    }
}
 
/**
 * {@inheritDoc}
 */
public final Raster getRaster(int x, int y, int w, int h) {
    // If working raster is big enough, reuse it. Otherwise,
    // build a large enough new one.
    Raster raster = saved;
    if (raster == null ||
        raster.getWidth() < w || raster.getHeight() < h)
    {
        raster = getCachedRaster(model, w, h);
        saved = raster;
    }

    // Access raster internal int array. Because we use a DirectColorModel,
    // we know the DataBuffer is of type DataBufferInt and the SampleModel
    // is SinglePixelPackedSampleModel.
    // Adjust for initial offset in DataBuffer and also for the scanline
    // stride.
    // These calls make the DataBuffer non-acceleratable, but the
    // Raster is never Stable long enough to accelerate anyway...
    DataBufferInt rasterDB = (DataBufferInt)raster.getDataBuffer();
    int[] pixels = rasterDB.getData(0);
    int off = rasterDB.getOffset();
    int scanlineStride = ((SinglePixelPackedSampleModel)
                          raster.getSampleModel()).getScanlineStride();
    int adjust = scanlineStride - w;

    fillRaster(pixels, off, adjust, x, y, w, h); // delegate to subclass

    return raster;
}
 
源代码11 项目: jdk8u-jdk   文件: MultipleGradientPaintContext.java
/**
 * {@inheritDoc}
 */
public final Raster getRaster(int x, int y, int w, int h) {
    // If working raster is big enough, reuse it. Otherwise,
    // build a large enough new one.
    Raster raster = saved;
    if (raster == null ||
        raster.getWidth() < w || raster.getHeight() < h)
    {
        raster = getCachedRaster(model, w, h);
        saved = raster;
    }

    // Access raster internal int array. Because we use a DirectColorModel,
    // we know the DataBuffer is of type DataBufferInt and the SampleModel
    // is SinglePixelPackedSampleModel.
    // Adjust for initial offset in DataBuffer and also for the scanline
    // stride.
    // These calls make the DataBuffer non-acceleratable, but the
    // Raster is never Stable long enough to accelerate anyway...
    DataBufferInt rasterDB = (DataBufferInt)raster.getDataBuffer();
    int[] pixels = rasterDB.getData(0);
    int off = rasterDB.getOffset();
    int scanlineStride = ((SinglePixelPackedSampleModel)
                          raster.getSampleModel()).getScanlineStride();
    int adjust = scanlineStride - w;

    fillRaster(pixels, off, adjust, x, y, w, h); // delegate to subclass

    return raster;
}
 
源代码12 项目: Java8CN   文件: MultipleGradientPaintContext.java
/**
 * {@inheritDoc}
 */
public final Raster getRaster(int x, int y, int w, int h) {
    // If working raster is big enough, reuse it. Otherwise,
    // build a large enough new one.
    Raster raster = saved;
    if (raster == null ||
        raster.getWidth() < w || raster.getHeight() < h)
    {
        raster = getCachedRaster(model, w, h);
        saved = raster;
    }

    // Access raster internal int array. Because we use a DirectColorModel,
    // we know the DataBuffer is of type DataBufferInt and the SampleModel
    // is SinglePixelPackedSampleModel.
    // Adjust for initial offset in DataBuffer and also for the scanline
    // stride.
    // These calls make the DataBuffer non-acceleratable, but the
    // Raster is never Stable long enough to accelerate anyway...
    DataBufferInt rasterDB = (DataBufferInt)raster.getDataBuffer();
    int[] pixels = rasterDB.getData(0);
    int off = rasterDB.getOffset();
    int scanlineStride = ((SinglePixelPackedSampleModel)
                          raster.getSampleModel()).getScanlineStride();
    int adjust = scanlineStride - w;

    fillRaster(pixels, off, adjust, x, y, w, h); // delegate to subclass

    return raster;
}
 
源代码13 项目: hottub   文件: MultipleGradientPaintContext.java
/**
 * {@inheritDoc}
 */
public final Raster getRaster(int x, int y, int w, int h) {
    // If working raster is big enough, reuse it. Otherwise,
    // build a large enough new one.
    Raster raster = saved;
    if (raster == null ||
        raster.getWidth() < w || raster.getHeight() < h)
    {
        raster = getCachedRaster(model, w, h);
        saved = raster;
    }

    // Access raster internal int array. Because we use a DirectColorModel,
    // we know the DataBuffer is of type DataBufferInt and the SampleModel
    // is SinglePixelPackedSampleModel.
    // Adjust for initial offset in DataBuffer and also for the scanline
    // stride.
    // These calls make the DataBuffer non-acceleratable, but the
    // Raster is never Stable long enough to accelerate anyway...
    DataBufferInt rasterDB = (DataBufferInt)raster.getDataBuffer();
    int[] pixels = rasterDB.getData(0);
    int off = rasterDB.getOffset();
    int scanlineStride = ((SinglePixelPackedSampleModel)
                          raster.getSampleModel()).getScanlineStride();
    int adjust = scanlineStride - w;

    fillRaster(pixels, off, adjust, x, y, w, h); // delegate to subclass

    return raster;
}
 
源代码14 项目: cloudstack   文件: RawRect.java
@Override
public void paint(BufferedImage image, Graphics2D graphics) {

    DataBuffer dataBuf = image.getRaster().getDataBuffer();

    switch (dataBuf.getDataType()) {

    case DataBuffer.TYPE_INT: {
        // We chose RGB888 model, so Raster will use DataBufferInt type
        DataBufferInt dataBuffer = (DataBufferInt)dataBuf;

        int imageWidth = image.getWidth();
        int imageHeight = image.getHeight();

        // Paint rectangle directly on buffer, line by line
        int[] imageBuffer = dataBuffer.getData();
        for (int srcLine = 0, dstLine = y; srcLine < height && dstLine < imageHeight; srcLine++, dstLine++) {
            try {
                System.arraycopy(buf, srcLine * width, imageBuffer, x + dstLine * imageWidth, width);
            } catch (IndexOutOfBoundsException e) {
                s_logger.info("[ignored] buffer overflow!?!", e);
            }
        }
        break;
    }

    default:
        throw new RuntimeException("Unsupported data buffer in buffered image: expected data buffer of type int (DataBufferInt). Actual data buffer type: " +
                dataBuf.getClass().getSimpleName());
    }
}
 
源代码15 项目: cosmic   文件: RawRect.java
@Override
public void paint(final BufferedImage image, final Graphics2D graphics) {

    final DataBuffer dataBuf = image.getRaster().getDataBuffer();

    switch (dataBuf.getDataType()) {

        case DataBuffer.TYPE_INT: {
            // We chose RGB888 model, so Raster will use DataBufferInt type
            final DataBufferInt dataBuffer = (DataBufferInt) dataBuf;

            final int imageWidth = image.getWidth();
            final int imageHeight = image.getHeight();

            // Paint rectangle directly on buffer, line by line
            final int[] imageBuffer = dataBuffer.getData();
            for (int srcLine = 0, dstLine = y; srcLine < height && dstLine < imageHeight; srcLine++, dstLine++) {
                try {
                    System.arraycopy(buf, srcLine * width, imageBuffer, x + dstLine * imageWidth, width);
                } catch (final IndexOutOfBoundsException e) {
                    s_logger.info("[ignored] buffer overflow!?!", e);
                }
            }
            break;
        }

        default:
            throw new RuntimeException("Unsupported data buffer in buffered image: expected data buffer of type int (DataBufferInt). Actual data buffer type: " +
                    dataBuf.getClass().getSimpleName());
    }
}
 
源代码16 项目: snap-desktop   文件: ImageInfoEditor.java
private static BufferedImage createAlphaBackground(int width, int height) {
    BufferedImage background = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
    DataBufferInt dataBuffer = (DataBufferInt) background.getRaster().getDataBuffer();
    int[] data = dataBuffer.getData();
    int gray = Color.LIGHT_GRAY.getRGB();
    int white = Color.WHITE.getRGB();
    for (int i = 0; i < data.length; i++) {
        int x = i % width;
        int y = i / width;
        data[i] = ((x / 4) % 2 == (y / 4) % 2) ? gray : white;
    }
    return background;
}
 
源代码17 项目: runelite   文件: ImageUtilTest.java
/**
 * Compares whether two {@link BufferedImage}s are equal in data.
 *
 * @param expected The first {@link BufferedImage} to be compared.
 * @param actual   The second {@link BufferedImage} to be compared.
 * @return         A boolean indicating whether the given {@link BufferedImage}s are of the same image data.
 */
private boolean bufferedImagesEqual(final @Nonnull BufferedImage expected, final @Nonnull BufferedImage actual)
{
	if (expected.getWidth() != actual.getWidth())
	{
		return false;
	}

	if (!expected.getColorModel().equals(actual.getColorModel()))
	{
		return false;
	}

	final DataBuffer aBuffer = expected.getRaster().getDataBuffer();
	final DataBuffer bBuffer = actual.getRaster().getDataBuffer();
	final DataBufferInt aBufferInt = (DataBufferInt) aBuffer;
	final DataBufferInt bBufferInt = (DataBufferInt) bBuffer;

	if (aBufferInt.getNumBanks() != bBufferInt.getNumBanks())
	{
		return false;
	}

	for (int i = 0; i < aBufferInt.getNumBanks(); i++)
	{
		final int[] aDataBank = aBufferInt.getData(i);
		final int[] bDataBank = bBufferInt.getData(i);
		if (!Arrays.equals(aDataBank, bDataBank))
		{
			return false;
		}
	}

	return true;
}
 
源代码18 项目: java-swing-tips   文件: MainPanel.java
private static int[] getData(BufferedImage image) {
  WritableRaster wr = image.getRaster();
  DataBufferInt dbi = (DataBufferInt) wr.getDataBuffer();
  return dbi.getData();
  // return ((DataBufferInt) image.getRaster().getDataBuffer()).getData();
}
 
源代码19 项目: scrimage   文件: PngWriter.java
@Override
public void write(AwtImage image, ImageMetadata metadata, OutputStream out) throws IOException {

    if (image.awt().getType() == BufferedImage.TYPE_INT_ARGB) {

        ImageInfo imi = new ImageInfo(image.width, image.height, 8, true);

        ar.com.hjg.pngj.PngWriter writer = new ar.com.hjg.pngj.PngWriter(out, imi);
        writer.setCompLevel(compressionLevel);
        writer.setFilterType(FilterType.FILTER_DEFAULT);

        DataBufferInt db = (DataBufferInt) image.awt().getRaster().getDataBuffer();
        if (db.getNumBanks() != 1) throw new RuntimeException("This method expects one bank");

        SinglePixelPackedSampleModel samplemodel = (SinglePixelPackedSampleModel) image.awt().getSampleModel();
        ImageLineInt line = new ImageLineInt(imi);
        int[] dbbuf = db.getData();

        for (int row = 0; row < imi.rows; row++) {
            int elem = samplemodel.getOffset(0, row);
            int j = 0;
            for (int col = 0; col < imi.cols; col++) {
                int sample = dbbuf[elem];
                elem = elem + 1;
                line.getScanline()[j] = (sample & 0xFF0000) >> 16; // R
                j = j + 1;
                line.getScanline()[j] = (sample & 0xFF00) >> 8; // G
                j = j + 1;
                line.getScanline()[j] = sample & 0xFF; // B
                j = j + 1;
                line.getScanline()[j] = ((sample & 0xFF000000) >> 24) & 0xFF; // A
                j = j + 1;
            }
            writer.writeRow(line, row);
        }
        writer.end();// end calls close

    } else {
        ImageIO.write(image.awt(), "png", out);
    }
}
 
源代码20 项目: RemoteSupportTool   文件: ImageUtils.java
public static boolean equals(BufferedImage image1, BufferedImage image2) {
    final int image1Width = image1.getWidth();
    final int image1Height = image1.getHeight();

    final int image2Width = image2.getWidth();
    final int image2Height = image2.getHeight();

    if (image1Width != image2Width || image1Height != image2Height)
        return false;

    final DataBuffer image1Buffer = image1.getData().getDataBuffer();
    final DataBuffer image2Buffer = image2.getData().getDataBuffer();

    final int image1BufferSize = image1Buffer.getSize();
    final int image2BufferSize = image2Buffer.getSize();
    if (image1BufferSize != image2BufferSize)
        return false;

    if (image1Buffer instanceof DataBufferInt && image2Buffer instanceof DataBufferInt) {
        // compare according to https://stackoverflow.com/a/11006984
        final DataBufferInt image1BufferInt = (DataBufferInt) image1Buffer;
        final DataBufferInt image2BufferInt = (DataBufferInt) image2Buffer;
        if (image1BufferInt.getNumBanks() != image2BufferInt.getNumBanks())
            return false;

        for (int bank = 0; bank < image1BufferInt.getNumBanks(); bank++) {
            int[] actual = image1BufferInt.getData(bank);
            int[] expected = image2BufferInt.getData(bank);
            if (!Arrays.equals(actual, expected))
                return false;
        }
    } else {
        // compare according to https://stackoverflow.com/a/51497360
        for (int i = 0; i < image1BufferSize; i++) {
            if (image1Buffer.getElem(i) != image2Buffer.getElem(i)) {
                return false;
            }
        }
    }

    //for (int x = 0; x < image1Width; x++) {
    //    for (int y = 0; y < image1Height; y++) {
    //        if (image1.getRGB(x, y) != image2.getRGB(x, y)) {
    //            return false;
    //        }
    //    }
    //}

    return true;
}