/******************************************************************************* * * ******************************************************************************/ public static PlanarImage getPlanarImage (EditableImage editableImage) { return (PlanarImage)editableImage.getImageModel().getImage(); }
@Override public void getElements(double d, double d0, double d1, double d2, int i, int i0, int i1, double[] d3, double[] d4) { imageFunction.getElements(d, d0, d1, d2, i, i0, i1, d3, d4); } }
@Override public int getNumElements() { return imageFunction.getNumElements(); }
private void convert (final DataType fromType, final DataType toType) { Lookup.getDefault().lookup(ImplementationFactoryJAI.class); final EditableImage image = EditableImage.create(new CreateOp(640, 480, fromType)); assertEquals(fromType, image.getDataType()); assertEquals("KODAK Grayscale Conversion - Gamma 1.0", ImageUtils.getICCProfileName(image.getICCProfile())); assertNotNull(image.getICCProfile()); image.execute(new ChangeFormatOp(toType)); assertEquals(toType, image.getDataType()); assertNotNull(image.getICCProfile()); assertEquals("KODAK Grayscale Conversion - Gamma 1.0", ImageUtils.getICCProfileName(image.getICCProfile())); } }
@Test public void testCreateSingleBandUnsignedShortBlack () { log("testCreateSingleBandUnsignedShortBlack"); final EditableImage image = EditableImage.create(new CreateOp(WIDTH, HEIGHT, EditableImage.DataType.UNSIGNED_SHORT)); assertImage(image, 1, 16, 16, EditableImage.DataType.UNSIGNED_SHORT); assertIntContents(image, 0); }
@BeforeMethod @Override public void setUp() throws Exception { super.setUp(); // otherwise it's too slow! notOptimized = Platform.isMacOSX() ? img20030701_0043_jpg : null; optimized = img20030701_0043_jpg.execute2(new OptimizeOp()); }
@BeforeMethod @Override public void setUp() throws Exception { super.setUp(); // otherwise it's too slow! notOptimized = null; // Platform.isMacOSX() ? img20030701_0043_jpg : null; optimized = img20030701_0043_jpg.execute2(new OptimizeOp()); }
@Override protected long runTest (EditableImage image) { long accTime = 0; for (double scale = 0.1; scale <= 1; scale += 0.1) { log(">>>> scale: " + scale); EditableImage image2 = image.execute2(new OptimizeOp(scale, Quality.INTERMEDIATE)); accTime += image2.getLatestOperationTime(); } return accTime; } }
/*************************************************************************** * * **************************************************************************/ private void assertImage (final EditableImage image, final int bandCount, final int bitsPerBand, final int bitsPerPixel, final EditableImage.DataType dataType) { AssertJUnit.assertEquals(WIDTH, image.getWidth()); AssertJUnit.assertEquals(HEIGHT, image.getHeight()); AssertJUnit.assertEquals(bandCount, image.getBandCount()); AssertJUnit.assertEquals(bitsPerBand, image.getBitsPerBand()); AssertJUnit.assertEquals(bitsPerPixel, image.getBitsPerPixel()); AssertJUnit.assertEquals(dataType, image.getDataType()); } }
@Test public void testPerformance() { for (Quality quality : Quality.values()) { String name = getClassName(); log(name + " running"); AssertJUnit.assertEquals(PixelInterleavedSampleModel.class, img20030701_0043_jpg.getInnerProperty(SampleModel.class).getClass()); long time = runTest(img20030701_0043_jpg); log(name + img20030701_0043_jpg); log("STATS: " + "VERSION" + "::" + host + "::" + os + "::" + name + "::" + quality + "::" + file_20030701_0043_jpg.getName() + "=" + time); } }
@Override protected Raster getRaster (final EditableImage image) { return image.getInnerProperty(BufferedImage.class).getRaster(); } }
/******************************************************************************************************************* * * FIXME: this is probably not the best way of working. You're reading a BufferedImage by means of an ImageReader * and later converting it to a PlanarImage. But JAI has its own way to read images which is probably more * efficient. You need to change EditableImage read() methods to incapsulate ImageReaders and find a way to * preferably use JAI readers for supported file types, and ImageReaders for other types. * ******************************************************************************************************************/ @Nonnull public static EditableImage createImage (final @Nonnull RenderedImage renderedImage) { return new EditableImage(new ImageModelJAI(renderedImage)); }
/******************************************************************************************************************* * * {@inheritDoc} * ******************************************************************************************************************/ @Override public void dispose() { getPlanarImage().dispose(); super.dispose(); }
@Test public void testPropertiesWithJPG() throws IOException { _testProperties(file_20030701_0043_jpg, 3000, 1995, 3, 8, 24, EditableImage.DataType.BYTE); }
@Override public boolean isComplex() { return imageFunction.isComplex(); }
@Test public void testCreateSingleBandIntInitialValue () { log("testCreateSingleBandIntInitialValue"); for (int i = 0; i < intValues.length; i++) { final EditableImage image = EditableImage.create(new CreateOp(WIDTH, HEIGHT, EditableImage.DataType.INT, intValues[i])); assertImage(image, 1, 32, 32, EditableImage.DataType.INT); assertIntContents(image, intValues[i]); } }
@Override @Nonnull protected Raster getRaster (final @Nonnull EditableImage image) { return image.getInnerProperty(PlanarImage.class).getData(); } }
@Override public void getElements(float f, float f0, float f1, float f2, int i, int i0, int i1, float[] f3, float[] f4) { imageFunction.getElements(f, f0, f1, f2, i, i0, i1, f3, f4); }
@Test public void testPropertiesWithNEF() throws IOException { // Reajent is enabled // FIXME: should be 16 and 48, UNSIGNED_SHORT _testProperties(file_20030701_0043_nef, 3008, 2000, 3, 8, 24, EditableImage.DataType.BYTE); }