package org.geotools.image; import static org.junit.Assert.*; import java.awt.Color; import java.awt.GradientPaint; import java.awt.Graphics2D; import java.awt.Point; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import java.awt.image.renderable.ParameterBlock; import javax.media.jai.JAI; import javax.media.jai.RenderedOp; import javax.media.jai.TileCache; import javax.media.jai.operator.ExtremaDescriptor; import javax.media.jai.operator.SubtractDescriptor; import org.geotools.image.crop.GTCropDescriptor; import org.junit.Assert; import org.junit.Test; import com.sun.media.jai.util.SunTileCache; public class CropImageTest { @Test public void testCropImagePB() { BufferedImage source = buildSource(); ParameterBlock pb = buildParameterBlock(source); RenderedOp cropped = JAI.create("crop", pb); RenderedOp gtCropped = JAI.create("GTCrop", pb); assertImageEquals(cropped, gtCropped); } @Test public void testTileCache() { TileCache tc = new SunTileCache(); RenderingHints hints = new RenderingHints(JAI.KEY_TILE_CACHE, tc); BufferedImage source = buildSource(); ParameterBlock pb = buildParameterBlock(source); RenderedOp gtCropped = JAI.create("GTCrop", pb, hints); gtCropped.getColorModel(); // force to compute the image assertSame(tc, gtCropped.getRenderingHint(JAI.KEY_TILE_CACHE)); } @Test public void testNullTileCache() { RenderingHints hints = new RenderingHints(JAI.KEY_TILE_CACHE, null); BufferedImage source = buildSource(); ParameterBlock pb = buildParameterBlock(source); RenderedOp gtCropped = JAI.create("GTCrop", pb, hints); gtCropped.getColorModel(); // force to compute the image assertNull(gtCropped.getRenderingHint(JAI.KEY_TILE_CACHE)); } @Test public void testNullTileCacheDescriptor() { RenderingHints hints = new RenderingHints(JAI.KEY_TILE_CACHE, null); BufferedImage source = buildSource(); RenderedOp gtCropped = GTCropDescriptor.create(source, 10f, 10f, 20f, 20f, hints); gtCropped.getColorModel(); // force to compute the image assertNull(gtCropped.getRenderingHint(JAI.KEY_TILE_CACHE)); } private BufferedImage buildSource() { BufferedImage source = new BufferedImage(100, 100, BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = (Graphics2D) source.getGraphics(); g.setPaint(new GradientPaint(new Point(0, 0), Color.WHITE, new Point(100, 100), Color.BLACK)); g.dispose(); return source; } private void assertImageEquals(RenderedOp first, RenderedOp second) { RenderedOp difference = SubtractDescriptor.create(first, second, null); RenderedOp stats = ExtremaDescriptor.create(difference, null, 1, 1, false, 1, null); double[] minimum = (double[]) stats.getProperty("minimum"); double[] maximum = (double[]) stats.getProperty("maximum"); assertEquals(minimum[0], maximum[0], 0.0); assertEquals(minimum[1], maximum[1], 0.0); assertEquals(minimum[2], maximum[2], 0.0); } private ParameterBlock buildParameterBlock(BufferedImage source) { ParameterBlock pb = new ParameterBlock(); pb.addSource(source); pb.add((float) 10); pb.add((float) 50); pb.add((float) 20); pb.add((float) 20); return pb; } }