Minor AffineTransformOp clean-up + removed test output.

(cherry picked from commit 511a29beb91a8fffd89287b0ae62820b43770afe)
This commit is contained in:
Harald Kuhr 2021-10-29 11:05:24 +02:00
parent 49ddbfa85e
commit b70e52561a
2 changed files with 32 additions and 22 deletions

View File

@ -34,7 +34,13 @@ import java.awt.*;
import java.awt.geom.AffineTransform; import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D; import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D;
import java.awt.image.*; import java.awt.image.BufferedImage;
import java.awt.image.BufferedImageOp;
import java.awt.image.ColorModel;
import java.awt.image.ImagingOpException;
import java.awt.image.Raster;
import java.awt.image.RasterOp;
import java.awt.image.WritableRaster;
/** /**
* This is a drop-in replacement for {@link java.awt.image.AffineTransformOp}. * This is a drop-in replacement for {@link java.awt.image.AffineTransformOp}.
@ -70,6 +76,7 @@ public class AffineTransformOp implements BufferedImageOp, RasterOp {
delegate = new java.awt.image.AffineTransformOp(xform, interpolationType); delegate = new java.awt.image.AffineTransformOp(xform, interpolationType);
} }
@SuppressWarnings("ConstantConditions")
@Override @Override
public BufferedImage filter(final BufferedImage src, BufferedImage dst) { public BufferedImage filter(final BufferedImage src, BufferedImage dst) {
try { try {
@ -80,10 +87,9 @@ public class AffineTransformOp implements BufferedImageOp, RasterOp {
dst = createCompatibleDestImage(src, src.getColorModel()); dst = createCompatibleDestImage(src, src.getColorModel());
} }
Graphics2D g2d = null; Graphics2D g2d = dst.createGraphics();
try { try {
g2d = dst.createGraphics();
int interpolationType = delegate.getInterpolationType(); int interpolationType = delegate.getInterpolationType();
if (interpolationType > 0) { if (interpolationType > 0) {
@ -109,9 +115,7 @@ public class AffineTransformOp implements BufferedImageOp, RasterOp {
return dst; return dst;
} }
finally { finally {
if (g2d != null) { g2d.dispose();
g2d.dispose();
}
} }
} }
} }

View File

@ -30,17 +30,26 @@
package com.twelvemonkeys.image; package com.twelvemonkeys.image;
import org.junit.Test; import static java.lang.Math.min;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
import javax.imageio.ImageTypeSpecifier;
import java.awt.color.ColorSpace; import java.awt.color.ColorSpace;
import java.awt.geom.AffineTransform; import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D; import java.awt.geom.Point2D;
import java.awt.image.*; import java.awt.image.BufferedImage;
import java.awt.image.BufferedImageOp;
import java.awt.image.DataBuffer;
import java.awt.image.ImagingOpException;
import java.awt.image.Raster;
import java.awt.image.RasterOp;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import static org.junit.Assert.*; import javax.imageio.ImageTypeSpecifier;
import org.junit.Test;
/** /**
* AffineTransformOpTest. * AffineTransformOpTest.
@ -101,6 +110,7 @@ public class AffineTransformOpTest {
private final int width = 30; private final int width = 30;
private final int height = 20; private final int height = 20;
private final double anchor = min(width, height) / 2.0;
@Test @Test
public void testGetPoint2D() { public void testGetPoint2D() {
@ -128,8 +138,8 @@ public class AffineTransformOpTest {
@Test @Test
public void testFilterRotateBIStandard() { public void testFilterRotateBIStandard() {
BufferedImageOp jreOp = new java.awt.image.AffineTransformOp(AffineTransform.getQuadrantRotateInstance(1, Math.min(width, height) / 2, Math.min(width, height) / 2), null); BufferedImageOp jreOp = new java.awt.image.AffineTransformOp(AffineTransform.getQuadrantRotateInstance(1, anchor, anchor), null);
BufferedImageOp tmOp = new com.twelvemonkeys.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, anchor, anchor), null);
for (Integer type : TYPES) { for (Integer type : TYPES) {
BufferedImage image = new BufferedImage(width, height, type); BufferedImage image = new BufferedImage(width, height, type);
@ -147,8 +157,8 @@ public class AffineTransformOpTest {
@Test @Test
public void testFilterRotateBICustom() { 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 jreOp = new java.awt.image.AffineTransformOp(AffineTransform.getQuadrantRotateInstance(1, anchor, anchor), null);
BufferedImageOp tmOp = new com.twelvemonkeys.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, anchor, anchor), null);
for (ImageTypeSpecifier spec : SPECS) { for (ImageTypeSpecifier spec : SPECS) {
BufferedImage image = spec.createBufferedImage(width, height); BufferedImage image = spec.createBufferedImage(width, height);
@ -197,8 +207,8 @@ public class AffineTransformOpTest {
@Test @Test
public void testFilterRotateRasterStandard() { public void testFilterRotateRasterStandard() {
RasterOp jreOp = new java.awt.image.AffineTransformOp(AffineTransform.getQuadrantRotateInstance(1, Math.min(width, height) / 2, Math.min(width, height) / 2), null); RasterOp jreOp = new java.awt.image.AffineTransformOp(AffineTransform.getQuadrantRotateInstance(1, anchor, anchor), null);
RasterOp tmOp = new com.twelvemonkeys.image.AffineTransformOp(AffineTransform.getQuadrantRotateInstance(1, Math.min(width, height) / 2, Math.min(width, height) / 2), null); RasterOp tmOp = new com.twelvemonkeys.image.AffineTransformOp(AffineTransform.getQuadrantRotateInstance(1, anchor, anchor), null);
for (Integer type : TYPES) { for (Integer type : TYPES) {
Raster raster = new BufferedImage(width, height, type).getRaster(); Raster raster = new BufferedImage(width, height, type).getRaster();
@ -221,8 +231,6 @@ public class AffineTransformOpTest {
fail("No result!"); fail("No result!");
} }
else { else {
System.err.println("AffineTransformOpTest.testFilterRotateRasterStandard");
System.err.println("type: " + type);
continue; continue;
} }
} }
@ -240,8 +248,8 @@ public class AffineTransformOpTest {
@Test @Test
public void testFilterRotateRasterCustom() { public void testFilterRotateRasterCustom() {
RasterOp jreOp = new java.awt.image.AffineTransformOp(AffineTransform.getQuadrantRotateInstance(1, Math.min(width, height) / 2, Math.min(width, height) / 2), null); RasterOp jreOp = new java.awt.image.AffineTransformOp(AffineTransform.getQuadrantRotateInstance(1, anchor, anchor), null);
RasterOp tmOp = new com.twelvemonkeys.image.AffineTransformOp(AffineTransform.getQuadrantRotateInstance(1, Math.min(width, height) / 2, Math.min(width, height) / 2), null); RasterOp tmOp = new com.twelvemonkeys.image.AffineTransformOp(AffineTransform.getQuadrantRotateInstance(1, anchor, anchor), null);
for (ImageTypeSpecifier spec : SPECS) { for (ImageTypeSpecifier spec : SPECS) {
Raster raster = spec.createBufferedImage(width, height).getRaster(); Raster raster = spec.createBufferedImage(width, height).getRaster();
@ -264,8 +272,6 @@ public class AffineTransformOpTest {
fail("No result!"); fail("No result!");
} }
else { else {
System.err.println("AffineTransformOpTest.testFilterRotateRasterCustom");
System.err.println("spec: " + spec);
continue; continue;
} }
} }