Issue 492

git-svn-id: https://zxing.googlecode.com/svn/trunk@1533 59b500cc-1b3d-0410-9834-0bbf25fbcc57
This commit is contained in:
srowen 2010-08-14 19:11:49 +00:00
parent eee9068f2a
commit aee6be71f3
6 changed files with 27 additions and 8 deletions

View file

@ -48,7 +48,9 @@ Ryan Alford
Sanford Squires Sanford Squires
Sean Owen (Google) Sean Owen (Google)
Simon Flannery (Ericsson) Simon Flannery (Ericsson)
Steven Parkes
Suraj Supekar Suraj Supekar
Sven Klinkhamer Sven Klinkhamer
Thomas Gerbet Thomas Gerbet
Vince Francis (LifeMarks) Vince Francis (LifeMarks)
Yakov Okshtein (Google)

View file

@ -29,6 +29,7 @@ import junit.framework.TestCase;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import java.awt.geom.AffineTransform; import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.awt.image.AffineTransformOp; import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.awt.image.BufferedImageOp; import java.awt.image.BufferedImageOp;
@ -310,9 +311,25 @@ public abstract class AbstractBlackBoxTestCase extends TestCase {
if (degrees == 0.0f) { if (degrees == 0.0f) {
return original; return original;
} else { } 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(); 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); 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); return op.filter(original, null);
} }
} }

View file

@ -28,9 +28,9 @@ public final class FalsePositivesBlackBoxTestCase extends AbstractNegativeBlackB
public FalsePositivesBlackBoxTestCase() { public FalsePositivesBlackBoxTestCase() {
super("test/data/blackbox/falsepositives"); super("test/data/blackbox/falsepositives");
addTest(2, 0.0f); addTest(2, 0.0f);
addTest(0, 90.0f); addTest(1, 90.0f);
addTest(1, 180.0f); addTest(1, 180.0f);
addTest(1, 270.0f); addTest(2, 270.0f);
} }
} }

View file

@ -30,7 +30,7 @@ public final class PartialBlackBoxTestCase extends AbstractNegativeBlackBoxTestC
addTest(1, 0.0f); addTest(1, 0.0f);
addTest(1, 90.0f); addTest(1, 90.0f);
addTest(1, 180.0f); addTest(1, 180.0f);
addTest(0, 270.0f); addTest(1, 270.0f);
} }
} }

View file

@ -28,9 +28,9 @@ public final class UnsupportedBlackBoxTestCase extends AbstractNegativeBlackBoxT
public UnsupportedBlackBoxTestCase() { public UnsupportedBlackBoxTestCase() {
super("test/data/blackbox/unsupported"); super("test/data/blackbox/unsupported");
addTest(1, 0.0f); addTest(1, 0.0f);
addTest(0, 90.0f); addTest(1, 90.0f);
addTest(1, 180.0f); addTest(1, 180.0f);
addTest(0, 270.0f); addTest(1, 270.0f);
} }
} }

View file

@ -28,9 +28,9 @@ public final class QRCodeBlackBox2TestCase extends AbstractBlackBoxTestCase {
public QRCodeBlackBox2TestCase() { public QRCodeBlackBox2TestCase() {
super("test/data/blackbox/qrcode-2", new MultiFormatReader(), BarcodeFormat.QR_CODE); super("test/data/blackbox/qrcode-2", new MultiFormatReader(), BarcodeFormat.QR_CODE);
addTest(26, 26, 0.0f); addTest(26, 26, 0.0f);
addTest(24, 24, 90.0f); addTest(25, 25, 90.0f);
addTest(24, 24, 180.0f); addTest(24, 24, 180.0f);
addTest(22, 23, 270.0f); addTest(25, 25, 270.0f);
} }
} }