Issue 511
authorsrowen <srowen@59b500cc-1b3d-0410-9834-0bbf25fbcc57>
Thu, 12 Aug 2010 20:18:08 +0000 (20:18 +0000)
committersrowen <srowen@59b500cc-1b3d-0410-9834-0bbf25fbcc57>
Thu, 12 Aug 2010 20:18:08 +0000 (20:18 +0000)
git-svn-id: http://zxing.googlecode.com/svn/trunk@1522 59b500cc-1b3d-0410-9834-0bbf25fbcc57

core/src/com/google/zxing/qrcode/detector/Detector.java
core/test/data/blackbox/qrcode-2/32.gif [new file with mode: 0644]
core/test/data/blackbox/qrcode-2/32.txt [new file with mode: 0644]
core/test/src/com/google/zxing/qrcode/QRCodeBlackBox2TestCase.java
cpp/core/src/zxing/qrcode/detector/Detector.cpp

index 82d50a6..b9d7f2c 100644 (file)
@@ -266,9 +266,9 @@ public class Detector {
    if (otherToX < 0) {
      scale = (float) fromX / (float) (fromX - otherToX);
      otherToX = 0;
    if (otherToX < 0) {
      scale = (float) fromX / (float) (fromX - otherToX);
      otherToX = 0;
-   } else if (otherToX >= image.getWidth()) {
-     scale = (float) (image.getWidth() - 1 - fromX) / (float) (otherToX - fromX);
-     otherToX = image.getWidth() - 1;
+   } else if (otherToX > image.getWidth()) {
+     scale = (float) (image.getWidth() - fromX) / (float) (otherToX - fromX);
+     otherToX = image.getWidth();
    }
    int otherToY = (int) (fromY - (toY - fromY) * scale);
 
    }
    int otherToY = (int) (fromY - (toY - fromY) * scale);
 
@@ -276,14 +276,14 @@ public class Detector {
    if (otherToY < 0) {
      scale = (float) fromY / (float) (fromY - otherToY);
      otherToY = 0;
    if (otherToY < 0) {
      scale = (float) fromY / (float) (fromY - otherToY);
      otherToY = 0;
-   } else if (otherToY >= image.getHeight()) {
-     scale = (float) (image.getHeight() - 1 - fromY) / (float) (otherToY - fromY);
-     otherToY = image.getHeight() - 1;
+   } else if (otherToY > image.getHeight()) {
+     scale = (float) (image.getHeight() - fromY) / (float) (otherToY - fromY);
+     otherToY = image.getHeight();
    }
    otherToX = (int) (fromX + (otherToX - fromX) * scale);
 
    result += sizeOfBlackWhiteBlackRun(fromX, fromY, otherToX, otherToY);
    }
    otherToX = (int) (fromX + (otherToX - fromX) * scale);
 
    result += sizeOfBlackWhiteBlackRun(fromX, fromY, otherToX, otherToY);
-   return result - 1.0f; // -1 because we counted the middle pixel twice
+   return result;
  }
 
   /**
  }
 
   /**
@@ -330,6 +330,9 @@ public class Detector {
       if (state == 3) { // Found black, white, black, and stumbled back onto white; done
         int diffX = x - fromX;
         int diffY = y - fromY;
       if (state == 3) { // Found black, white, black, and stumbled back onto white; done
         int diffX = x - fromX;
         int diffY = y - fromY;
+        if (xstep < 0) {
+            diffX++;
+        }
         return (float) Math.sqrt((double) (diffX * diffX + diffY * diffY));
       }
       error += dy;
         return (float) Math.sqrt((double) (diffX * diffX + diffY * diffY));
       }
       error += dy;
diff --git a/core/test/data/blackbox/qrcode-2/32.gif b/core/test/data/blackbox/qrcode-2/32.gif
new file mode 100644 (file)
index 0000000..7bdbc76
Binary files /dev/null and b/core/test/data/blackbox/qrcode-2/32.gif differ
diff --git a/core/test/data/blackbox/qrcode-2/32.txt b/core/test/data/blackbox/qrcode-2/32.txt
new file mode 100644 (file)
index 0000000..2b574b7
--- /dev/null
@@ -0,0 +1,12 @@
+BEGIN:VCARD\r
+N:Kennedy;Steve\r
+TEL:+44 (0)7775 755503\r
+ADR;HOME:;;Flat 2, 43 Howitt Road, Belsize Park;London;;NW34LU;UK\r
+ORG:NetTek Ltd;\r
+TITLE:Consultant\r
+EMAIL:steve@nettek.co.uk\r
+URL:www.nettek.co.uk\r
+EMAIL;IM:MSN:steve@gbnet.net\r
+NOTE:Testing 1 2 3\r
+BDAY:19611105\r
+END:VCARD
\ No newline at end of file
index 80bac2f..8bee5cd 100644 (file)
@@ -27,10 +27,10 @@ public final class QRCodeBlackBox2TestCase extends AbstractBlackBoxTestCase {
 
   public QRCodeBlackBox2TestCase() {
     super("test/data/blackbox/qrcode-2", new MultiFormatReader(), BarcodeFormat.QR_CODE);
 
   public QRCodeBlackBox2TestCase() {
     super("test/data/blackbox/qrcode-2", new MultiFormatReader(), BarcodeFormat.QR_CODE);
-    addTest(23, 23, 0.0f);
-    addTest(21, 21, 90.0f);
-    addTest(23, 23, 180.0f);
-    addTest(20, 21, 270.0f);
+    addTest(26, 26, 0.0f);
+    addTest(24, 24, 90.0f);
+    addTest(24, 24, 180.0f);
+    addTest(22, 23, 270.0f);
   }
 
 }
   }
 
 }
index 6c32558..eef3095 100644 (file)
@@ -185,9 +185,9 @@ float Detector::sizeOfBlackWhiteBlackRunBothWays(int fromX, int fromY, int toX,
    if (otherToX < 0) {\r
      scale = (float) fromX / (float) (fromX - otherToX);\r
      otherToX = 0;\r
    if (otherToX < 0) {\r
      scale = (float) fromX / (float) (fromX - otherToX);\r
      otherToX = 0;\r
-   } else if (otherToX >= (int)image_->getWidth()) {\r
-     scale = (float) (image_->getWidth() - 1 - fromX) / (float) (otherToX - fromX);\r
-     otherToX = image_->getWidth() - 1;\r
+   } else if (otherToX > (int)image_->getWidth()) {\r
+     scale = (float) (image_->getWidth() - fromX) / (float) (otherToX - fromX);\r
+     otherToX = image_->getWidth();\r
    }\r
    int otherToY = (int) (fromY - (toY - fromY) * scale);\r
 \r
    }\r
    int otherToY = (int) (fromY - (toY - fromY) * scale);\r
 \r
@@ -195,14 +195,14 @@ float Detector::sizeOfBlackWhiteBlackRunBothWays(int fromX, int fromY, int toX,
    if (otherToY < 0) {\r
      scale = (float) fromY / (float) (fromY - otherToY);\r
      otherToY = 0;\r
    if (otherToY < 0) {\r
      scale = (float) fromY / (float) (fromY - otherToY);\r
      otherToY = 0;\r
-   } else if (otherToY >= (int)image_->getHeight()) {\r
-     scale = (float) (image_->getHeight() - 1 - fromY) / (float) (otherToY - fromY);\r
-     otherToY = image_->getHeight() - 1;\r
+   } else if (otherToY > (int)image_->getHeight()) {\r
+     scale = (float) (image_->getHeight() - fromY) / (float) (otherToY - fromY);\r
+     otherToY = image_->getHeight();\r
    }\r
    otherToX = (int) (fromX + (otherToX - fromX) * scale);\r
 \r
    result += sizeOfBlackWhiteBlackRun(fromX, fromY, otherToX, otherToY);\r
    }\r
    otherToX = (int) (fromX + (otherToX - fromX) * scale);\r
 \r
    result += sizeOfBlackWhiteBlackRun(fromX, fromY, otherToX, otherToY);\r
-   return result - 1.0f; // -1 because we counted the middle pixel twice\r
+   return result;\r
 }\r
 \r
 float Detector::sizeOfBlackWhiteBlackRun(int fromX, int fromY, int toX, int toY) {\r
 }\r
 \r
 float Detector::sizeOfBlackWhiteBlackRun(int fromX, int fromY, int toX, int toY) {\r
@@ -241,6 +241,9 @@ float Detector::sizeOfBlackWhiteBlackRun(int fromX, int fromY, int toX, int toY)
     if (state == 3) { // Found black, white, black, and stumbled back onto white; done\r
       int diffX = x - fromX;\r
       int diffY = y - fromY;\r
     if (state == 3) { // Found black, white, black, and stumbled back onto white; done\r
       int diffX = x - fromX;\r
       int diffY = y - fromY;\r
+      if (xstep < 0) {\r
+          diffX++;\r
+      }\r
       return (float)sqrt((double)(diffX * diffX + diffY * diffY));\r
     }\r
     error += dy;\r
       return (float)sqrt((double)(diffX * diffX + diffY * diffY));\r
     }\r
     error += dy;\r