private void getImagePixels() { int w = image.getWidth(); int h = image.getHeight(); int type = image.getType(); if ((w != width) || (h != height) || (type != BufferedImage.TYPE_3BYTE_BGR)) { BufferedImage temp = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = temp.createGraphics(); g.drawImage(image, 0, 0, null); image = temp; } pixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData(); }
@Override public BufferedImage filter(BufferedImage src, BufferedImage dst) { int width = src.getWidth(); int height = src.getHeight(); int type = src.getType(); WritableRaster srcRaster = src.getRaster(); if (dst == null) { dst = createCompatibleDestImage(src, null); } WritableRaster dstRaster = dst.getRaster(); int[] inPixels = new int[width]; for (int y = 0; y < height; y++) { if (type == BufferedImage.TYPE_INT_ARGB) { srcRaster.getDataElements(0, y, width, 1, inPixels); for (int x = 0; x < width; x++) { inPixels[x] = filterRGB(inPixels[x]); } dstRaster.setDataElements(0, y, width, 1, inPixels); } else { src.getRGB(0, y, width, 1, inPixels, 0, width); for (int x = 0; x < width; x++) { inPixels[x] = filterRGB(inPixels[x]); } dst.setRGB(0, y, width, 1, inPixels, 0, width); } } return dst; }
WritableRaster wr = out.getRaster(); DataBufferByte db = (DataBufferByte) wr.getDataBuffer(); byte[] cpuArray = db.getData(); bgraBuf.clear(); int width = wr.getWidth(); int height = wr.getHeight();
/** Hunts for the start or end of a sequence of split pixels. Begins searching at (startX, startY) then follows along the x or * y axis (depending on value of xAxis) for the first non-transparent pixel if startPoint is true, or the first transparent * pixel if startPoint is false. Returns 0 if none found, as 0 is considered an invalid split point being in the outer border * which will be stripped. */ static private int getSplitPoint (WritableRaster raster, String name, int startX, int startY, boolean startPoint, boolean xAxis) { int[] rgba = new int[4]; int next = xAxis ? startX : startY; int end = xAxis ? raster.getWidth() : raster.getHeight(); int breakA = startPoint ? 255 : 0; int x = startX; int y = startY; while (next != end) { if (xAxis) x = next; else y = next; raster.getPixel(x, y, rgba); if (rgba[3] == breakA) return next; if (!startPoint && (rgba[0] != 0 || rgba[1] != 0 || rgba[2] != 0 || rgba[3] != 255)) splitError(x, y, rgba, name); next++; } return 0; }
public BufferedImage filter(BufferedImage src, BufferedImage dest) { if (dest == null) { dest = createCompatibleDestImage(src, null); } int width = src.getWidth(); int height = src.getHeight(); int[] inPixels = new int[width * height]; int[] outPixels = new int[width * height]; src.getRaster().getDataElements(0, 0, width, height, inPixels); filter(inPixels, outPixels, width, height); dest.getRaster().setDataElements(0, 0, width, height, outPixels); return dest; }
static private String hash (BufferedImage image) { try { MessageDigest digest = MessageDigest.getInstance("SHA1"); // Ensure image is the correct format. int width = image.getWidth(); int height = image.getHeight(); if (image.getType() != BufferedImage.TYPE_INT_ARGB) { BufferedImage newImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); newImage.getGraphics().drawImage(image, 0, 0, null); image = newImage; } WritableRaster raster = image.getRaster(); int[] pixels = new int[width]; for (int y = 0; y < height; y++) { raster.getDataElements(0, y, width, 1, pixels); for (int x = 0; x < width; x++) hash(digest, pixels[x]); } hash(digest, width); hash(digest, height); return new BigInteger(1, digest.digest()).toString(16); } catch (NoSuchAlgorithmException ex) { throw new RuntimeException(ex); } }
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; }
@Test public void testConvertByteABGRColors() { FastCMYKToRGB convert = new FastCMYKToRGB(); WritableRaster input = Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE, 1, 1, 4, null); WritableRaster result = new BufferedImage(1, 1, BufferedImage.TYPE_4BYTE_ABGR).getRaster(); byte[] pixel = null; for (int i = 0; i < 255; i++) { input.setDataElements(0, 0, new byte[] {(byte) i, (byte) (255 - i), (byte) (128 + i), 0}); result = convert.filter(input, result); pixel = (byte[]) result.getDataElements(0, 0, pixel); assertNotNull(pixel); assertEquals(4, pixel.length); byte[] expected = {(byte) (255 - i), (byte) i, (byte) (127 - i), (byte) 0xff}; assertTrue(String.format("Was: %s, expected: %s", Arrays.toString(pixel), Arrays.toString(expected)), Arrays.equals(expected, pixel)); } }
final WritableRaster raster = image.getRaster(); final DataBufferByte dbf = (DataBufferByte) raster.getDataBuffer(); byte[] data = dbf.getData(); final int stride = data.length / (image.getWidth() * image.getHeight()); final ColorModel cm = image.getColorModel(); for (int i = 0; i < data.length; i += stride) { buf.put((byte) cm.getRed(data[i])); // R buf.put((byte) cm.getGreen(data[i])); // G buf.put((byte) cm.getBlue(data[i])); // B buf.put((byte) cm.getAlpha(data[i])); // A
@Override public void render(BufferedImage img, Region region) { FieldFacet2D facet = region.getFacet(clazz); int width = img.getWidth(); int height = img.getHeight(); ColorModel colorModel = img.getColorModel(); ColorBlender blender = ColorBlenders.forColorModel(ColorModels.RGBA, colorModel); DataBufferInt dataBuffer = (DataBufferInt) img.getRaster().getDataBuffer(); for (int z = 0; z < height; z++) { for (int x = 0; x < width; x++) { Color col = getColor(facet, x, z); int src = col.rgba(); int dst = dataBuffer.getElem(z * width + x); int mix = blender.add(src, dst); dataBuffer.setElem(z * width + x, mix); } } }
private static IndexedSprite createIndexedSprite(final Client client, final BufferedImage bufferedImage) { final IndexColorModel indexedCM = (IndexColorModel) bufferedImage.getColorModel(); final int width = bufferedImage.getWidth(); final int height = bufferedImage.getHeight(); final byte[] pixels = ((DataBufferByte) bufferedImage.getRaster().getDataBuffer()).getData(); final int[] palette = new int[indexedCM.getMapSize()]; indexedCM.getRGBs(palette); final IndexedSprite newIndexedSprite = client.createIndexedSprite(); newIndexedSprite.setPixels(pixels); newIndexedSprite.setPalette(palette); newIndexedSprite.setWidth(width); newIndexedSprite.setHeight(height); newIndexedSprite.setOriginalWidth(width); newIndexedSprite.setOriginalHeight(height); newIndexedSprite.setOffsetX(0); newIndexedSprite.setOffsetY(0); return newIndexedSprite; }
@Override public void render(BufferedImage img, Region region) { FloraFacet treeFacet = region.getFacet(FloraFacet.class); Graphics2D g = img.createGraphics(); int width = img.getWidth(); ColorModel colorModel = img.getColorModel(); ColorBlender blender = ColorBlenders.forColorModel(ColorModels.RGBA, colorModel); DataBufferInt dataBuffer = (DataBufferInt) img.getRaster().getDataBuffer(); for (Entry<BaseVector3i, FloraType> entry : treeFacet.getRelativeEntries().entrySet()) { FloraType treeGen = entry.getValue(); int wx = entry.getKey().getX(); int wz = entry.getKey().getZ(); Color color = colorFunc.apply(treeGen); int src = color.rgba(); int dst = dataBuffer.getElem(wz * width + wx); int mix = blender.blend(src, dst); dataBuffer.setElem(wz * width + wx, mix); } g.dispose(); }
Rectangle srcRegion = new Rectangle(); Rectangle destRegion = new Rectangle(); computeRegions(param, width, height, destination, srcRegion, destRegion); WritableRaster destRaster = clipToRect(destination.getRaster(), destRegion, param != null ? param.getDestinationBands() : null); checkReadParamBandSettings(param, rawType.getNumBands(), destRaster.getNumBands()); WritableRaster rowRaster = rawType.createBufferedImage(width, 1).getRaster(); WritableRaster destChannel = destRaster.createWritableChild(destRaster.getMinX(), destRaster.getMinY(), destRaster.getWidth(), destRaster.getHeight(), 0, 0, new int[] {c}); Raster srcChannel = clippedRow.createChild(clippedRow.getMinX(), 0, clippedRow.getWidth(), 1, 0, 0, new int[] {c}); switch (header.getBytesPerPixel()) { case 1: byte[] rowDataByte = ((DataBufferByte) rowRaster.getDataBuffer()).getData(c); readRowByte(height, srcRegion, scanlineOffsets, scanlineLengths, compression, xSub, ySub, c, rowDataByte, destChannel, srcChannel, y); break; case 2: short[] rowDataUShort = ((DataBufferUShort) rowRaster.getDataBuffer()).getData(c); readRowUShort(height, srcRegion, scanlineOffsets, scanlineLengths, compression, xSub, ySub, c, rowDataUShort, destChannel, srcChannel, y); break;
public static void copyBand(Raster src, int srcBand, WritableRaster dst, int dstBand) { Rectangle srcR = new Rectangle(src.getMinX(), src.getMinY(), src.getWidth(), src.getHeight()); Rectangle dstR = new Rectangle(dst.getMinX(), dst.getMinY(), dst.getWidth(), dst.getHeight()); Rectangle cpR = srcR.intersection(dstR); int [] samples = null; for (int y = cpR.y; y < cpR.y + cpR.height; y++) { samples = src.getSamples(cpR.x, y, cpR.width, 1, srcBand, samples); dst.setSamples(cpR.x, y, cpR.width, 1, dstBand, samples); } } }
Rectangle srcRegion = new Rectangle(width, height); WritableRaster destRaster = destination.getRaster(); WritableRaster rowRaster = rawType.createBufferedImage(width, 1).getRaster(); case 24: case 32: byte[] rowDataByte = ((DataBufferByte) rowRaster.getDataBuffer()).getData(); readRowByte(imageInput, height, srcRegion, header.getOrigin(), 1, 1, rowDataByte, destRaster, rowRaster, y); break; case 16: short[] rowDataUShort = ((DataBufferUShort) rowRaster.getDataBuffer()).getData(); readRowUShort(imageInput, height, srcRegion, header.getOrigin(), 1, 1, rowDataUShort, destRaster, rowRaster, y); break;
/** * Based on answer: https://stackoverflow.com/a/12062505/7030976 * * @param bgr - byte array in bgr format * @return new image */ private BufferedImage buildImage(byte[] bgr) { BufferedImage image = new BufferedImage(resolution.width, resolution.height, BufferedImage.TYPE_3BYTE_BGR); byte[] imageData = ((DataBufferByte) image.getRaster().getDataBuffer()).getData(); System.arraycopy(bgr, 0, imageData, 0, bgr.length); return image; }
final int type = raster.getSampleModel().getDataType(); final int xmin = destRegion.x; final int ymin = destRegion.y; raster.setSample(x, y, dstBand, it.getDoubleNext()); break; raster.setSample(x, y, dstBand, it.getFloatNext()); break; raster.setSample(x, y, dstBand, b); break; raster.setSample(x, y, dstBand, it.getIntNext()); break; double[] samples = new double[destRegion.width * destRegion.height]; doubleBuffer.get(samples); raster.setSamples( xmin, ymin, FloatBuffer floatBuffer = array.getDataAsByteBuffer().asFloatBuffer(); floatBuffer.get(samples); raster.setSamples( xmin, ymin, destRegion.width, destRegion.height, dstBand, samples); break; case DataBuffer.TYPE_BYTE:
@Override public void rgbFrame(boolean preroll, int width, int height, IntBuffer rgb) { LOG.trace("New RGB frame"); if (t1 == -1 || t2 == -1) { t1 = System.currentTimeMillis(); t2 = System.currentTimeMillis(); } BufferedImage tmp = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); tmp.setAccelerationPriority(0); rgb.get(((DataBufferInt) tmp.getRaster().getDataBuffer()).getData(), 0, width * height); tmp.flush(); image = tmp; if (starting.compareAndSet(true, false)) { synchronized (this) { this.notifyAll(); } LOG.debug("GStreamer device ready"); } t1 = t2; t2 = System.currentTimeMillis(); fps = (4 * fps + 1000 / (t2 - t1 + 1)) / 5; }
int height = getHeight(imageIndex); Rectangle srcRegion = new Rectangle(); Rectangle destRegion = new Rectangle(); computeRegions(param, width, height, null, srcRegion, destRegion); BufferedImage destination = new BufferedImage(srcRegion.width, srcRegion.height, BufferedImage.TYPE_4BYTE_ABGR); WritableRaster raster = destination.getRaster(); raster.setDataElements(dstX, dstY, pixelRGBE); return destination.getRaster();
int height = unicodeFont.getGlyphPageHeight(); IntBuffer buffer = BufferUtils.createIntBuffer(width * height); BufferedImage pageImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); int[] row = new int[width]; buffer.clear(); GL11.glGetTexImage(GL11.GL_TEXTURE_2D, 0, GL12.GL_BGRA, GL11.GL_UNSIGNED_BYTE, buffer); WritableRaster raster = pageImage.getRaster(); for (int y = 0; y < height; y++) { buffer.get(row); raster.setDataElements(0, y, width, 1, row);