if (imageTypes.hasNext()) { ImageTypeSpecifier imageTypeSpecifier = imageTypes.next(); img = imageTypeSpecifier.createBufferedImage(width, height); param.setDestination(img); } else {
@Override public IIOMetadata getDefaultImageMetadata(final ImageTypeSpecifier imageType, final ImageWriteParam param) { TGAHeader header = TGAHeader.from(imageType.createBufferedImage(1, 1), param); return new TGAMetadata(header, null); }
WritableRaster rowRaster = singleBandRowSpec.createBufferedImage(header.width, 1).getRaster(); boolean banded = destRaster.getDataBuffer().getNumBanks() > 1; int interleavedBands = banded ? 1 : destRaster.getNumBands();
return imageType.createBufferedImage(destWidth, destHeight);
@Override protected List<? extends RenderedImage> getTestData() { return Arrays.asList( drawSomething(new BufferedImage(10, 10, BufferedImage.TYPE_INT_RGB)), drawSomething(new BufferedImage(10, 10, BufferedImage.TYPE_INT_ARGB)), drawSomething(new BufferedImage(10, 10, BufferedImage.TYPE_INT_ARGB_PRE)), drawSomething(new BufferedImage(10, 10, BufferedImage.TYPE_INT_BGR)), drawSomething(new BufferedImage(10, 10, BufferedImage.TYPE_3BYTE_BGR)), drawSomething(new BufferedImage(10, 10, BufferedImage.TYPE_4BYTE_ABGR)), drawSomething(new BufferedImage(10, 10, BufferedImage.TYPE_4BYTE_ABGR_PRE)), drawSomething(new BufferedImage(10, 10, BufferedImage.TYPE_USHORT_555_RGB)), drawSomething(new BufferedImage(10, 10, BufferedImage.TYPE_BYTE_GRAY)), drawSomething(new BufferedImage(10, 10, BufferedImage.TYPE_BYTE_INDEXED)), drawSomething(TYPE_USHORT_1555_ARGB.createBufferedImage(10, 10)) ); }
.createBufferedImage(renderedImage.getWidth(), 1) .getRaster() : renderedImage.getSampleModel().getTransferType() == DataBuffer.TYPE_INT ? ImageTypeSpecifiers.createInterleaved(ColorSpace.getInstance(ColorSpace.CS_sRGB), new int[]{2, 1, 0}, DataBuffer.TYPE_BYTE, false, false) .createBufferedImage(renderedImage.getWidth(), 1) .getRaster() : ImageTypeSpecifier.createFromRenderedImage(renderedImage) .createBufferedImage(renderedImage.getWidth(), 1) .getRaster();
WritableRaster rowRaster = rawType.createBufferedImage(width, 1).getRaster();
@Test public void testCreateBufferedImageIndexed() { IndexColorModel cm = new IndexColorModel(8, 256, new int[256], 0, false, -1, DataBuffer.TYPE_BYTE); ImageTypeSpecifier spec = IndexedImageTypeSpecifier.createFromIndexColorModel(cm); BufferedImage image = spec.createBufferedImage(2, 2); assertNotNull(image); assertEquals(BufferedImage.TYPE_BYTE_INDEXED, image.getType()); assertEquals(cm, image.getColorModel()); } }
@Test public void testCreateBufferedImageBinary() { IndexColorModel cm = new IndexColorModel(1, 2, new int[]{0xffffff, 0x00}, 0, false, -1, DataBuffer.TYPE_BYTE); ImageTypeSpecifier spec = IndexedImageTypeSpecifier.createFromIndexColorModel(cm); BufferedImage image = spec.createBufferedImage(2, 2); assertNotNull(image); assertEquals(BufferedImage.TYPE_BYTE_BINARY, image.getType()); assertEquals(cm, image.getColorModel()); }
Raster raster = spec.createBufferedImage(width, height).getRaster(); Raster jreResult = null; Raster tmResult = null;
@Test public void testFilterRotateBICustom() { BufferedImageOp jreOp = new java.awt.image.AffineTransformOp(AffineTransform.getQuadrantRotateInstance(1, Math.min(width, height) / 2, Math.min(width, height) / 2), null); BufferedImageOp tmOp = new com.twelvemonkeys.image.AffineTransformOp(AffineTransform.getQuadrantRotateInstance(1, Math.min(width, height) / 2, Math.min(width, height) / 2), null); for (ImageTypeSpecifier spec : SPECS) { BufferedImage image = spec.createBufferedImage(width, height); BufferedImage tmResult = tmOp.filter(image, null); assertNotNull("No result!", tmResult); BufferedImage jreResult = null; try { jreResult = jreOp.filter(image, null); } catch (ImagingOpException ignore) { // We expect this to fail for certain cases, that's why we crated the class in the first place } if (jreResult != null) { assertEquals("Bad type", jreResult.getType(), tmResult.getType()); assertEquals("Incorrect color model", jreResult.getColorModel(), tmResult.getColorModel()); assertEquals("Incorrect width", jreResult.getWidth(), tmResult.getWidth()); assertEquals("Incorrect height", jreResult.getHeight(), tmResult.getHeight()); } else { assertEquals("Bad type", spec.getBufferedImageType(), tmResult.getType()); assertEquals("Incorrect color model", spec.getColorModel(), tmResult.getColorModel()); assertEquals("Incorrect width", height, tmResult.getWidth()); assertEquals("Incorrect height", width, tmResult.getHeight()); } } }
BufferedImage destination = illegalType.createBufferedImage(50, 50); param.setDestination(destination);
checkReadParamBandSettings(param, rawType.getNumBands(), destRaster.getNumBands()); WritableRaster rowRaster = rawType.createBufferedImage(width, 1).getRaster();
@Test public void testSetDestination() throws IOException { ImageReader reader = createReader(); TestData data = getTestData().get(0); reader.setInput(data.getInputStream()); ImageReadParam param = reader.getDefaultReadParam(); Iterator<ImageTypeSpecifier> types = reader.getImageTypes(0); while (types.hasNext()) { ImageTypeSpecifier type = types.next(); BufferedImage destination = type.createBufferedImage(50, 50); param.setDestination(destination); BufferedImage result = null; try { result = reader.read(0, param); } catch (Exception e) { failBecause("Could not read " + data.getInput() + " with explicit destination " + destination, e); } assertSame(destination, result); } reader.dispose(); }
checkReadParamBandSettings(param, rawType.getNumBands(), destRaster.getNumBands()); WritableRaster rowRaster = rawType.createBufferedImage(width, 1).getRaster();
checkReadParamBandSettings(param, rawType.getNumBands(), destRaster.getNumBands()); WritableRaster rowRaster = rawType.createBufferedImage(width, 1).getRaster();
@Test public void testReadLayersExplicitDestination() throws IOException { PSDImageReader imageReader = createReader(); try (ImageInputStream stream = getTestData().get(3).getInputStream()) { imageReader.setInput(stream); int numImages = imageReader.getNumImages(true); for (int i = 0; i < numImages; i++) { Iterator<ImageTypeSpecifier> types = imageReader.getImageTypes(i); int width = imageReader.getWidth(i); int height = imageReader.getHeight(i); while (types.hasNext()) { ImageTypeSpecifier type = types.next(); ImageReadParam param = imageReader.getDefaultReadParam(); BufferedImage destination = type.createBufferedImage(width, height); param.setDestination(destination); BufferedImage image = imageReader.read(i, param); assertSame(destination, image); } } } }
@Test public void testSetDestinationRaw() throws IOException { ImageReader reader = createReader(); TestData data = getTestData().get(0); reader.setInput(data.getInputStream()); ImageReadParam param = reader.getDefaultReadParam(); ImageTypeSpecifier type = reader.getRawImageType(0); if (type != null) { BufferedImage destination = type.createBufferedImage(reader.getWidth(0), reader.getHeight(0)); param.setDestination(destination); BufferedImage result = null; try { result = reader.read(0, param); } catch (Exception e) { failBecause("Image could not be read", e); } assertSame(destination, result); } else { System.err.println("WARNING: Test skipped due to reader.getRawImageType(0) returning null"); } reader.dispose(); }
@Test(expected = IIOException.class) public void testBrokenBogusSegmentLengthReadWithDestination() throws IOException { JPEGImageReader reader = createReader(); try { reader.setInput(ImageIO.createImageInputStream(getClassLoaderResource("/broken-jpeg/broken-bogus-segment-length.jpg"))); assertEquals(467, reader.getWidth(0)); assertEquals(612, reader.getHeight(0)); ImageTypeSpecifier type = reader.getImageTypes(0).next(); BufferedImage image = type.createBufferedImage(reader.getWidth(0), reader.getHeight(0)); ImageReadParam param = reader.getDefaultReadParam(); param.setDestination(image); try { reader.read(0, param); } catch (IOException e) { // Even if we get an exception here, the image should contain 10-15% of the image assertRGBEquals(0xffffffff, image.getRGB(0, 0)); // white area assertRGBEquals(0xff0000ff, image.getRGB(67, 22)); // blue area assertRGBEquals(0xffff00ff, image.getRGB(83, 22)); // purple area throw e; } } finally { reader.dispose(); } }
BufferedImage destination = type.createBufferedImage(width, height); param.setDestination(destination);