Here are the examples of the java api class java.awt.image.DataBuffer taken from open source projects.
1. GraphicsUtils#getBytePixels()
Project: LGame
File: GraphicsUtils.java
File: GraphicsUtils.java
/** * ??????BufferedImage???????? * * @param img * @return */ public static byte[] getBytePixels(final BufferedImage img) { if (img == null) { return null; } DataBuffer buffer = img.getRaster().getDataBuffer(); switch(buffer.getDataType()) { case DataBuffer.TYPE_BYTE: DataBufferByte byteBuf = (DataBufferByte) buffer; return byteBuf.getData(); default: BufferedImage tmp = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); Graphics2D g = tmp.createGraphics(); g.drawImage(img, 0, 0, null); g.dispose(); buffer = img.getRaster().getDataBuffer(); if (buffer.getDataType() == DataBuffer.TYPE_BYTE) { return ((DataBufferByte) buffer).getData(); } return null; } }
2. JavaSEGraphicsUtils#getBytePixels()
Project: LGame
File: JavaSEGraphicsUtils.java
File: JavaSEGraphicsUtils.java
/** * ??????BufferedImage???????? * * @param img * @return */ public static byte[] getBytePixels(final BufferedImage img) { if (img == null) { return null; } DataBuffer buffer = img.getRaster().getDataBuffer(); switch(buffer.getDataType()) { case DataBuffer.TYPE_BYTE: DataBufferByte byteBuf = (DataBufferByte) buffer; return byteBuf.getData(); default: BufferedImage tmp = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); Graphics2D g = tmp.createGraphics(); g.drawImage(img, 0, 0, null); g.dispose(); buffer = img.getRaster().getDataBuffer(); if (buffer.getDataType() == DataBuffer.TYPE_BYTE) { return ((DataBufferByte) buffer).getData(); } return null; } }
3. GraphicsUtils#loadDoubleFilterImage()
Project: LGame
File: GraphicsUtils.java
File: GraphicsUtils.java
/** * ?????????? * * @param img * @param width * @param height * @return */ public static final BufferedImage loadDoubleFilterImage(final Image img, final int width, final int height) { BufferedImage img1 = GraphicsUtils.drawClipImage(img, width, height, 0, 0); BufferedImage img2 = GraphicsUtils.drawClipImage(img, width, height, width, 0); WritableRaster writableRaster1 = img1.getRaster(); DataBuffer dataBuffer1 = writableRaster1.getDataBuffer(); int[] basePixels1 = AWTDataBufferHelper.getDataInt(dataBuffer1); WritableRaster writableRaster2 = img2.getRaster(); DataBuffer dataBuffer2 = writableRaster2.getDataBuffer(); int[] basePixels2 = AWTDataBufferHelper.getDataInt(dataBuffer2); int length = basePixels2.length; for (int i = 0; i < length; i++) { if (basePixels2[i] >= LColor.getRGB(200, 200, 200)) { basePixels2[i] = 0xffffff; } else { basePixels2[i] = basePixels1[i]; } } img1.flush(); img1 = null; return img2; }
4. ImageEncodingHelper#encodeAlpha()
Project: xml-graphics-commons
File: ImageEncodingHelper.java
File: ImageEncodingHelper.java
/** * Encodes the image's alpha channel. If it doesn't have an alpha channel, an * {@link IllegalStateException} is thrown. * @param out the OutputStream * @throws IOException if an I/O error occurs */ public void encodeAlpha(OutputStream out) throws IOException { if (!hasAlpha()) { throw new IllegalStateException("Image doesn't have an alpha channel"); } Raster alpha = GraphicsUtil.getAlphaRaster(image); DataBuffer buffer = alpha.getDataBuffer(); if (buffer instanceof DataBufferByte) { out.write(((DataBufferByte) buffer).getData()); } else { throw new UnsupportedOperationException("Alpha raster not supported: " + buffer.getClass().getName()); } }
5. MipmapHelper#getImageAsARGBIntBuffer()
Project: Spoutcraft
File: MipmapHelper.java
File: MipmapHelper.java
private static IntBuffer getImageAsARGBIntBuffer(BufferedImage image) { DataBuffer buffer = image.getRaster().getDataBuffer(); if (buffer instanceof DataBufferInt) { return IntBuffer.wrap(((DataBufferInt) buffer).getData()); } else if (buffer instanceof DataBufferByte) { return ByteBuffer.wrap(((DataBufferByte) buffer).getData()).order(ByteOrder.BIG_ENDIAN).asIntBuffer(); } else { int width = image.getWidth(); int height = image.getHeight(); int[] pixels = new int[width * height]; image.getRGB(0, 0, width, height, pixels, 0, width); return IntBuffer.wrap(pixels); } }
6. DataParser#parseData()
Project: sanselan
File: DataParser.java
File: DataParser.java
public final void parseData(int data[][][], BufferedImage bi, ImageContents imageContents) { DataBuffer buffer = bi.getRaster().getDataBuffer(); PsdHeaderInfo header = imageContents.header; int width = header.Columns; int height = header.Rows; for (int y = 0; y < height; y++) for (int x = 0; x < width; x++) { int rgb = getRGB(data, x, y, imageContents); buffer.setElem(y * width + x, rgb); } }
7. ImageFactory#createCCMImage()
Project: openjdk
File: ImageFactory.java
File: ImageFactory.java
public static BufferedImage createCCMImage(int cs, int dataType) { ColorSpace cSpace = ColorSpace.getInstance(cs); ComponentColorModel ccm = null; if (dataType == DataBuffer.TYPE_INT) { ccm = new ComponentColorModel(cSpace, ((cs == ColorSpace.CS_GRAY) ? new int[] { 8 } : new int[] { 8, 8, 8 }), false, false, Transparency.OPAQUE, dataType); } else { ccm = new ComponentColorModel(cSpace, false, false, Transparency.OPAQUE, dataType); } SampleModel sm = ccm.createCompatibleSampleModel(WIDTH, HEIGHT); WritableRaster raster = ccm.createCompatibleWritableRaster(WIDTH, HEIGHT); DataBuffer data = raster.getDataBuffer(); fillCCM(data, sm, cSpace); return new BufferedImage(ccm, raster, false, null); }
8. GetDataElementsTest#main()
Project: openjdk
File: GetDataElementsTest.java
File: GetDataElementsTest.java
public static void main(String[] args) { SampleModel sm = new ComponentSampleModel(dataType, width, height, 4, width * 4, new int[] { 0, 1, 2, 3 }); DataBuffer db = sm.createDataBuffer(); Object o = null; boolean testPassed = false; try { o = sm.getDataElements(Integer.MAX_VALUE, 0, 1, 1, o, db); } catch (ArrayIndexOutOfBoundsException e) { System.out.println(e.getMessage()); testPassed = true; } if (!testPassed) { throw new RuntimeException("Excpected excprion was not thrown."); } }
9. UnmanagedDrawImagePerformance#makeUnmanagedBI()
Project: openjdk
File: UnmanagedDrawImagePerformance.java
File: UnmanagedDrawImagePerformance.java
private static BufferedImage makeUnmanagedBI(final int type) { final BufferedImage img = new BufferedImage(SIZE, SIZE, type); final DataBuffer db = img.getRaster().getDataBuffer(); if (db instanceof DataBufferInt) { ((DataBufferInt) db).getData(); } else if (db instanceof DataBufferShort) { ((DataBufferShort) db).getData(); } else if (db instanceof DataBufferByte) { ((DataBufferByte) db).getData(); } else { try { img.setAccelerationPriority(0.0f); } catch (final Throwable ignored) { } } return img; }
10. IncorrectUnmanagedImageSourceOffset#makeUnmanagedBI()
Project: openjdk
File: IncorrectUnmanagedImageSourceOffset.java
File: IncorrectUnmanagedImageSourceOffset.java
private static BufferedImage makeUnmanagedBI(final int type) { final BufferedImage bi = new BufferedImage(511, 255, type); final DataBuffer db = bi.getRaster().getDataBuffer(); if (db instanceof DataBufferInt) { ((DataBufferInt) db).getData(); } else if (db instanceof DataBufferShort) { ((DataBufferShort) db).getData(); } else if (db instanceof DataBufferByte) { ((DataBufferByte) db).getData(); } else { try { bi.setAccelerationPriority(0.0f); } catch (final Throwable ignored) { } } return bi; }
11. IncorrectUnmanagedImageRotatedClip#makeUnmanagedBI()
Project: openjdk
File: IncorrectUnmanagedImageRotatedClip.java
File: IncorrectUnmanagedImageRotatedClip.java
private static BufferedImage makeUnmanagedBI() { final BufferedImage bi = new BufferedImage(500, 200, TYPE_INT_ARGB); final DataBuffer db = bi.getRaster().getDataBuffer(); if (db instanceof DataBufferInt) { ((DataBufferInt) db).getData(); } else if (db instanceof DataBufferShort) { ((DataBufferShort) db).getData(); } else if (db instanceof DataBufferByte) { ((DataBufferByte) db).getData(); } else { try { bi.setAccelerationPriority(0.0f); } catch (final Throwable ignored) { } } return bi; }
12. IncorrectClipXorModeSW2Surface#getBufferedImage()
Project: openjdk
File: IncorrectClipXorModeSW2Surface.java
File: IncorrectClipXorModeSW2Surface.java
private static BufferedImage getBufferedImage(int sw) { final BufferedImage bi = new BufferedImage(sw, sw, BufferedImage.TYPE_INT_ARGB); Graphics2D g2d = bi.createGraphics(); g2d.setColor(Color.RED); g2d.fillRect(0, 0, sw, sw); g2d.dispose(); final DataBuffer db = bi.getRaster().getDataBuffer(); if (db instanceof DataBufferInt) { ((DataBufferInt) db).getData(); } else if (db instanceof DataBufferShort) { ((DataBufferShort) db).getData(); } else if (db instanceof DataBufferByte) { ((DataBufferByte) db).getData(); } else { try { bi.setAccelerationPriority(0.0f); } catch (final Throwable ignored) { } } return bi; }
13. IncorrectAlphaConversionBicubic#makeUnmanagedBI()
Project: openjdk
File: IncorrectAlphaConversionBicubic.java
File: IncorrectAlphaConversionBicubic.java
private static BufferedImage makeUnmanagedBI(GraphicsConfiguration gc, int type) { BufferedImage img = gc.createCompatibleImage(SIZE, SIZE, type); Graphics2D g2d = img.createGraphics(); g2d.setColor(RGB); g2d.fillRect(0, 0, SIZE, SIZE); g2d.dispose(); final DataBuffer db = img.getRaster().getDataBuffer(); if (db instanceof DataBufferInt) { ((DataBufferInt) db).getData(); } else if (db instanceof DataBufferShort) { ((DataBufferShort) db).getData(); } else if (db instanceof DataBufferByte) { ((DataBufferByte) db).getData(); } else { try { img.setAccelerationPriority(0.0f); } catch (final Throwable ignored) { } } return img; }
14. ShaderUtils#getImageDataFromImage()
Project: jmonkeyengine
File: ShaderUtils.java
File: 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; }
15. ImageFactory#createCCMImage()
Project: jdk7u-jdk
File: ImageFactory.java
File: ImageFactory.java
public static BufferedImage createCCMImage(int cs, int dataType) { ColorSpace cSpace = ColorSpace.getInstance(cs); ComponentColorModel ccm = null; if (dataType == DataBuffer.TYPE_INT) { ccm = new ComponentColorModel(cSpace, ((cs == ColorSpace.CS_GRAY) ? new int[] { 8 } : new int[] { 8, 8, 8 }), false, false, Transparency.OPAQUE, dataType); } else { ccm = new ComponentColorModel(cSpace, false, false, Transparency.OPAQUE, dataType); } SampleModel sm = ccm.createCompatibleSampleModel(WIDTH, HEIGHT); WritableRaster raster = ccm.createCompatibleWritableRaster(WIDTH, HEIGHT); DataBuffer data = raster.getDataBuffer(); fillCCM(data, sm, cSpace); return new BufferedImage(ccm, raster, false, null); }
16. GetDataElementsTest#main()
Project: jdk7u-jdk
File: GetDataElementsTest.java
File: GetDataElementsTest.java
public static void main(String[] args) { SampleModel sm = new ComponentSampleModel(dataType, width, height, 4, width * 4, new int[] { 0, 1, 2, 3 }); DataBuffer db = sm.createDataBuffer(); Object o = null; boolean testPassed = false; try { o = sm.getDataElements(Integer.MAX_VALUE, 0, 1, 1, o, db); } catch (ArrayIndexOutOfBoundsException e) { System.out.println(e.getMessage()); testPassed = true; } if (!testPassed) { throw new RuntimeException("Excpected excprion was not thrown."); } }
17. DataParser#parseData()
Project: commons-imaging
File: DataParser.java
File: DataParser.java
public final void parseData(final int[][][] data, final BufferedImage bi, final ImageContents imageContents) { final DataBuffer buffer = bi.getRaster().getDataBuffer(); final PsdHeaderInfo header = imageContents.header; final int width = header.columns; final int height = header.rows; for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { final int rgb = getRGB(data, x, y, imageContents); buffer.setElem(y * width + x, rgb); } } }
18. JAIIIOServiceTest#testWriteFloatingPointLossy()
Project: bioformats
File: JAIIIOServiceTest.java
File: JAIIIOServiceTest.java
@Test(expectedExceptions = { IllegalArgumentException.class }) public void testWriteFloatingPointLossy() throws Exception { // The JAI ImageIO JPEG-2000 codec does not support floating point data. JPEG2000CodecOptions options = JPEG2000CodecOptions.getDefaultOptions(); options.lossless = false; options.codeBlockSize = CODE_BLOCK; options.quality = 1.0f; SampleModel sm = new ComponentSampleModel(DataBuffer.TYPE_FLOAT, SIZE_X, SIZE_Y, 1, SIZE_X, new int[] { 0 }); DataBuffer db = new DataBufferFloat(SIZE_X * SIZE_Y); WritableRaster wr = Raster.createWritableRaster(sm, db, null); ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY); ColorModel cm = new ComponentColorModel(cs, false, true, Transparency.OPAQUE, DataBuffer.TYPE_FLOAT); BufferedImage image = new BufferedImage(cm, wr, true, null); ByteArrayOutputStream stream = new ByteArrayOutputStream(); service.writeImage(stream, image, options); }
19. AWTImageTools#makeRGBImage()
Project: bioformats
File: AWTImageTools.java
File: AWTImageTools.java
public static BufferedImage makeRGBImage(byte[][] data, int w, int h) { int[] buf = new int[data[0].length]; int nBits = (data.length - 1) * 8; for (int i = 0; i < buf.length; i++) { for (int q = 0; q < data.length; q++) { buf[i] |= ((data[q][i] & 0xff) << (nBits - q * 8)); } } DataBuffer buffer = new DataBufferInt(buf, buf.length); return constructImage(data.length, DataBuffer.TYPE_INT, w, h, false, false, buffer); }
20. AWTImageTools#makeRGBImage()
Project: bioformats
File: AWTImageTools.java
File: AWTImageTools.java
public static BufferedImage makeRGBImage(byte[] data, int c, int w, int h, boolean interleaved) { // throw away channels beyond 4 int cc = Math.min(c, 4); int[] buf = new int[data.length / c]; int nBits = (cc - 1) * 8; for (int i = 0; i < buf.length; i++) { for (int q = 0; q < cc; q++) { if (interleaved) { buf[i] |= ((data[i * c + q] & 0xff) << (nBits - q * 8)); } else { buf[i] |= ((data[q * buf.length + i] & 0xff) << (nBits - q * 8)); } } } DataBuffer buffer = new DataBufferInt(buf, buf.length); return constructImage(cc, DataBuffer.TYPE_INT, w, h, false, false, buffer); }
21. AWTImageTools#makeImage()
Project: bioformats
File: AWTImageTools.java
File: AWTImageTools.java
/** * Creates an image from the given int data. * * @param data Array containing image data. * It is assumed that each channel corresponds to one element of the array. * For example, for RGB data, data[0] is R, data[1] is G, and data[2] is B. * @param w Width of image plane. * @param h Height of image plane. * @param signed Whether the int values should be treated as signed * (-2^31 to 2^31-1) instead of unsigned (0 to 2^32-1). */ public static BufferedImage makeImage(int[][] data, int w, int h, boolean signed) { int dataType = DataBuffer.TYPE_INT; DataBuffer buffer; if (signed) { buffer = new DataBufferInt(data, data[0].length); } else { buffer = new UnsignedIntBuffer(data, data[0].length); } return constructImage(data.length, dataType, w, h, false, true, buffer); }
22. AWTImageTools#makeImage()
Project: bioformats
File: AWTImageTools.java
File: AWTImageTools.java
/** * Creates an image from the given short data. * * @param data Array containing image data. * It is assumed that each channel corresponds to one element of the array. * For example, for RGB data, data[0] is R, data[1] is G, and data[2] is B. * @param w Width of image plane. * @param h Height of image plane. * @param signed Whether the short values should be treated as signed * (-32768 to 32767) instead of unsigned (0 to 65535). */ public static BufferedImage makeImage(short[][] data, int w, int h, boolean signed) { int dataType; DataBuffer buffer; if (signed) { dataType = DataBuffer.TYPE_SHORT; buffer = new SignedShortBuffer(data, data[0].length); } else { dataType = DataBuffer.TYPE_USHORT; buffer = new DataBufferUShort(data, data[0].length); } return constructImage(data.length, dataType, w, h, false, true, buffer); }
23. AWTImageTools#makeImage()
Project: bioformats
File: AWTImageTools.java
File: AWTImageTools.java
// -- Image construction - from 2D (banded) data arrays -- /** * Creates an image from the given byte data. * * @param data Array containing image data. * It is assumed that each channel corresponds to one element of the array. * For example, for RGB data, data[0] is R, data[1] is G, and data[2] is B. * @param w Width of image plane. * @param h Height of image plane. * @param signed Whether the byte values should be treated as signed * (-128 to 127) instead of unsigned (0 to 255). */ public static BufferedImage makeImage(byte[][] data, int w, int h, boolean signed) { if (data.length > 2) return makeRGBImage(data, w, h); int dataType; DataBuffer buffer; dataType = DataBuffer.TYPE_BYTE; if (signed) { buffer = new SignedByteBuffer(data, data[0].length); } else { buffer = new DataBufferByte(data, data[0].length); } return constructImage(data.length, dataType, w, h, false, true, buffer); }
24. AWTImageTools#makeImage()
Project: bioformats
File: AWTImageTools.java
File: AWTImageTools.java
/** * Creates an image from the given int data. * * @param data Array containing image data. * @param w Width of image plane. * @param h Height of image plane. * @param c Number of channels. * @param interleaved If set, the channels are assumed to be interleaved; * otherwise they are assumed to be sequential. * For example, for RGB data, the pattern "RGBRGBRGB..." is interleaved, * while "RRR...GGG...BBB..." is sequential. * @param signed Whether the int values should be treated as signed * (-2^31 to 2^31-1) instead of unsigned (0 to 2^32-1). */ public static BufferedImage makeImage(int[] data, int w, int h, int c, boolean interleaved, boolean signed) { if (c == 1) return makeImage(data, w, h, signed); int dataType = DataBuffer.TYPE_INT; DataBuffer buffer; if (signed) { buffer = new DataBufferInt(data, c * w * h); } else { buffer = new UnsignedIntBuffer(data, c * w * h); } return constructImage(c, dataType, w, h, interleaved, false, buffer); }
25. AWTImageTools#makeImage()
Project: bioformats
File: AWTImageTools.java
File: AWTImageTools.java
/** * Creates an image from the given short data. * * @param data Array containing image data. * @param w Width of image plane. * @param h Height of image plane. * @param c Number of channels. * @param interleaved If set, the channels are assumed to be interleaved; * otherwise they are assumed to be sequential. * For example, for RGB data, the pattern "RGBRGBRGB..." is interleaved, * while "RRR...GGG...BBB..." is sequential. * @param signed Whether the short values should be treated as signed * (-32768 to 32767) instead of unsigned (0 to 65535). */ public static BufferedImage makeImage(short[] data, int w, int h, int c, boolean interleaved, boolean signed) { if (c == 1) return makeImage(data, w, h, signed); int dataType; DataBuffer buffer; if (signed) { dataType = DataBuffer.TYPE_SHORT; buffer = new SignedShortBuffer(data, c * w * h); } else { dataType = DataBuffer.TYPE_USHORT; buffer = new DataBufferUShort(data, c * w * h); } return constructImage(c, dataType, w, h, interleaved, false, buffer); }
26. AWTImageTools#makeImage()
Project: bioformats
File: AWTImageTools.java
File: AWTImageTools.java
// -- Image construction - from 1D (interleaved or banded) data arrays -- /** * Creates an image from the given byte data. * * @param data Array containing image data. * @param w Width of image plane. * @param h Height of image plane. * @param c Number of channels. * @param interleaved If set, the channels are assumed to be interleaved; * otherwise they are assumed to be sequential. * For example, for RGB data, the pattern "RGBRGBRGB..." is interleaved, * while "RRR...GGG...BBB..." is sequential. * @param signed Whether the byte values should be treated as signed * (-128 to 127) instead of unsigned (0 to 255). */ public static BufferedImage makeImage(byte[] data, int w, int h, int c, boolean interleaved, boolean signed) { if (c == 1) return makeImage(data, w, h, signed); if (c > 2) return makeRGBImage(data, c, w, h, interleaved); int dataType; DataBuffer buffer; dataType = DataBuffer.TYPE_BYTE; if (signed) { buffer = new SignedByteBuffer(data, c * w * h); } else { buffer = new DataBufferByte(data, c * w * h); } return constructImage(c, dataType, w, h, interleaved, false, buffer); }
27. GraphicsUtil#copyRaster()
Project: batik
File: GraphicsUtil.java
File: GraphicsUtil.java
/** * Creates a new raster that has a <b>copy</b> of the data in * <code>ras</code>. This is highly optimized for speed. There is * no provision for changing any aspect of the SampleModel. * However you can specify a new location for the returned raster. * * This method should be used when you need to change the contents * of a Raster that you do not "own" (ie the result of a * <code>getData</code> call). * * @param ras The Raster to copy. * * @param minX The x location for the upper left corner of the * returned WritableRaster. * * @param minY The y location for the upper left corner of the * returned WritableRaster. * * @return A writable copy of <code>ras</code> */ public static WritableRaster copyRaster(Raster ras, int minX, int minY) { WritableRaster ret = Raster.createWritableRaster(ras.getSampleModel(), new Point(0, 0)); ret = ret.createWritableChild(ras.getMinX() - ras.getSampleModelTranslateX(), ras.getMinY() - ras.getSampleModelTranslateY(), ras.getWidth(), ras.getHeight(), minX, minY, null); // Use System.arraycopy to copy the data between the two... DataBuffer srcDB = ras.getDataBuffer(); DataBuffer retDB = ret.getDataBuffer(); if (srcDB.getDataType() != retDB.getDataType()) { throw new IllegalArgumentException("New DataBuffer doesn't match original"); } int len = srcDB.getSize(); int banks = srcDB.getNumBanks(); int[] offsets = srcDB.getOffsets(); for (int b = 0; b < banks; b++) { switch(srcDB.getDataType()) { case DataBuffer.TYPE_BYTE: { DataBufferByte srcDBT = (DataBufferByte) srcDB; DataBufferByte retDBT = (DataBufferByte) retDB; System.arraycopy(srcDBT.getData(b), offsets[b], retDBT.getData(b), offsets[b], len); break; } case DataBuffer.TYPE_INT: { DataBufferInt srcDBT = (DataBufferInt) srcDB; DataBufferInt retDBT = (DataBufferInt) retDB; System.arraycopy(srcDBT.getData(b), offsets[b], retDBT.getData(b), offsets[b], len); break; } case DataBuffer.TYPE_SHORT: { DataBufferShort srcDBT = (DataBufferShort) srcDB; DataBufferShort retDBT = (DataBufferShort) retDB; System.arraycopy(srcDBT.getData(b), offsets[b], retDBT.getData(b), offsets[b], len); break; } case DataBuffer.TYPE_USHORT: { DataBufferUShort srcDBT = (DataBufferUShort) srcDB; DataBufferUShort retDBT = (DataBufferUShort) retDB; System.arraycopy(srcDBT.getData(b), offsets[b], retDBT.getData(b), offsets[b], len); break; } } } return ret; }
28. GraphicsUtil#copyRaster()
Project: xml-graphics-commons
File: GraphicsUtil.java
File: GraphicsUtil.java
/** * Creates a new raster that has a <b>copy</b> of the data in * <tt>ras</tt>. This is highly optimized for speed. There is * no provision for changing any aspect of the SampleModel. * However you can specify a new location for the returned raster. * * This method should be used when you need to change the contents * of a Raster that you do not "own" (ie the result of a * <tt>getData</tt> call). * * @param ras The Raster to copy. * * @param minX The x location for the upper left corner of the * returned WritableRaster. * * @param minY The y location for the upper left corner of the * returned WritableRaster. * * @return A writable copy of <tt>ras</tt> */ public static WritableRaster copyRaster(Raster ras, int minX, int minY) { WritableRaster ret = Raster.createWritableRaster(ras.getSampleModel(), new Point(0, 0)); ret = ret.createWritableChild(ras.getMinX() - ras.getSampleModelTranslateX(), ras.getMinY() - ras.getSampleModelTranslateY(), ras.getWidth(), ras.getHeight(), minX, minY, null); // Use System.arraycopy to copy the data between the two... DataBuffer srcDB = ras.getDataBuffer(); DataBuffer retDB = ret.getDataBuffer(); if (srcDB.getDataType() != retDB.getDataType()) { throw new IllegalArgumentException("New DataBuffer doesn't match original"); } int len = srcDB.getSize(); int banks = srcDB.getNumBanks(); int[] offsets = srcDB.getOffsets(); for (int b = 0; b < banks; b++) { switch(srcDB.getDataType()) { case DataBuffer.TYPE_BYTE: { DataBufferByte srcDBT = (DataBufferByte) srcDB; DataBufferByte retDBT = (DataBufferByte) retDB; System.arraycopy(srcDBT.getData(b), offsets[b], retDBT.getData(b), offsets[b], len); break; } case DataBuffer.TYPE_INT: { DataBufferInt srcDBT = (DataBufferInt) srcDB; DataBufferInt retDBT = (DataBufferInt) retDB; System.arraycopy(srcDBT.getData(b), offsets[b], retDBT.getData(b), offsets[b], len); break; } case DataBuffer.TYPE_SHORT: { DataBufferShort srcDBT = (DataBufferShort) srcDB; DataBufferShort retDBT = (DataBufferShort) retDB; System.arraycopy(srcDBT.getData(b), offsets[b], retDBT.getData(b), offsets[b], len); break; } case DataBuffer.TYPE_USHORT: { DataBufferUShort srcDBT = (DataBufferUShort) srcDB; DataBufferUShort retDBT = (DataBufferUShort) retDB; System.arraycopy(srcDBT.getData(b), offsets[b], retDBT.getData(b), offsets[b], len); break; } default: throw new UnsupportedOperationException("unsupported data type: " + srcDB.getDataType()); } } return ret; }
29. RasterCreationTest#main()
Project: openjdk
File: RasterCreationTest.java
File: RasterCreationTest.java
public static void main(String[] args) { final int width = 10; final int height = 5; final int imageSize = width * height; Point location = new Point(0, 0); int[] bandOffsets = { 0 }; int[] bitMask = { 0x00ff0000, 0x0000ff00, 0xff, 0x0 }; SampleModel[] inputSampleModels = { new PixelInterleavedSampleModel(DataBuffer.TYPE_BYTE, 1, 1, 1, 1, bandOffsets), new PixelInterleavedSampleModel(DataBuffer.TYPE_USHORT, 1, 1, 1, 1, bandOffsets), new PixelInterleavedSampleModel(DataBuffer.TYPE_INT, 1, 1, 1, 1, bandOffsets), new SinglePixelPackedSampleModel(DataBuffer.TYPE_BYTE, width, height, bitMask), new SinglePixelPackedSampleModel(DataBuffer.TYPE_USHORT, width, height, bitMask), new SinglePixelPackedSampleModel(DataBuffer.TYPE_INT, width, height, bitMask), new MultiPixelPackedSampleModel(DataBuffer.TYPE_BYTE, width, height, 4), new MultiPixelPackedSampleModel(DataBuffer.TYPE_USHORT, width, height, 2), new MultiPixelPackedSampleModel(DataBuffer.TYPE_INT, width, height, 2) }; // --------------------------------------------------------------------- // Test ability to create Raster & WritableRaster with DataBuffer // classes // --------------------------------------------------------------------- DataBuffer[] inputDataBuffer = { new DataBufferByte(imageSize), new DataBufferUShort(imageSize), new DataBufferInt(imageSize, 1), new DataBufferShort(imageSize), new DataBufferFloat(imageSize), new DataBufferDouble(imageSize) }; for (SampleModel sm : inputSampleModels) { for (DataBuffer db : inputDataBuffer) { // Test Raster creation Raster.createRaster(sm, db, location); // Test writableRaster creation Raster.createWritableRaster(sm, db, location); Raster.createWritableRaster(sm, location); } } // --------------------------------------------------------------------- // Test ability to create Raster & WritableRaster with custom DataBuffer // classes // --------------------------------------------------------------------- DataBuffer[] myDataBuffer = { new MyDataBufferByte(imageSize), new MyDataBufferUShort(imageSize), new MyDataBufferInt(imageSize), new MyDataBufferShort(imageSize), new MyDataBufferDouble(imageSize), new MyDataBufferFloat(imageSize) }; for (SampleModel sm : inputSampleModels) { for (DataBuffer db : myDataBuffer) { // Test Raster creation Raster.createRaster(sm, db, location); // Test writableRaster creation Raster.createWritableRaster(sm, db, location); Raster.createWritableRaster(sm, location); } } // --------------------------------------------------------------------- // Test ability to create InterleavedRaster // --------------------------------------------------------------------- int[] interleavedInputDataTypes = { DataBuffer.TYPE_BYTE, DataBuffer.TYPE_USHORT }; int numBands = 1; for (int i : interleavedInputDataTypes) { Raster.createInterleavedRaster(i, width, height, 1, location); Raster.createInterleavedRaster(i, width, height, width * numBands, numBands, bandOffsets, location); } for (int i = 0; i < interleavedInputDataTypes.length; i++) { DataBuffer d1 = inputDataBuffer[i]; DataBuffer d2 = myDataBuffer[i]; Raster.createInterleavedRaster(d1, width, height, width * numBands, numBands, bandOffsets, location); Raster.createInterleavedRaster(d2, width, height, width * numBands, numBands, bandOffsets, location); } // --------------------------------------------------------------------- // Test ability to create BandedRaster // --------------------------------------------------------------------- int[] bankIndices = new int[numBands]; bankIndices[0] = 0; int[] bandedInputDataTypes = { DataBuffer.TYPE_BYTE, DataBuffer.TYPE_USHORT, DataBuffer.TYPE_INT }; for (int i : bandedInputDataTypes) { Raster.createBandedRaster(i, width, height, 1, location); Raster.createBandedRaster(i, width, height, width, bankIndices, bandOffsets, location); } for (int i = 0; i < bandedInputDataTypes.length; i++) { DataBuffer d1 = inputDataBuffer[i]; DataBuffer d2 = myDataBuffer[i]; Raster.createBandedRaster(d1, width, height, width, bankIndices, bandOffsets, location); Raster.createBandedRaster(d2, width, height, width, bankIndices, bandOffsets, location); } // --------------------------------------------------------------------- // Test ability to create PackedRaster // --------------------------------------------------------------------- int[] bandMasks = new int[numBands]; bandMasks[0] = 0; int packedInputDataTypes[] = { DataBuffer.TYPE_BYTE, DataBuffer.TYPE_USHORT, DataBuffer.TYPE_INT }; for (int i : packedInputDataTypes) { Raster.createPackedRaster(i, width, height, bandMasks, location); for (int bits = 1; bits < 5; bits *= 2) { Raster.createPackedRaster(i, width, height, 1, bits, location); } } for (int i = 0; i < packedInputDataTypes.length; i++) { DataBuffer d1 = inputDataBuffer[i]; DataBuffer d2 = myDataBuffer[i]; for (int bits = 1; bits < 5; bits *= 2) { Raster.createPackedRaster(d1, width, height, bits, location); Raster.createPackedRaster(d2, width, height, bits, location); } Raster.createPackedRaster(d1, width, height, 1, bandMasks, location); Raster.createPackedRaster(d2, width, height, 1, bandMasks, location); } }
30. ImageEncodingHelperTestCase#testMockedEncodeRenderedImageWithDirectColorModelAsRGB()
Project: xml-graphics-commons
File: ImageEncodingHelperTestCase.java
File: ImageEncodingHelperTestCase.java
/** * Tests encodeRenderedImageWithDirectColorModeAsRGB(). Uses mocking to test the method * implementation. * @throws IOException if an I/O error occurs. */ @Test public void testMockedEncodeRenderedImageWithDirectColorModelAsRGB() throws IOException { BufferedImage image = mock(BufferedImage.class); final int[] templateMasks = new int[] { 0x00ff0000, /*R*/ 0x0000ff00, /*G*/ 0x000000ff, /*B*/ 0xff000000 }; DirectColorModel dcm = new DirectColorModel(255, templateMasks[0], templateMasks[1], templateMasks[2], templateMasks[3]); WritableRaster raster = mock(WritableRaster.class); DataBuffer buffer = mock(DataBuffer.class); when(image.getColorModel()).thenReturn(dcm); when(image.getRaster()).thenReturn(raster); when(raster.getDataBuffer()).thenReturn(buffer); when(buffer.getDataType()).thenReturn(DataBuffer.TYPE_INT); when(image.getWidth()).thenReturn(3); when(image.getHeight()).thenReturn(3); final int expectedValue = 1 + 2 << 8 + 3 << 16; Answer<Object> ans = new Answer<Object>() { public Object answer(InvocationOnMock invocation) throws Throwable { Object[] args = invocation.getArguments(); int[] data = (int[]) args[4]; Arrays.fill(data, expectedValue); return null; } }; when(raster.getDataElements(anyInt(), anyInt(), anyInt(), anyInt(), anyObject())).thenAnswer(ans); ByteArrayOutputStream optimized = new ByteArrayOutputStream(); ImageEncodingHelper.encodeRenderedImageWithDirectColorModelAsRGB(image, optimized); byte[] expectedByteArray = new byte[27]; Arrays.fill(expectedByteArray, (byte) expectedValue); assertTrue(Arrays.equals(expectedByteArray, optimized.toByteArray())); }
31. PNGRed#decodePass()
Project: xml-graphics-commons
File: PNGRed.java
File: PNGRed.java
/** * Reads in an image of a given size and returns it as a * WritableRaster. */ private void decodePass(WritableRaster imRas, int xOffset, int yOffset, int xStep, int yStep, int passWidth, int passHeight) { if ((passWidth == 0) || (passHeight == 0)) { return; } int bytesPerRow = (inputBands * passWidth * bitDepth + 7) / 8; int eltsPerRow = (bitDepth == 16) ? bytesPerRow / 2 : bytesPerRow; byte[] curr = new byte[bytesPerRow]; byte[] prior = new byte[bytesPerRow]; // Create a 1-row tall Raster to hold the data WritableRaster passRow = createRaster(passWidth, 1, inputBands, eltsPerRow, bitDepth); DataBuffer dataBuffer = passRow.getDataBuffer(); int type = dataBuffer.getDataType(); byte[] byteData = null; short[] shortData = null; if (type == DataBuffer.TYPE_BYTE) { byteData = ((DataBufferByte) dataBuffer).getData(); } else { shortData = ((DataBufferUShort) dataBuffer).getData(); } // Decode the (sub)image row-by-row int srcY; int dstY; for (srcY = 0, dstY = yOffset; srcY < passHeight; srcY++, dstY += yStep) { // Read the filter type byte and a row of data int filter = 0; try { filter = dataStream.read(); dataStream.readFully(curr, 0, bytesPerRow); } catch (Exception e) { e.printStackTrace(); } switch(filter) { case PNG_FILTER_NONE: break; case PNG_FILTER_SUB: decodeSubFilter(curr, bytesPerRow, bytesPerPixel); break; case PNG_FILTER_UP: decodeUpFilter(curr, prior, bytesPerRow); break; case PNG_FILTER_AVERAGE: decodeAverageFilter(curr, prior, bytesPerRow, bytesPerPixel); break; case PNG_FILTER_PAETH: decodePaethFilter(curr, prior, bytesPerRow, bytesPerPixel); break; default: // Error -- unknown filter type String msg = PropertyUtil.getString("PNGImageDecoder16"); throw new RuntimeException(msg); } // Copy data into passRow byte by byte if (bitDepth < 16) { System.arraycopy(curr, 0, byteData, 0, bytesPerRow); } else { int idx = 0; for (int j = 0; j < eltsPerRow; j++) { shortData[j] = (short) ((curr[idx] << 8) | (curr[idx + 1] & 0xff)); idx += 2; } } processPixels(postProcess, passRow, imRas, xOffset, xStep, dstY, passWidth); // Swap curr and prior byte[] tmp = prior; prior = curr; curr = tmp; } }
32. PNGRed#createRaster()
Project: xml-graphics-commons
File: PNGRed.java
File: PNGRed.java
private WritableRaster createRaster(int width, int height, int bands, int scanlineStride, int bitDepth) { DataBuffer dataBuffer; WritableRaster ras = null; Point origin = new Point(0, 0); if ((bitDepth < 8) && (bands == 1)) { dataBuffer = new DataBufferByte(height * scanlineStride); ras = Raster.createPackedRaster(dataBuffer, width, height, bitDepth, origin); } else if (bitDepth <= 8) { dataBuffer = new DataBufferByte(height * scanlineStride); ras = Raster.createInterleavedRaster(dataBuffer, width, height, scanlineStride, bands, bandOffsets[bands], origin); } else { dataBuffer = new DataBufferUShort(height * scanlineStride); ras = Raster.createInterleavedRaster(dataBuffer, width, height, scanlineStride, bands, bandOffsets[bands], origin); } return ras; }
33. PNGImageDecoder#decodePass()
Project: xml-graphics-commons
File: PNGImageDecoder.java
File: PNGImageDecoder.java
/** * Reads in an image of a given size and returns it as a * WritableRaster. */ private void decodePass(WritableRaster imRas, int xOffset, int yOffset, int xStep, int yStep, int passWidth, int passHeight) { if ((passWidth == 0) || (passHeight == 0)) { return; } int bytesPerRow = (inputBands * passWidth * bitDepth + 7) / 8; int eltsPerRow = (bitDepth == 16) ? bytesPerRow / 2 : bytesPerRow; byte[] curr = new byte[bytesPerRow]; byte[] prior = new byte[bytesPerRow]; // Create a 1-row tall Raster to hold the data WritableRaster passRow = createRaster(passWidth, 1, inputBands, eltsPerRow, bitDepth); DataBuffer dataBuffer = passRow.getDataBuffer(); int type = dataBuffer.getDataType(); byte[] byteData = null; short[] shortData = null; if (type == DataBuffer.TYPE_BYTE) { byteData = ((DataBufferByte) dataBuffer).getData(); } else { shortData = ((DataBufferUShort) dataBuffer).getData(); } // Decode the (sub)image row-by-row int srcY; int dstY; for (srcY = 0, dstY = yOffset; srcY < passHeight; srcY++, dstY += yStep) { // Read the filter type byte and a row of data int filter = 0; try { filter = dataStream.read(); dataStream.readFully(curr, 0, bytesPerRow); } catch (Exception e) { e.printStackTrace(); } switch(filter) { case PNG_FILTER_NONE: break; case PNG_FILTER_SUB: decodeSubFilter(curr, bytesPerRow, bytesPerPixel); break; case PNG_FILTER_UP: decodeUpFilter(curr, prior, bytesPerRow); break; case PNG_FILTER_AVERAGE: decodeAverageFilter(curr, prior, bytesPerRow, bytesPerPixel); break; case PNG_FILTER_PAETH: decodePaethFilter(curr, prior, bytesPerRow, bytesPerPixel); break; default: // Error -- uknown filter type String msg = PropertyUtil.getString("PNGImageDecoder16"); throw new RuntimeException(msg); } // Copy data into passRow byte by byte if (bitDepth < 16) { System.arraycopy(curr, 0, byteData, 0, bytesPerRow); } else { int idx = 0; for (int j = 0; j < eltsPerRow; j++) { shortData[j] = (short) ((curr[idx] << 8) | (curr[idx + 1] & 0xff)); idx += 2; } } processPixels(postProcess, passRow, imRas, xOffset, xStep, dstY, passWidth); // Swap curr and prior byte[] tmp = prior; prior = curr; curr = tmp; } }
34. PNGImageDecoder#createRaster()
Project: xml-graphics-commons
File: PNGImageDecoder.java
File: PNGImageDecoder.java
private WritableRaster createRaster(int width, int height, int bands, int scanlineStride, int bitDepth) { DataBuffer dataBuffer; WritableRaster ras = null; Point origin = new Point(0, 0); if ((bitDepth < 8) && (bands == 1)) { dataBuffer = new DataBufferByte(height * scanlineStride); ras = Raster.createPackedRaster(dataBuffer, width, height, bitDepth, origin); } else if (bitDepth <= 8) { dataBuffer = new DataBufferByte(height * scanlineStride); ras = Raster.createInterleavedRaster(dataBuffer, width, height, scanlineStride, bands, bandOffsets[bands], origin); } else { dataBuffer = new DataBufferUShort(height * scanlineStride); ras = Raster.createInterleavedRaster(dataBuffer, width, height, scanlineStride, bands, bandOffsets[bands], origin); } return ras; }
35. XpmImageParser#readXpmImage()
Project: sanselan
File: XpmImageParser.java
File: XpmImageParser.java
private BufferedImage readXpmImage(XpmHeader xpmHeader, BasicCParser cParser) throws ImageReadException, IOException { ColorModel colorModel; WritableRaster raster; int bpp; if (xpmHeader.palette.size() <= (1 << 8)) { int[] palette = new int[xpmHeader.palette.size()]; for (Iterator<Map.Entry<Object, PaletteEntry>> it = xpmHeader.palette.entrySet().iterator(); it.hasNext(); ) { Map.Entry<Object, PaletteEntry> entry = it.next(); PaletteEntry paletteEntry = entry.getValue(); palette[paletteEntry.index] = paletteEntry.getBestARGB(); } colorModel = new IndexColorModel(8, xpmHeader.palette.size(), palette, 0, true, -1, DataBuffer.TYPE_BYTE); raster = WritableRaster.createInterleavedRaster(DataBuffer.TYPE_BYTE, xpmHeader.width, xpmHeader.height, 1, null); bpp = 8; } else if (xpmHeader.palette.size() <= (1 << 16)) { int[] palette = new int[xpmHeader.palette.size()]; for (Iterator<Map.Entry<Object, PaletteEntry>> it = xpmHeader.palette.entrySet().iterator(); it.hasNext(); ) { Map.Entry<Object, PaletteEntry> entry = it.next(); PaletteEntry paletteEntry = entry.getValue(); palette[paletteEntry.index] = paletteEntry.getBestARGB(); } colorModel = new IndexColorModel(16, xpmHeader.palette.size(), palette, 0, true, -1, DataBuffer.TYPE_USHORT); raster = WritableRaster.createInterleavedRaster(DataBuffer.TYPE_USHORT, xpmHeader.width, xpmHeader.height, 1, null); bpp = 16; } else { colorModel = new DirectColorModel(32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000); raster = WritableRaster.createPackedRaster(DataBuffer.TYPE_INT, xpmHeader.width, xpmHeader.height, new int[] { 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000 }, null); bpp = 32; } BufferedImage image = new BufferedImage(colorModel, raster, colorModel.isAlphaPremultiplied(), new Properties()); DataBuffer dataBuffer = raster.getDataBuffer(); StringBuilder row = new StringBuilder(); boolean hasMore = true; for (int y = 0; y < xpmHeader.height; y++) { row.setLength(0); hasMore = parseNextString(cParser, row); if (y < (xpmHeader.height - 1) && !hasMore) throw new ImageReadException("Parsing XPM file failed, " + "insufficient image rows in file"); int rowOffset = y * xpmHeader.width; for (int x = 0; x < xpmHeader.width; x++) { String index = row.substring(x * xpmHeader.numCharsPerPixel, (x + 1) * xpmHeader.numCharsPerPixel); PaletteEntry paletteEntry = xpmHeader.palette.get(index); if (paletteEntry == null) { throw new ImageReadException("No palette entry was defined " + "for " + index); } if (bpp <= 16) dataBuffer.setElem(rowOffset + x, paletteEntry.index); else dataBuffer.setElem(rowOffset + x, paletteEntry.getBestARGB()); } } while (hasMore) { row.setLength(0); hasMore = parseNextString(cParser, row); } String token = cParser.nextToken(); if (!token.equals(";")) throw new ImageReadException("Last token wasn't ';'"); return image; }
36. LWJGLGraphics#upload()
Project: playn
File: LWJGLGraphics.java
File: LWJGLGraphics.java
@Override protected void upload(BufferedImage img, Texture tex) { // Convert the bitmap into a format for quick uploading (NOOPs if already optimized) BufferedImage bitmap = convertImage(img); DataBuffer dbuf = bitmap.getRaster().getDataBuffer(); ByteBuffer bbuf; int format, type; if (bitmap.getType() == BufferedImage.TYPE_INT_ARGB_PRE) { DataBufferInt ibuf = (DataBufferInt) dbuf; int iSize = ibuf.getSize() * 4; bbuf = checkGetImageBuffer(iSize); bbuf.asIntBuffer().put(ibuf.getData()); bbuf.position(bbuf.position() + iSize); bbuf.flip(); format = GL12.GL_BGRA; type = GL12.GL_UNSIGNED_INT_8_8_8_8_REV; } else if (bitmap.getType() == BufferedImage.TYPE_4BYTE_ABGR) { DataBufferByte dbbuf = (DataBufferByte) dbuf; bbuf = checkGetImageBuffer(dbbuf.getSize()); bbuf.put(dbbuf.getData()); bbuf.flip(); format = GL11.GL_RGBA; type = GL12.GL_UNSIGNED_INT_8_8_8_8; } else { // except we don't know how to deal with it throw new RuntimeException("Image type wasn't converted to usable: " + bitmap.getType()); } gl.glBindTexture(GL11.GL_TEXTURE_2D, tex.id); GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, bitmap.getWidth(), bitmap.getHeight(), 0, format, type, bbuf); gl.checkError("updateTexture"); }
37. LWJGLGraphics#upload()
Project: playn
File: LWJGLGraphics.java
File: LWJGLGraphics.java
@Override void upload(BufferedImage img, Texture tex) { // Convert the bitmap into a format for quick uploading (NOOPs if already optimized) BufferedImage bitmap = convertImage(img); DataBuffer dbuf = bitmap.getRaster().getDataBuffer(); ByteBuffer bbuf; int format, type; if (bitmap.getType() == BufferedImage.TYPE_INT_ARGB_PRE) { DataBufferInt ibuf = (DataBufferInt) dbuf; int iSize = ibuf.getSize() * 4; bbuf = checkGetImageBuffer(iSize); bbuf.asIntBuffer().put(ibuf.getData()); bbuf.position(bbuf.position() + iSize); bbuf.flip(); format = GL12.GL_BGRA; type = GL12.GL_UNSIGNED_INT_8_8_8_8_REV; } else if (bitmap.getType() == BufferedImage.TYPE_4BYTE_ABGR) { DataBufferByte dbbuf = (DataBufferByte) dbuf; bbuf = checkGetImageBuffer(dbbuf.getSize()); bbuf.put(dbbuf.getData()); bbuf.flip(); format = GL11.GL_RGBA; type = GL12.GL_UNSIGNED_INT_8_8_8_8; } else { // except we don't know how to deal with it throw new RuntimeException("Image type wasn't converted to usable: " + bitmap.getType()); } gl.glBindTexture(GL11.GL_TEXTURE_2D, tex.id); GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, bitmap.getWidth(), bitmap.getHeight(), 0, format, type, bbuf); gl.checkError("updateTexture"); }
38. IncorrectSampleMaskTest#doTest()
Project: openjdk
File: IncorrectSampleMaskTest.java
File: IncorrectSampleMaskTest.java
private static void doTest(int dataType) { int maxSize = DataBuffer.getDataTypeSize(dataType); System.out.println("Type size: " + maxSize); int theMask = (int) (1L << (maxSize + 2)) - 1; System.out.printf("theMask=%x\n", theMask); SinglePixelPackedSampleModel sm = new SinglePixelPackedSampleModel(dataType, w, h, new int[] { theMask }); int[] sampleSize = sm.getSampleSize(); for (int s : sampleSize) { if (s > maxSize) { throw new RuntimeException("Test failed: sample size is too big:" + s); } } System.out.println("Test medialib..."); DataBuffer buf = createDataBuffer(dataType); WritableRaster wr = Raster.createWritableRaster(sm, buf, null); op.filter(wr, null); System.out.println("Test PASSED."); }
39. GetSamplesTest#doTest()
Project: openjdk
File: GetSamplesTest.java
File: GetSamplesTest.java
private static void doTest(Class<? extends SampleModel> c) { System.out.println("Test for: " + c.getName()); SampleModel sm = createSampleModel(c); DataBuffer db = sm.createDataBuffer(); int[] iArray = new int[width * height + numBands]; float[] fArray = new float[width * height + numBands]; double[] dArray = new double[width * height + numBands]; boolean iOk = false; boolean fOk = false; boolean dOk = false; try { sm.getSamples(Integer.MAX_VALUE, 0, 1, 1, 0, iArray, db); sm.setSamples(Integer.MAX_VALUE, 0, 1, 1, 0, iArray, db); } catch (ArrayIndexOutOfBoundsException e) { System.out.println(e.getMessage()); iOk = true; } try { sm.getSamples(Integer.MAX_VALUE, 0, 1, 1, 0, fArray, db); sm.setSamples(Integer.MAX_VALUE, 0, 1, 1, 0, fArray, db); } catch (ArrayIndexOutOfBoundsException e) { System.out.println(e.getMessage()); fOk = true; } try { sm.getSamples(0, Integer.MAX_VALUE, 1, 1, 0, dArray, db); sm.setSamples(0, Integer.MAX_VALUE, 1, 1, 0, dArray, db); } catch (ArrayIndexOutOfBoundsException e) { System.out.println(e.getMessage()); dOk = true; } if (!iOk || !fOk || !dOk) { throw new RuntimeException("Test for " + c.getSimpleName() + " failed: iOk=" + iOk + "; fOk=" + fOk + "; dOk=" + dOk); } }
40. SunToolkit#getScaledIconData()
Project: openjdk
File: SunToolkit.java
File: SunToolkit.java
public static DataBufferInt getScaledIconData(java.util.List<Image> imageList, int width, int height) { BufferedImage bimage = getScaledIconImage(imageList, width, height); if (bimage == null) { return null; } Raster raster = bimage.getRaster(); DataBuffer buffer = raster.getDataBuffer(); return (DataBufferInt) buffer; }
41. WritableRasterNative#createNativeRaster()
Project: openjdk
File: WritableRasterNative.java
File: WritableRasterNative.java
public static WritableRasterNative createNativeRaster(ColorModel cm, SurfaceData sd, int width, int height) { SampleModel smHw = null; int dataType = 0; int scanStride = width; switch(cm.getPixelSize()) { case 8: case 12: // 8-bits uses PixelInterleavedSampleModel if (cm.getPixelSize() == 8) { dataType = DataBuffer.TYPE_BYTE; } else { dataType = DataBuffer.TYPE_USHORT; } int[] bandOffsets = new int[1]; bandOffsets[0] = 0; smHw = new PixelInterleavedSampleModel(dataType, width, height, 1, scanStride, bandOffsets); break; // all others use SinglePixelPackedSampleModel case 15: case 16: dataType = DataBuffer.TYPE_USHORT; int[] bitMasks = new int[3]; DirectColorModel dcm = (DirectColorModel) cm; bitMasks[0] = dcm.getRedMask(); bitMasks[1] = dcm.getGreenMask(); bitMasks[2] = dcm.getBlueMask(); smHw = new SinglePixelPackedSampleModel(dataType, width, height, scanStride, bitMasks); break; case 24: case 32: dataType = DataBuffer.TYPE_INT; bitMasks = new int[3]; dcm = (DirectColorModel) cm; bitMasks[0] = dcm.getRedMask(); bitMasks[1] = dcm.getGreenMask(); bitMasks[2] = dcm.getBlueMask(); smHw = new SinglePixelPackedSampleModel(dataType, width, height, scanStride, bitMasks); break; default: throw new InternalError("Unsupported depth " + cm.getPixelSize()); } DataBuffer dbn = new DataBufferNative(sd, dataType, width, height); return new WritableRasterNative(smHw, dbn); }
42. RenderableImageProducer#run()
Project: openjdk
File: RenderableImageProducer.java
File: RenderableImageProducer.java
/** * The runnable method for this class. This will produce an image using * the current RenderableImage and RenderContext and send it to all the * ImageConsumer currently registered with this class. */ public void run() { // First get the rendered image RenderedImage rdrdImage; if (rc != null) { rdrdImage = rdblImage.createRendering(rc); } else { rdrdImage = rdblImage.createDefaultRendering(); } // And its ColorModel ColorModel colorModel = rdrdImage.getColorModel(); Raster raster = rdrdImage.getData(); SampleModel sampleModel = raster.getSampleModel(); DataBuffer dataBuffer = raster.getDataBuffer(); if (colorModel == null) { colorModel = ColorModel.getRGBdefault(); } int minX = raster.getMinX(); int minY = raster.getMinY(); int width = raster.getWidth(); int height = raster.getHeight(); Enumeration<ImageConsumer> icList; ImageConsumer ic; // Set up the ImageConsumers icList = ics.elements(); while (icList.hasMoreElements()) { ic = icList.nextElement(); ic.setDimensions(width, height); ic.setHints(ImageConsumer.TOPDOWNLEFTRIGHT | ImageConsumer.COMPLETESCANLINES | ImageConsumer.SINGLEPASS | ImageConsumer.SINGLEFRAME); } // Get RGB pixels from the raster scanline by scanline and // send to consumers. int pix[] = new int[width]; int i, j; int numBands = sampleModel.getNumBands(); int tmpPixel[] = new int[numBands]; for (j = 0; j < height; j++) { for (i = 0; i < width; i++) { sampleModel.getPixel(i, j, tmpPixel, dataBuffer); pix[i] = colorModel.getDataElement(tmpPixel, 0); } // Now send the scanline to the Consumers icList = ics.elements(); while (icList.hasMoreElements()) { ic = icList.nextElement(); ic.setPixels(0, j, width, 1, colorModel, pix, 0, width); } } // Now tell the consumers we're done. icList = ics.elements(); while (icList.hasMoreElements()) { ic = icList.nextElement(); ic.imageComplete(ImageConsumer.STATICIMAGEDONE); } }
43. PNGImageReader#createRaster()
Project: openjdk
File: PNGImageReader.java
File: PNGImageReader.java
private WritableRaster createRaster(int width, int height, int bands, int scanlineStride, int bitDepth) { DataBuffer dataBuffer; WritableRaster ras = null; Point origin = new Point(0, 0); if ((bitDepth < 8) && (bands == 1)) { dataBuffer = new DataBufferByte(height * scanlineStride); ras = Raster.createPackedRaster(dataBuffer, width, height, bitDepth, origin); } else if (bitDepth <= 8) { dataBuffer = new DataBufferByte(height * scanlineStride); ras = Raster.createInterleavedRaster(dataBuffer, width, height, scanlineStride, bands, bandOffsets[bands], origin); } else { dataBuffer = new DataBufferUShort(height * scanlineStride); ras = Raster.createInterleavedRaster(dataBuffer, width, height, scanlineStride, bands, bandOffsets[bands], origin); } return ras; }
44. ImageUtil#setUnpackedBinaryData()
Project: openjdk
File: ImageUtil.java
File: ImageUtil.java
/** * Copies data into the packed array of the {@code Raster} * from an array of unpacked data of the form returned by * {@code getUnpackedBinaryData()}. * * <p> If the data are binary, then the target bit will be set if * and only if the corresponding byte is non-zero. * * @throws IllegalArgumentException if {@code isBinary()} returns * {@code false} with the {@code SampleModel} of the * supplied {@code Raster} as argument. */ public static void setUnpackedBinaryData(byte[] bdata, WritableRaster raster, Rectangle rect) { SampleModel sm = raster.getSampleModel(); if (!isBinary(sm)) { throw new IllegalArgumentException(I18N.getString("ImageUtil0")); } int rectX = rect.x; int rectY = rect.y; int rectWidth = rect.width; int rectHeight = rect.height; DataBuffer dataBuffer = raster.getDataBuffer(); int dx = rectX - raster.getSampleModelTranslateX(); int dy = rectY - raster.getSampleModelTranslateY(); MultiPixelPackedSampleModel mpp = (MultiPixelPackedSampleModel) sm; int lineStride = mpp.getScanlineStride(); int eltOffset = dataBuffer.getOffset() + mpp.getOffset(dx, dy); int bitOffset = mpp.getBitOffset(dx); int k = 0; if (dataBuffer instanceof DataBufferByte) { byte[] data = ((DataBufferByte) dataBuffer).getData(); for (int y = 0; y < rectHeight; y++) { int bOffset = eltOffset * 8 + bitOffset; for (int x = 0; x < rectWidth; x++) { if (bdata[k++] != (byte) 0) { data[bOffset / 8] |= (byte) (0x00000001 << (7 - bOffset & 7)); } bOffset++; } eltOffset += lineStride; } } else if (dataBuffer instanceof DataBufferShort || dataBuffer instanceof DataBufferUShort) { short[] data = dataBuffer instanceof DataBufferShort ? ((DataBufferShort) dataBuffer).getData() : ((DataBufferUShort) dataBuffer).getData(); for (int y = 0; y < rectHeight; y++) { int bOffset = eltOffset * 16 + bitOffset; for (int x = 0; x < rectWidth; x++) { if (bdata[k++] != (byte) 0) { data[bOffset / 16] |= (short) (0x00000001 << (15 - bOffset % 16)); } bOffset++; } eltOffset += lineStride; } } else if (dataBuffer instanceof DataBufferInt) { int[] data = ((DataBufferInt) dataBuffer).getData(); for (int y = 0; y < rectHeight; y++) { int bOffset = eltOffset * 32 + bitOffset; for (int x = 0; x < rectWidth; x++) { if (bdata[k++] != (byte) 0) { data[bOffset / 32] |= (0x00000001 << (31 - bOffset % 32)); } bOffset++; } eltOffset += lineStride; } } }
45. ImageUtil#getUnpackedBinaryData()
Project: openjdk
File: ImageUtil.java
File: ImageUtil.java
/** * Returns the binary data unpacked into an array of bytes. * The line stride will be the width of the {@code Raster}. * * @throws IllegalArgumentException if {@code isBinary()} returns * {@code false} with the {@code SampleModel} of the * supplied {@code Raster} as argument. */ public static byte[] getUnpackedBinaryData(Raster raster, Rectangle rect) { SampleModel sm = raster.getSampleModel(); if (!isBinary(sm)) { throw new IllegalArgumentException(I18N.getString("ImageUtil0")); } int rectX = rect.x; int rectY = rect.y; int rectWidth = rect.width; int rectHeight = rect.height; DataBuffer dataBuffer = raster.getDataBuffer(); int dx = rectX - raster.getSampleModelTranslateX(); int dy = rectY - raster.getSampleModelTranslateY(); MultiPixelPackedSampleModel mpp = (MultiPixelPackedSampleModel) sm; int lineStride = mpp.getScanlineStride(); int eltOffset = dataBuffer.getOffset() + mpp.getOffset(dx, dy); int bitOffset = mpp.getBitOffset(dx); byte[] bdata = new byte[rectWidth * rectHeight]; int maxY = rectY + rectHeight; int maxX = rectX + rectWidth; int k = 0; if (dataBuffer instanceof DataBufferByte) { byte[] data = ((DataBufferByte) dataBuffer).getData(); for (int y = rectY; y < maxY; y++) { int bOffset = eltOffset * 8 + bitOffset; for (int x = rectX; x < maxX; x++) { byte b = data[bOffset / 8]; bdata[k++] = (byte) ((b >>> (7 - bOffset & 7)) & 0x0000001); bOffset++; } eltOffset += lineStride; } } else if (dataBuffer instanceof DataBufferShort || dataBuffer instanceof DataBufferUShort) { short[] data = dataBuffer instanceof DataBufferShort ? ((DataBufferShort) dataBuffer).getData() : ((DataBufferUShort) dataBuffer).getData(); for (int y = rectY; y < maxY; y++) { int bOffset = eltOffset * 16 + bitOffset; for (int x = rectX; x < maxX; x++) { short s = data[bOffset / 16]; bdata[k++] = (byte) ((s >>> (15 - bOffset % 16)) & 0x0000001); bOffset++; } eltOffset += lineStride; } } else if (dataBuffer instanceof DataBufferInt) { int[] data = ((DataBufferInt) dataBuffer).getData(); for (int y = rectY; y < maxY; y++) { int bOffset = eltOffset * 32 + bitOffset; for (int x = rectX; x < maxX; x++) { int i = data[bOffset / 32]; bdata[k++] = (byte) ((i >>> (31 - bOffset % 32)) & 0x0000001); bOffset++; } eltOffset += lineStride; } } return bdata; }
46. GraphicsUtils#newAwtARGBImage()
Project: LGame
File: GraphicsUtils.java
File: GraphicsUtils.java
/** * ?????????ARGB??BufferedImage * * @param pixels * @param w * @param h * @param pixelSize * @return */ public static BufferedImage newAwtARGBImage(int[] pixels, int w, int h, int pixelSize) { DataBuffer dataBuffer = new DataBufferInt(pixels, pixelSize); SampleModel sample = new SinglePixelPackedSampleModel(DataBuffer.TYPE_INT, w, h, new int[] { 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000 }); WritableRaster raster = Raster.createWritableRaster(sample, dataBuffer, new Point(0, 0)); return new BufferedImage(COLOR_MODEL_ARGB, raster, true, null); }
47. JavaSEGraphicsUtils#newAwtARGBImage()
Project: LGame
File: JavaSEGraphicsUtils.java
File: JavaSEGraphicsUtils.java
/** * ?????????ARGB??BufferedImage * * @param pixels * @param w * @param h * @param pixelSize * @return */ public static BufferedImage newAwtARGBImage(int[] pixels, int w, int h, int pixelSize) { DataBuffer dataBuffer = new DataBufferInt(pixels, pixelSize); SampleModel sample = new SinglePixelPackedSampleModel(DataBuffer.TYPE_INT, w, h, new int[] { 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000 }); WritableRaster raster = Raster.createWritableRaster(sample, dataBuffer, new Point(0, 0)); return new BufferedImage(COLOR_MODEL_ARGB, raster, true, null); }
48. JavaSELwjglGraphics#upload()
Project: LGame
File: JavaSELwjglGraphics.java
File: JavaSELwjglGraphics.java
@Override protected void upload(BufferedImage img, LTexture tex) { if (img == null) { return; } BufferedImage bitmap = convertImage(img); DataBuffer dbuf = bitmap.getRaster().getDataBuffer(); ByteBuffer bbuf; int format, type; if (bitmap.getType() == BufferedImage.TYPE_INT_ARGB_PRE) { DataBufferInt ibuf = (DataBufferInt) dbuf; int iSize = ibuf.getSize() * 4; bbuf = checkGetImageBuffer(iSize); bbuf.asIntBuffer().put(ibuf.getData()); bbuf.position(bbuf.position() + iSize); bbuf.flip(); format = GL12.GL_BGRA; type = GL12.GL_UNSIGNED_INT_8_8_8_8_REV; } else if (bitmap.getType() == BufferedImage.TYPE_4BYTE_ABGR) { DataBufferByte dbbuf = (DataBufferByte) dbuf; bbuf = checkGetImageBuffer(dbbuf.getSize()); bbuf.put(dbbuf.getData()); bbuf.flip(); format = GL11.GL_RGBA; type = GL12.GL_UNSIGNED_INT_8_8_8_8; } else { int srcWidth = img.getWidth(); int srcHeight = img.getHeight(); int texWidth = GLUtils.powerOfTwo(srcWidth); int texHeight = GLUtils.powerOfTwo(srcHeight); int width = srcWidth; int height = srcHeight; boolean hasAlpha = img.getColorModel().hasAlpha(); if (isPowerOfTwo(srcWidth) && isPowerOfTwo(srcHeight)) { width = srcWidth; height = srcHeight; texHeight = srcHeight; texWidth = srcWidth; ByteBuffer source = NativeSupport.getByteBuffer((byte[]) img.getRaster().getDataElements(0, 0, img.getWidth(), img.getHeight(), null)); int srcPixelFormat = hasAlpha ? GL20.GL_RGBA : GL20.GL_RGB; gl.glBindTexture(GL11.GL_TEXTURE_2D, tex.getID()); gl.glTexImage2D(GL20.GL_TEXTURE_2D, 0, srcPixelFormat, texWidth, texHeight, 0, srcPixelFormat, GL20.GL_UNSIGNED_BYTE, source); gl.checkError("updateTexture"); return; } BufferedImage texImage = new BufferedImage(texWidth, texHeight, hasAlpha ? BufferedImage.TYPE_4BYTE_ABGR : BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = texImage.createGraphics(); g.drawImage(img, 0, 0, null); if (height < texHeight - 1) { copyArea(texImage, g, 0, 0, width, 1, 0, texHeight - 1); copyArea(texImage, g, 0, height - 1, width, 1, 0, 1); } if (width < texWidth - 1) { copyArea(texImage, g, 0, 0, 1, height, texWidth - 1, 0); copyArea(texImage, g, width - 1, 0, 1, height, 1, 0); } ByteBuffer source = NativeSupport.getByteBuffer((byte[]) texImage.getRaster().getDataElements(0, 0, texImage.getWidth(), texImage.getHeight(), null)); if (texImage != null) { texImage.flush(); texImage = null; } int srcPixelFormat = hasAlpha ? GL20.GL_RGBA : GL20.GL_RGB; gl.glBindTexture(GL11.GL_TEXTURE_2D, tex.getID()); gl.glTexImage2D(GL20.GL_TEXTURE_2D, 0, srcPixelFormat, texWidth, texHeight, 0, srcPixelFormat, GL20.GL_UNSIGNED_BYTE, source); gl.checkError("updateTexture"); return; } gl.glBindTexture(GL11.GL_TEXTURE_2D, tex.getID()); GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, bitmap.getWidth(), bitmap.getHeight(), 0, format, type, bbuf); gl.checkError("updateTexture"); }
49. GraphicsUtils#transparencyColor()
Project: LGame
File: GraphicsUtils.java
File: GraphicsUtils.java
/** * ???????? * * @param img * @param color */ public static final void transparencyColor(BufferedImage img, int color) { WritableRaster writableRaster = img.getRaster(); DataBuffer dataBuffer = writableRaster.getDataBuffer(); int[] basePixels = AWTDataBufferHelper.getDataInt(dataBuffer); int length = basePixels.length; for (int i = 0; i < length; i++) { if (basePixels[i] == color) { basePixels[i] = 0xffffff; } } }
50. GraphicsUtils#newAwtARGBImage()
Project: LGame
File: GraphicsUtils.java
File: GraphicsUtils.java
/** * ?????????ARGB??BufferedImage * * @param pixels * @param w * @param h * @param pixelSize * @return */ public static BufferedImage newAwtARGBImage(int[] pixels, int w, int h, int pixelSize) { DataBuffer dataBuffer = new DataBufferInt(pixels, pixelSize); SampleModel sample = new SinglePixelPackedSampleModel(DataBuffer.TYPE_INT, w, h, new int[] { 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000 }); WritableRaster raster = Raster.createWritableRaster(sample, dataBuffer, new Point(0, 0)); return new BufferedImage(COLOR_MODEL_ARGB, raster, true, null); }
51. IncorrectSampleMaskTest#doTest()
Project: jdk7u-jdk
File: IncorrectSampleMaskTest.java
File: IncorrectSampleMaskTest.java
private static void doTest(int dataType) { int maxSize = DataBuffer.getDataTypeSize(dataType); System.out.println("Type size: " + maxSize); int theMask = (int) (1L << (maxSize + 2)) - 1; System.out.printf("theMask=%x\n", theMask); SinglePixelPackedSampleModel sm = new SinglePixelPackedSampleModel(dataType, w, h, new int[] { theMask }); int[] sampleSize = sm.getSampleSize(); for (int s : sampleSize) { if (s > maxSize) { throw new RuntimeException("Test failed: sample size is too big:" + s); } } System.out.println("Test medialib..."); DataBuffer buf = createDataBuffer(dataType); WritableRaster wr = Raster.createWritableRaster(sm, buf, null); op.filter(wr, null); System.out.println("Test PASSED."); }
52. GetSamplesTest#doTest()
Project: jdk7u-jdk
File: GetSamplesTest.java
File: GetSamplesTest.java
private static void doTest(Class<? extends SampleModel> c) { System.out.println("Test for: " + c.getName()); SampleModel sm = createSampleModel(c); DataBuffer db = sm.createDataBuffer(); int[] iArray = new int[width * height + numBands]; float[] fArray = new float[width * height + numBands]; double[] dArray = new double[width * height + numBands]; boolean iOk = false; boolean fOk = false; boolean dOk = false; try { sm.getSamples(Integer.MAX_VALUE, 0, 1, 1, 0, iArray, db); sm.setSamples(Integer.MAX_VALUE, 0, 1, 1, 0, iArray, db); } catch (ArrayIndexOutOfBoundsException e) { System.out.println(e.getMessage()); iOk = true; } try { sm.getSamples(Integer.MAX_VALUE, 0, 1, 1, 0, fArray, db); sm.setSamples(Integer.MAX_VALUE, 0, 1, 1, 0, fArray, db); } catch (ArrayIndexOutOfBoundsException e) { System.out.println(e.getMessage()); fOk = true; } try { sm.getSamples(0, Integer.MAX_VALUE, 1, 1, 0, dArray, db); sm.setSamples(0, Integer.MAX_VALUE, 1, 1, 0, dArray, db); } catch (ArrayIndexOutOfBoundsException e) { System.out.println(e.getMessage()); dOk = true; } if (!iOk || !fOk || !dOk) { throw new RuntimeException("Test for " + c.getSimpleName() + " failed: iOk=" + iOk + "; fOk=" + fOk + "; dOk=" + dOk); } }
53. WritableRasterNative#createNativeRaster()
Project: jdk7u-jdk
File: WritableRasterNative.java
File: WritableRasterNative.java
public static WritableRasterNative createNativeRaster(ColorModel cm, SurfaceData sd, int width, int height) { SampleModel smHw = null; int dataType = 0; int scanStride = width; switch(cm.getPixelSize()) { case 8: case 12: // 8-bits uses PixelInterleavedSampleModel if (cm.getPixelSize() == 8) { dataType = DataBuffer.TYPE_BYTE; } else { dataType = DataBuffer.TYPE_USHORT; } int[] bandOffsets = new int[1]; bandOffsets[0] = 0; smHw = new PixelInterleavedSampleModel(dataType, width, height, 1, scanStride, bandOffsets); break; // all others use SinglePixelPackedSampleModel case 15: case 16: dataType = DataBuffer.TYPE_USHORT; int[] bitMasks = new int[3]; DirectColorModel dcm = (DirectColorModel) cm; bitMasks[0] = dcm.getRedMask(); bitMasks[1] = dcm.getGreenMask(); bitMasks[2] = dcm.getBlueMask(); smHw = new SinglePixelPackedSampleModel(dataType, width, height, scanStride, bitMasks); break; case 24: case 32: dataType = DataBuffer.TYPE_INT; bitMasks = new int[3]; dcm = (DirectColorModel) cm; bitMasks[0] = dcm.getRedMask(); bitMasks[1] = dcm.getGreenMask(); bitMasks[2] = dcm.getBlueMask(); smHw = new SinglePixelPackedSampleModel(dataType, width, height, scanStride, bitMasks); break; default: throw new InternalError("Unsupported depth " + cm.getPixelSize()); } DataBuffer dbn = new DataBufferNative(sd, dataType, width, height); return new WritableRasterNative(smHw, dbn); }
54. RenderableImageProducer#run()
Project: jdk7u-jdk
File: RenderableImageProducer.java
File: RenderableImageProducer.java
/** * The runnable method for this class. This will produce an image using * the current RenderableImage and RenderContext and send it to all the * ImageConsumer currently registered with this class. */ public void run() { // First get the rendered image RenderedImage rdrdImage; if (rc != null) { rdrdImage = rdblImage.createRendering(rc); } else { rdrdImage = rdblImage.createDefaultRendering(); } // And its ColorModel ColorModel colorModel = rdrdImage.getColorModel(); Raster raster = rdrdImage.getData(); SampleModel sampleModel = raster.getSampleModel(); DataBuffer dataBuffer = raster.getDataBuffer(); if (colorModel == null) { colorModel = ColorModel.getRGBdefault(); } int minX = raster.getMinX(); int minY = raster.getMinY(); int width = raster.getWidth(); int height = raster.getHeight(); Enumeration icList; ImageConsumer ic; // Set up the ImageConsumers icList = ics.elements(); while (icList.hasMoreElements()) { ic = (ImageConsumer) icList.nextElement(); ic.setDimensions(width, height); ic.setHints(ImageConsumer.TOPDOWNLEFTRIGHT | ImageConsumer.COMPLETESCANLINES | ImageConsumer.SINGLEPASS | ImageConsumer.SINGLEFRAME); } // Get RGB pixels from the raster scanline by scanline and // send to consumers. int pix[] = new int[width]; int i, j; int numBands = sampleModel.getNumBands(); int tmpPixel[] = new int[numBands]; for (j = 0; j < height; j++) { for (i = 0; i < width; i++) { sampleModel.getPixel(i, j, tmpPixel, dataBuffer); pix[i] = colorModel.getDataElement(tmpPixel, 0); } // Now send the scanline to the Consumers icList = ics.elements(); while (icList.hasMoreElements()) { ic = (ImageConsumer) icList.nextElement(); ic.setPixels(0, j, width, 1, colorModel, pix, 0, width); } } // Now tell the consumers we're done. icList = ics.elements(); while (icList.hasMoreElements()) { ic = (ImageConsumer) icList.nextElement(); ic.imageComplete(ImageConsumer.STATICIMAGEDONE); } }
55. PNGImageReader#createRaster()
Project: jdk7u-jdk
File: PNGImageReader.java
File: PNGImageReader.java
private WritableRaster createRaster(int width, int height, int bands, int scanlineStride, int bitDepth) { DataBuffer dataBuffer; WritableRaster ras = null; Point origin = new Point(0, 0); if ((bitDepth < 8) && (bands == 1)) { dataBuffer = new DataBufferByte(height * scanlineStride); ras = Raster.createPackedRaster(dataBuffer, width, height, bitDepth, origin); } else if (bitDepth <= 8) { dataBuffer = new DataBufferByte(height * scanlineStride); ras = Raster.createInterleavedRaster(dataBuffer, width, height, scanlineStride, bands, bandOffsets[bands], origin); } else { dataBuffer = new DataBufferUShort(height * scanlineStride); ras = Raster.createInterleavedRaster(dataBuffer, width, height, scanlineStride, bands, bandOffsets[bands], origin); } return ras; }
56. ImageUtil#setUnpackedBinaryData()
Project: jdk7u-jdk
File: ImageUtil.java
File: ImageUtil.java
/** * Copies data into the packed array of the <code>Raster</code> * from an array of unpacked data of the form returned by * <code>getUnpackedBinaryData()</code>. * * <p> If the data are binary, then the target bit will be set if * and only if the corresponding byte is non-zero. * * @throws IllegalArgumentException if <code>isBinary()</code> returns * <code>false</code> with the <code>SampleModel</code> of the * supplied <code>Raster</code> as argument. */ public static void setUnpackedBinaryData(byte[] bdata, WritableRaster raster, Rectangle rect) { SampleModel sm = raster.getSampleModel(); if (!isBinary(sm)) { throw new IllegalArgumentException(I18N.getString("ImageUtil0")); } int rectX = rect.x; int rectY = rect.y; int rectWidth = rect.width; int rectHeight = rect.height; DataBuffer dataBuffer = raster.getDataBuffer(); int dx = rectX - raster.getSampleModelTranslateX(); int dy = rectY - raster.getSampleModelTranslateY(); MultiPixelPackedSampleModel mpp = (MultiPixelPackedSampleModel) sm; int lineStride = mpp.getScanlineStride(); int eltOffset = dataBuffer.getOffset() + mpp.getOffset(dx, dy); int bitOffset = mpp.getBitOffset(dx); int k = 0; if (dataBuffer instanceof DataBufferByte) { byte[] data = ((DataBufferByte) dataBuffer).getData(); for (int y = 0; y < rectHeight; y++) { int bOffset = eltOffset * 8 + bitOffset; for (int x = 0; x < rectWidth; x++) { if (bdata[k++] != (byte) 0) { data[bOffset / 8] |= (byte) (0x00000001 << (7 - bOffset & 7)); } bOffset++; } eltOffset += lineStride; } } else if (dataBuffer instanceof DataBufferShort || dataBuffer instanceof DataBufferUShort) { short[] data = dataBuffer instanceof DataBufferShort ? ((DataBufferShort) dataBuffer).getData() : ((DataBufferUShort) dataBuffer).getData(); for (int y = 0; y < rectHeight; y++) { int bOffset = eltOffset * 16 + bitOffset; for (int x = 0; x < rectWidth; x++) { if (bdata[k++] != (byte) 0) { data[bOffset / 16] |= (short) (0x00000001 << (15 - bOffset % 16)); } bOffset++; } eltOffset += lineStride; } } else if (dataBuffer instanceof DataBufferInt) { int[] data = ((DataBufferInt) dataBuffer).getData(); for (int y = 0; y < rectHeight; y++) { int bOffset = eltOffset * 32 + bitOffset; for (int x = 0; x < rectWidth; x++) { if (bdata[k++] != (byte) 0) { data[bOffset / 32] |= (int) (0x00000001 << (31 - bOffset % 32)); } bOffset++; } eltOffset += lineStride; } } }
57. ImageUtil#getUnpackedBinaryData()
Project: jdk7u-jdk
File: ImageUtil.java
File: ImageUtil.java
/** * Returns the binary data unpacked into an array of bytes. * The line stride will be the width of the <code>Raster</code>. * * @throws IllegalArgumentException if <code>isBinary()</code> returns * <code>false</code> with the <code>SampleModel</code> of the * supplied <code>Raster</code> as argument. */ public static byte[] getUnpackedBinaryData(Raster raster, Rectangle rect) { SampleModel sm = raster.getSampleModel(); if (!isBinary(sm)) { throw new IllegalArgumentException(I18N.getString("ImageUtil0")); } int rectX = rect.x; int rectY = rect.y; int rectWidth = rect.width; int rectHeight = rect.height; DataBuffer dataBuffer = raster.getDataBuffer(); int dx = rectX - raster.getSampleModelTranslateX(); int dy = rectY - raster.getSampleModelTranslateY(); MultiPixelPackedSampleModel mpp = (MultiPixelPackedSampleModel) sm; int lineStride = mpp.getScanlineStride(); int eltOffset = dataBuffer.getOffset() + mpp.getOffset(dx, dy); int bitOffset = mpp.getBitOffset(dx); byte[] bdata = new byte[rectWidth * rectHeight]; int maxY = rectY + rectHeight; int maxX = rectX + rectWidth; int k = 0; if (dataBuffer instanceof DataBufferByte) { byte[] data = ((DataBufferByte) dataBuffer).getData(); for (int y = rectY; y < maxY; y++) { int bOffset = eltOffset * 8 + bitOffset; for (int x = rectX; x < maxX; x++) { byte b = data[bOffset / 8]; bdata[k++] = (byte) ((b >>> (7 - bOffset & 7)) & 0x0000001); bOffset++; } eltOffset += lineStride; } } else if (dataBuffer instanceof DataBufferShort || dataBuffer instanceof DataBufferUShort) { short[] data = dataBuffer instanceof DataBufferShort ? ((DataBufferShort) dataBuffer).getData() : ((DataBufferUShort) dataBuffer).getData(); for (int y = rectY; y < maxY; y++) { int bOffset = eltOffset * 16 + bitOffset; for (int x = rectX; x < maxX; x++) { short s = data[bOffset / 16]; bdata[k++] = (byte) ((s >>> (15 - bOffset % 16)) & 0x0000001); bOffset++; } eltOffset += lineStride; } } else if (dataBuffer instanceof DataBufferInt) { int[] data = ((DataBufferInt) dataBuffer).getData(); for (int y = rectY; y < maxY; y++) { int bOffset = eltOffset * 32 + bitOffset; for (int x = rectX; x < maxX; x++) { int i = data[bOffset / 32]; bdata[k++] = (byte) ((i >>> (31 - bOffset % 32)) & 0x0000001); bOffset++; } eltOffset += lineStride; } } return bdata; }
58. XpmImageParser#readXpmImage()
Project: commons-imaging
File: XpmImageParser.java
File: XpmImageParser.java
private BufferedImage readXpmImage(final XpmHeader xpmHeader, final BasicCParser cParser) throws ImageReadException, IOException { ColorModel colorModel; WritableRaster raster; int bpp; if (xpmHeader.palette.size() <= (1 << 8)) { final int[] palette = new int[xpmHeader.palette.size()]; for (final Entry<Object, PaletteEntry> entry : xpmHeader.palette.entrySet()) { final PaletteEntry paletteEntry = entry.getValue(); palette[paletteEntry.index] = paletteEntry.getBestARGB(); } colorModel = new IndexColorModel(8, xpmHeader.palette.size(), palette, 0, true, -1, DataBuffer.TYPE_BYTE); raster = Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE, xpmHeader.width, xpmHeader.height, 1, null); bpp = 8; } else if (xpmHeader.palette.size() <= (1 << 16)) { final int[] palette = new int[xpmHeader.palette.size()]; for (final Entry<Object, PaletteEntry> entry : xpmHeader.palette.entrySet()) { final PaletteEntry paletteEntry = entry.getValue(); palette[paletteEntry.index] = paletteEntry.getBestARGB(); } colorModel = new IndexColorModel(16, xpmHeader.palette.size(), palette, 0, true, -1, DataBuffer.TYPE_USHORT); raster = Raster.createInterleavedRaster(DataBuffer.TYPE_USHORT, xpmHeader.width, xpmHeader.height, 1, null); bpp = 16; } else { colorModel = new DirectColorModel(32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000); raster = Raster.createPackedRaster(DataBuffer.TYPE_INT, xpmHeader.width, xpmHeader.height, new int[] { 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000 }, null); bpp = 32; } final BufferedImage image = new BufferedImage(colorModel, raster, colorModel.isAlphaPremultiplied(), new Properties()); final DataBuffer dataBuffer = raster.getDataBuffer(); final StringBuilder row = new StringBuilder(); boolean hasMore = true; for (int y = 0; y < xpmHeader.height; y++) { row.setLength(0); hasMore = parseNextString(cParser, row); if (y < (xpmHeader.height - 1) && !hasMore) { throw new ImageReadException("Parsing XPM file failed, " + "insufficient image rows in file"); } final int rowOffset = y * xpmHeader.width; for (int x = 0; x < xpmHeader.width; x++) { final String index = row.substring(x * xpmHeader.numCharsPerPixel, (x + 1) * xpmHeader.numCharsPerPixel); final PaletteEntry paletteEntry = xpmHeader.palette.get(index); if (paletteEntry == null) { throw new ImageReadException("No palette entry was defined " + "for " + index); } if (bpp <= 16) { dataBuffer.setElem(rowOffset + x, paletteEntry.index); } else { dataBuffer.setElem(rowOffset + x, paletteEntry.getBestARGB()); } } } while (hasMore) { row.setLength(0); hasMore = parseNextString(cParser, row); } final String token = cParser.nextToken(); if (!";".equals(token)) { throw new ImageReadException("Last token wasn't ';'"); } return image; }
59. UnsignedIntColorModel#createCompatibleWritableRaster()
Project: bioformats
File: UnsignedIntColorModel.java
File: UnsignedIntColorModel.java
/* @see java.awt.image.ColorModel#createCompatibleWritableRaster(int, int) */ @Override public WritableRaster createCompatibleWritableRaster(int w, int h) { int[] bandOffsets = new int[nChannels]; for (int i = 0; i < nChannels; i++) bandOffsets[i] = i; SampleModel m = new ComponentSampleModel(DataBuffer.TYPE_INT, w, h, nChannels, w * nChannels, bandOffsets); DataBuffer db = new DataBufferInt(w * h, nChannels); return Raster.createWritableRaster(m, db, null); }
60. AWTImageTools#getPixelType()
Project: bioformats
File: AWTImageTools.java
File: AWTImageTools.java
/** * Gets the pixel type of the given image. * @return One of the following types:<ul> * <li>FormatReader.INT8</li> * <li>FormatReader.UINT8</li> * <li>FormatReader.INT16</li> * <li>FormatReader.UINT16</li> * <li>FormatReader.INT32</li> * <li>FormatReader.UINT32</li> * <li>FormatReader.FLOAT</li> * <li>FormatReader.DOUBLE</li> * <li>-1 (unknown type)</li> * </ul> */ public static int getPixelType(BufferedImage image) { final Raster raster = image.getRaster(); if (raster == null) return -1; final DataBuffer buffer = raster.getDataBuffer(); if (buffer == null) return -1; if (buffer instanceof SignedByteBuffer) { return FormatTools.INT8; } else if (buffer instanceof SignedShortBuffer) { return FormatTools.INT16; } else if (buffer instanceof UnsignedIntBuffer) { return FormatTools.UINT32; } int type = buffer.getDataType(); int imageType = image.getType(); switch(type) { case DataBuffer.TYPE_BYTE: return FormatTools.UINT8; case DataBuffer.TYPE_DOUBLE: return FormatTools.DOUBLE; case DataBuffer.TYPE_FLOAT: return FormatTools.FLOAT; case DataBuffer.TYPE_INT: if (imageType == BufferedImage.TYPE_INT_RGB || imageType == BufferedImage.TYPE_INT_BGR || imageType == BufferedImage.TYPE_INT_ARGB) { return FormatTools.UINT8; } if (buffer instanceof UnsignedIntBuffer) { return FormatTools.UINT32; } return FormatTools.INT32; case DataBuffer.TYPE_SHORT: return FormatTools.INT16; case DataBuffer.TYPE_USHORT: if (imageType == BufferedImage.TYPE_USHORT_555_RGB || imageType == BufferedImage.TYPE_USHORT_565_RGB) { return FormatTools.UINT8; } return FormatTools.UINT16; default: return -1; } }
61. AWTImageTools#canUseBankDataDirectly()
Project: bioformats
File: AWTImageTools.java
File: AWTImageTools.java
/** * 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; }
62. AWTImageTools#makeImage()
Project: bioformats
File: AWTImageTools.java
File: AWTImageTools.java
/** * Creates an image from the given double-precision floating point data. * * @param data Array containing image data. * It is assumed that each channel corresponds to one element of the array. * For example, for RGB data, data[0] is R, data[1] is G, and data[2] is B. * @param w Width of image plane. * @param h Height of image plane. */ public static BufferedImage makeImage(double[][] data, int w, int h) { int dataType = DataBuffer.TYPE_DOUBLE; DataBuffer buffer = new DataBufferDouble(data, data[0].length); return constructImage(data.length, dataType, w, h, false, true, buffer); }
63. AWTImageTools#makeImage()
Project: bioformats
File: AWTImageTools.java
File: AWTImageTools.java
/** * Creates an image from the given single-precision floating point data. * * @param data Array containing image data. * It is assumed that each channel corresponds to one element of the array. * For example, for RGB data, data[0] is R, data[1] is G, and data[2] is B. * @param w Width of image plane. * @param h Height of image plane. */ public static BufferedImage makeImage(float[][] data, int w, int h) { int dataType = DataBuffer.TYPE_FLOAT; DataBuffer buffer = new DataBufferFloat(data, data[0].length); return constructImage(data.length, dataType, w, h, false, true, buffer); }
64. AWTImageTools#makeImage()
Project: bioformats
File: AWTImageTools.java
File: AWTImageTools.java
/** * Creates an image from the given double data. * * @param data Array containing image data. * @param w Width of image plane. * @param h Height of image plane. * @param c Number of channels. * @param interleaved If set, the channels are assumed to be interleaved; * otherwise they are assumed to be sequential. * For example, for RGB data, the pattern "RGBRGBRGB..." is interleaved, * while "RRR...GGG...BBB..." is sequential. */ public static BufferedImage makeImage(double[] data, int w, int h, int c, boolean interleaved) { if (c == 1) return makeImage(data, w, h); int dataType = DataBuffer.TYPE_DOUBLE; DataBuffer buffer = new DataBufferDouble(data, c * w * h); return constructImage(c, dataType, w, h, interleaved, false, buffer); }
65. AWTImageTools#makeImage()
Project: bioformats
File: AWTImageTools.java
File: AWTImageTools.java
/** * Creates an image from the given float data. * * @param data Array containing image data. * @param w Width of image plane. * @param h Height of image plane. * @param c Number of channels. * @param interleaved If set, the channels are assumed to be interleaved; * otherwise they are assumed to be sequential. * For example, for RGB data, the pattern "RGBRGBRGB..." is interleaved, * while "RRR...GGG...BBB..." is sequential. */ public static BufferedImage makeImage(float[] data, int w, int h, int c, boolean interleaved) { if (c == 1) return makeImage(data, w, h); int dataType = DataBuffer.TYPE_FLOAT; DataBuffer buffer = new DataBufferFloat(data, c * w * h); return constructImage(c, dataType, w, h, interleaved, false, buffer); }
66. ImageUtil#setUnpackedBinaryData()
Project: bioformats
File: ImageUtil.java
File: ImageUtil.java
/** * Copies data into the packed array of the <code>Raster</code> * from an array of unpacked data of the form returned by * <code>getUnpackedBinaryData()</code>. * * <p> If the data are binary, then the target bit will be set if * and only if the corresponding byte is non-zero. * * @throws IllegalArgumentException if <code>isBinary()</code> returns * <code>false</code> with the <code>SampleModel</code> of the * supplied <code>Raster</code> as argument. */ public static void setUnpackedBinaryData(byte[] bdata, WritableRaster raster, Rectangle rect) { SampleModel sm = raster.getSampleModel(); if (!isBinary(sm)) { throw new IllegalArgumentException(I18N.getString("ImageUtil0")); } int rectX = rect.x; int rectY = rect.y; int rectWidth = rect.width; int rectHeight = rect.height; DataBuffer dataBuffer = raster.getDataBuffer(); int dx = rectX - raster.getSampleModelTranslateX(); int dy = rectY - raster.getSampleModelTranslateY(); MultiPixelPackedSampleModel mpp = (MultiPixelPackedSampleModel) sm; int lineStride = mpp.getScanlineStride(); int eltOffset = dataBuffer.getOffset() + mpp.getOffset(dx, dy); int bitOffset = mpp.getBitOffset(dx); int k = 0; if (dataBuffer instanceof DataBufferByte) { byte[] data = ((DataBufferByte) dataBuffer).getData(); for (int y = 0; y < rectHeight; y++) { int bOffset = eltOffset * 8 + bitOffset; for (int x = 0; x < rectWidth; x++) { if (bdata[k++] != (byte) 0) { data[bOffset / 8] |= (byte) (0x00000001 << (7 - bOffset & 7)); } bOffset++; } eltOffset += lineStride; } } else if (dataBuffer instanceof DataBufferShort || dataBuffer instanceof DataBufferUShort) { short[] data = dataBuffer instanceof DataBufferShort ? ((DataBufferShort) dataBuffer).getData() : ((DataBufferUShort) dataBuffer).getData(); for (int y = 0; y < rectHeight; y++) { int bOffset = eltOffset * 16 + bitOffset; for (int x = 0; x < rectWidth; x++) { if (bdata[k++] != (byte) 0) { data[bOffset / 16] |= (short) (0x00000001 << (15 - bOffset % 16)); } bOffset++; } eltOffset += lineStride; } } else if (dataBuffer instanceof DataBufferInt) { int[] data = ((DataBufferInt) dataBuffer).getData(); for (int y = 0; y < rectHeight; y++) { int bOffset = eltOffset * 32 + bitOffset; for (int x = 0; x < rectWidth; x++) { if (bdata[k++] != (byte) 0) { data[bOffset / 32] |= (int) (0x00000001 << (31 - bOffset % 32)); } bOffset++; } eltOffset += lineStride; } } }
67. ImageUtil#getUnpackedBinaryData()
Project: bioformats
File: ImageUtil.java
File: ImageUtil.java
/** * Returns the binary data unpacked into an array of bytes. * The line stride will be the width of the <code>Raster</code>. * * @throws IllegalArgumentException if <code>isBinary()</code> returns * <code>false</code> with the <code>SampleModel</code> of the * supplied <code>Raster</code> as argument. */ public static byte[] getUnpackedBinaryData(Raster raster, Rectangle rect) { SampleModel sm = raster.getSampleModel(); if (!isBinary(sm)) { throw new IllegalArgumentException(I18N.getString("ImageUtil0")); } int rectX = rect.x; int rectY = rect.y; int rectWidth = rect.width; int rectHeight = rect.height; DataBuffer dataBuffer = raster.getDataBuffer(); int dx = rectX - raster.getSampleModelTranslateX(); int dy = rectY - raster.getSampleModelTranslateY(); MultiPixelPackedSampleModel mpp = (MultiPixelPackedSampleModel) sm; int lineStride = mpp.getScanlineStride(); int eltOffset = dataBuffer.getOffset() + mpp.getOffset(dx, dy); int bitOffset = mpp.getBitOffset(dx); byte[] bdata = new byte[rectWidth * rectHeight]; int maxY = rectY + rectHeight; int maxX = rectX + rectWidth; int k = 0; if (dataBuffer instanceof DataBufferByte) { byte[] data = ((DataBufferByte) dataBuffer).getData(); for (int y = rectY; y < maxY; y++) { int bOffset = eltOffset * 8 + bitOffset; for (int x = rectX; x < maxX; x++) { byte b = data[bOffset / 8]; bdata[k++] = (byte) ((b >>> (7 - bOffset & 7)) & 0x0000001); bOffset++; } eltOffset += lineStride; } } else if (dataBuffer instanceof DataBufferShort || dataBuffer instanceof DataBufferUShort) { short[] data = dataBuffer instanceof DataBufferShort ? ((DataBufferShort) dataBuffer).getData() : ((DataBufferUShort) dataBuffer).getData(); for (int y = rectY; y < maxY; y++) { int bOffset = eltOffset * 16 + bitOffset; for (int x = rectX; x < maxX; x++) { short s = data[bOffset / 16]; bdata[k++] = (byte) ((s >>> (15 - bOffset % 16)) & 0x0000001); bOffset++; } eltOffset += lineStride; } } else if (dataBuffer instanceof DataBufferInt) { int[] data = ((DataBufferInt) dataBuffer).getData(); for (int y = rectY; y < maxY; y++) { int bOffset = eltOffset * 32 + bitOffset; for (int x = rectX; x < maxX; x++) { int i = data[bOffset / 32]; bdata[k++] = (byte) ((i >>> (31 - bOffset % 32)) & 0x0000001); bOffset++; } eltOffset += lineStride; } } return bdata; }
68. PNGRed#decodePass()
Project: batik
File: PNGRed.java
File: PNGRed.java
/** * Reads in an image of a given size and returns it as a * WritableRaster. */ private void decodePass(WritableRaster imRas, int xOffset, int yOffset, int xStep, int yStep, int passWidth, int passHeight) { if ((passWidth == 0) || (passHeight == 0)) { return; } int bytesPerRow = (inputBands * passWidth * bitDepth + 7) / 8; int eltsPerRow = (bitDepth == 16) ? bytesPerRow / 2 : bytesPerRow; byte[] curr = new byte[bytesPerRow]; byte[] prior = new byte[bytesPerRow]; // Create a 1-row tall Raster to hold the data WritableRaster passRow = createRaster(passWidth, 1, inputBands, eltsPerRow, bitDepth); DataBuffer dataBuffer = passRow.getDataBuffer(); int type = dataBuffer.getDataType(); byte[] byteData = null; short[] shortData = null; if (type == DataBuffer.TYPE_BYTE) { byteData = ((DataBufferByte) dataBuffer).getData(); } else { shortData = ((DataBufferUShort) dataBuffer).getData(); } // Decode the (sub)image row-by-row int srcY, dstY; for (srcY = 0, dstY = yOffset; srcY < passHeight; srcY++, dstY += yStep) { // Read the filter type byte and a row of data int filter = 0; try { filter = dataStream.read(); dataStream.readFully(curr, 0, bytesPerRow); } catch (Exception e) { e.printStackTrace(); } switch(filter) { case PNG_FILTER_NONE: break; case PNG_FILTER_SUB: decodeSubFilter(curr, bytesPerRow, bytesPerPixel); break; case PNG_FILTER_UP: decodeUpFilter(curr, prior, bytesPerRow); break; case PNG_FILTER_AVERAGE: decodeAverageFilter(curr, prior, bytesPerRow, bytesPerPixel); break; case PNG_FILTER_PAETH: decodePaethFilter(curr, prior, bytesPerRow, bytesPerPixel); break; default: // Error -- unknown filter type String msg = PropertyUtil.getString("PNGImageDecoder16"); throw new RuntimeException(msg); } // Copy data into passRow byte by byte if (bitDepth < 16) { System.arraycopy(curr, 0, byteData, 0, bytesPerRow); } else { int idx = 0; for (int j = 0; j < eltsPerRow; j++) { shortData[j] = (short) ((curr[idx] << 8) | (curr[idx + 1] & 0xff)); idx += 2; } } processPixels(postProcess, passRow, imRas, xOffset, xStep, dstY, passWidth); // Swap curr and prior byte[] tmp = prior; prior = curr; curr = tmp; } }
69. PNGRed#createRaster()
Project: batik
File: PNGRed.java
File: PNGRed.java
private WritableRaster createRaster(int width, int height, int bands, int scanlineStride, int bitDepth) { DataBuffer dataBuffer; WritableRaster ras = null; Point origin = new Point(0, 0); if ((bitDepth < 8) && (bands == 1)) { dataBuffer = new DataBufferByte(height * scanlineStride); ras = Raster.createPackedRaster(dataBuffer, width, height, bitDepth, origin); } else if (bitDepth <= 8) { dataBuffer = new DataBufferByte(height * scanlineStride); ras = Raster.createInterleavedRaster(dataBuffer, width, height, scanlineStride, bands, bandOffsets[bands], origin); } else { dataBuffer = new DataBufferUShort(height * scanlineStride); ras = Raster.createInterleavedRaster(dataBuffer, width, height, scanlineStride, bands, bandOffsets[bands], origin); } return ras; }
70. PNGImageDecoder#decodePass()
Project: batik
File: PNGImageDecoder.java
File: PNGImageDecoder.java
/** * Reads in an image of a given size and returns it as a * WritableRaster. */ private void decodePass(WritableRaster imRas, int xOffset, int yOffset, int xStep, int yStep, int passWidth, int passHeight) { if ((passWidth == 0) || (passHeight == 0)) { return; } int bytesPerRow = (inputBands * passWidth * bitDepth + 7) / 8; int eltsPerRow = (bitDepth == 16) ? bytesPerRow / 2 : bytesPerRow; byte[] curr = new byte[bytesPerRow]; byte[] prior = new byte[bytesPerRow]; // Create a 1-row tall Raster to hold the data WritableRaster passRow = createRaster(passWidth, 1, inputBands, eltsPerRow, bitDepth); DataBuffer dataBuffer = passRow.getDataBuffer(); int type = dataBuffer.getDataType(); byte[] byteData = null; short[] shortData = null; if (type == DataBuffer.TYPE_BYTE) { byteData = ((DataBufferByte) dataBuffer).getData(); } else { shortData = ((DataBufferUShort) dataBuffer).getData(); } // Decode the (sub)image row-by-row int srcY, dstY; for (srcY = 0, dstY = yOffset; srcY < passHeight; srcY++, dstY += yStep) { // Read the filter type byte and a row of data int filter = 0; try { filter = dataStream.read(); dataStream.readFully(curr, 0, bytesPerRow); } catch (Exception e) { e.printStackTrace(); } switch(filter) { case PNG_FILTER_NONE: break; case PNG_FILTER_SUB: decodeSubFilter(curr, bytesPerRow, bytesPerPixel); break; case PNG_FILTER_UP: decodeUpFilter(curr, prior, bytesPerRow); break; case PNG_FILTER_AVERAGE: decodeAverageFilter(curr, prior, bytesPerRow, bytesPerPixel); break; case PNG_FILTER_PAETH: decodePaethFilter(curr, prior, bytesPerRow, bytesPerPixel); break; default: // Error -- uknown filter type String msg = PropertyUtil.getString("PNGImageDecoder16"); throw new RuntimeException(msg); } // Copy data into passRow byte by byte if (bitDepth < 16) { System.arraycopy(curr, 0, byteData, 0, bytesPerRow); } else { int idx = 0; for (int j = 0; j < eltsPerRow; j++) { shortData[j] = (short) ((curr[idx] << 8) | (curr[idx + 1] & 0xff)); idx += 2; } } processPixels(postProcess, passRow, imRas, xOffset, xStep, dstY, passWidth); // Swap curr and prior byte[] tmp = prior; prior = curr; curr = tmp; } }
71. PNGImageDecoder#createRaster()
Project: batik
File: PNGImageDecoder.java
File: PNGImageDecoder.java
private WritableRaster createRaster(int width, int height, int bands, int scanlineStride, int bitDepth) { DataBuffer dataBuffer; WritableRaster ras = null; Point origin = new Point(0, 0); if ((bitDepth < 8) && (bands == 1)) { dataBuffer = new DataBufferByte(height * scanlineStride); ras = Raster.createPackedRaster(dataBuffer, width, height, bitDepth, origin); } else if (bitDepth <= 8) { dataBuffer = new DataBufferByte(height * scanlineStride); ras = Raster.createInterleavedRaster(dataBuffer, width, height, scanlineStride, bands, bandOffsets[bands], origin); } else { dataBuffer = new DataBufferUShort(height * scanlineStride); ras = Raster.createInterleavedRaster(dataBuffer, width, height, scanlineStride, bands, bandOffsets[bands], origin); } return ras; }