Issue 492
authorsrowen <srowen@59b500cc-1b3d-0410-9834-0bbf25fbcc57>
Sat, 14 Aug 2010 19:11:49 +0000 (19:11 +0000)
committersrowen <srowen@59b500cc-1b3d-0410-9834-0bbf25fbcc57>
Sat, 14 Aug 2010 19:11:49 +0000 (19:11 +0000)
git-svn-id: http://zxing.googlecode.com/svn/trunk@1533 59b500cc-1b3d-0410-9834-0bbf25fbcc57

AUTHORS
core/test/src/com/google/zxing/common/AbstractBlackBoxTestCase.java
core/test/src/com/google/zxing/negative/FalsePositivesBlackBoxTestCase.java
core/test/src/com/google/zxing/negative/PartialBlackBoxTestCase.java
core/test/src/com/google/zxing/negative/UnsupportedBlackBoxTestCase.java
core/test/src/com/google/zxing/qrcode/QRCodeBlackBox2TestCase.java

diff --git a/AUTHORS b/AUTHORS
index 2e66aba..53ff30d 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -48,7 +48,9 @@ Ryan Alford
 Sanford Squires
 Sean Owen (Google)
 Simon Flannery (Ericsson)
+Steven Parkes
 Suraj Supekar
 Sven Klinkhamer
 Thomas Gerbet
 Vince Francis (LifeMarks)
+Yakov Okshtein (Google)
index 5048343..b4dc426 100644 (file)
@@ -29,6 +29,7 @@ import junit.framework.TestCase;
 
 import javax.imageio.ImageIO;
 import java.awt.geom.AffineTransform;
+import java.awt.geom.Rectangle2D;
 import java.awt.image.AffineTransformOp;
 import java.awt.image.BufferedImage;
 import java.awt.image.BufferedImageOp;
@@ -310,9 +311,25 @@ public abstract class AbstractBlackBoxTestCase extends TestCase {
     if (degrees == 0.0f) {
       return original;
     } else {
+      double radians = Math.toRadians(degrees);
+
+      // Transform simply to find out the new bounding box (don't actually run the image through it)
       AffineTransform at = new AffineTransform();
-      at.rotate(Math.toRadians(degrees), original.getWidth() / 2.0, original.getHeight() / 2.0);
+      at.rotate(radians, original.getWidth() / 2.0, original.getHeight() / 2.0);
       BufferedImageOp op = new AffineTransformOp(at, AffineTransformOp.TYPE_BICUBIC);
+
+      Rectangle2D r = op.getBounds2D(original);
+      int width = (int) Math.ceil(r.getWidth());
+      int height = (int) Math.ceil(r.getHeight());
+
+      // Real transform, now that we know the size of the new image and how to translate after we rotate
+      // to keep it centered
+      at = new AffineTransform();
+      at.rotate(radians, width / 2.0, height / 2.0);
+      at.translate(((width - original.getWidth()) / 2.0),
+                   ((height - original.getHeight()) / 2.0));
+      op = new AffineTransformOp(at, AffineTransformOp.TYPE_BICUBIC);
+
       return op.filter(original, null);
     }
   }
index 2d8c0b2..97e18a2 100644 (file)
@@ -28,9 +28,9 @@ public final class FalsePositivesBlackBoxTestCase extends AbstractNegativeBlackB
   public FalsePositivesBlackBoxTestCase() {
     super("test/data/blackbox/falsepositives");
     addTest(2, 0.0f);
-    addTest(0, 90.0f);
+    addTest(1, 90.0f);
     addTest(1, 180.0f);
-    addTest(1, 270.0f);
+    addTest(2, 270.0f);
   }
 
 }
index 6a63da8..227d5a4 100644 (file)
@@ -30,7 +30,7 @@ public final class PartialBlackBoxTestCase extends AbstractNegativeBlackBoxTestC
     addTest(1, 0.0f);
     addTest(1, 90.0f);
     addTest(1, 180.0f);
-    addTest(0, 270.0f);
+    addTest(1, 270.0f);
   }
 
 }
index 969a042..99ebdef 100644 (file)
@@ -28,9 +28,9 @@ public final class UnsupportedBlackBoxTestCase extends AbstractNegativeBlackBoxT
   public UnsupportedBlackBoxTestCase() {
     super("test/data/blackbox/unsupported");
     addTest(1, 0.0f);
-    addTest(0, 90.0f);
+    addTest(1, 90.0f);
     addTest(1, 180.0f);
-    addTest(0, 270.0f);
+    addTest(1, 270.0f);
   }
 
 }
index 8bee5cd..0fc76eb 100644 (file)
@@ -28,9 +28,9 @@ public final class QRCodeBlackBox2TestCase extends AbstractBlackBoxTestCase {
   public QRCodeBlackBox2TestCase() {
     super("test/data/blackbox/qrcode-2", new MultiFormatReader(), BarcodeFormat.QR_CODE);
     addTest(26, 26, 0.0f);
-    addTest(24, 24, 90.0f);
+    addTest(25, 25, 90.0f);
     addTest(24, 24, 180.0f);
-    addTest(22, 23, 270.0f);
+    addTest(25, 25, 270.0f);
   }
 
 }