From: <svn...@os...> - 2012-03-08 14:14:06
|
Author: aaime Date: 2012-03-08 06:13:58 -0800 (Thu, 08 Mar 2012) New Revision: 38616 Modified: branches/2.7.x/modules/library/coverage/src/main/java/org/geotools/image/ImageWorker.java branches/2.7.x/modules/library/coverage/src/test/java/org/geotools/image/ImageWorkerTest.java Log: [GEOT-4064] ImageWorker.affine misbehaves in case of chained, inverted transforms Modified: branches/2.7.x/modules/library/coverage/src/main/java/org/geotools/image/ImageWorker.java =================================================================== --- branches/2.7.x/modules/library/coverage/src/main/java/org/geotools/image/ImageWorker.java 2012-03-08 10:17:06 UTC (rev 38615) +++ branches/2.7.x/modules/library/coverage/src/main/java/org/geotools/image/ImageWorker.java 2012-03-08 14:13:58 UTC (rev 38616) @@ -2863,6 +2863,7 @@ // did it become a identity after the combination? if(!hasScaleX && !hasScaleY && !hasShearX && !hasShearY && !hasTranslateX && !hasTranslateY) { + this.image = source; return this; } Modified: branches/2.7.x/modules/library/coverage/src/test/java/org/geotools/image/ImageWorkerTest.java =================================================================== --- branches/2.7.x/modules/library/coverage/src/test/java/org/geotools/image/ImageWorkerTest.java 2012-03-08 10:17:06 UTC (rev 38615) +++ branches/2.7.x/modules/library/coverage/src/test/java/org/geotools/image/ImageWorkerTest.java 2012-03-08 14:13:58 UTC (rev 38616) @@ -26,6 +26,7 @@ import java.awt.Color; import java.awt.Transparency; import java.awt.color.ColorSpace; +import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.ComponentColorModel; @@ -804,4 +805,26 @@ assertEquals(Math.round(inputCM.getAlpha(i) * 0.5), outputCM.getAlpha(i)); } } + + @Test + public void testOptimizeAffine() throws Exception { + BufferedImage bi = new BufferedImage(100, 100, BufferedImage.TYPE_3BYTE_BGR); + ImageWorker iw = new ImageWorker(bi); + + // apply straight translation + AffineTransform at = AffineTransform.getTranslateInstance(100, 100); + iw.affine(at, null, null); + RenderedImage t1 = iw.getRenderedImage(); + assertEquals(100, t1.getMinX()); + assertEquals(100, t1.getMinY()); + + // now go back + AffineTransform atInverse = AffineTransform.getTranslateInstance(-100, -100); + iw.affine(atInverse, null, null); + RenderedImage t2 = iw.getRenderedImage(); + assertEquals(0, t2.getMinX()); + assertEquals(0, t2.getMinY()); + assertSame(bi, t2); + + } } |