Take small advantage of "TRY_HARDER" in QR code decoder
authorsrowen <srowen@59b500cc-1b3d-0410-9834-0bbf25fbcc57>
Wed, 19 Mar 2008 17:10:58 +0000 (17:10 +0000)
committersrowen <srowen@59b500cc-1b3d-0410-9834-0bbf25fbcc57>
Wed, 19 Mar 2008 17:10:58 +0000 (17:10 +0000)
git-svn-id: http://zxing.googlecode.com/svn/trunk@299 59b500cc-1b3d-0410-9834-0bbf25fbcc57

core/src/com/google/zxing/qrcode/QRCodeReader.java
core/src/com/google/zxing/qrcode/detector/Detector.java
core/src/com/google/zxing/qrcode/detector/FinderPatternFinder.java

index 34fe999..c36fe87 100644 (file)
@@ -61,7 +61,7 @@ public final class QRCodeReader implements Reader {
       decoderResult = decoder.decode(bits);
       points = NO_POINTS;
     } else {
-      DetectorResult result = new Detector(image).detect();
+      DetectorResult result = new Detector(image).detect(hints);
       decoderResult = decoder.decode(result.getBits());
       points = result.getPoints();
     }
index fad8b06..37d3bd3 100644 (file)
@@ -25,6 +25,8 @@ import com.google.zxing.common.DetectorResult;
 import com.google.zxing.common.GridSampler;
 import com.google.zxing.qrcode.decoder.Version;
 
+import java.util.Hashtable;
+
 /**
  * <p>Encapsulates logic that can detect a QR Code in an image, even if the QR Code
  * is rotated or skewed, or partially obscured.</p>
@@ -46,6 +48,17 @@ public final class Detector {
    * @throws ReaderException if no QR Code can be found
    */
   public DetectorResult detect() throws ReaderException {
+    return detect(null);
+  }
+
+  /**
+   * <p>Detects a QR Code in an image, simply.</p>
+   *
+   * @param hints optional hints to detector
+   * @return {@link DetectorResult} encapsulating results of detecting a QR Code
+   * @throws ReaderException if no QR Code can be found
+   */
+  public DetectorResult detect(Hashtable hints) throws ReaderException {
 
     MonochromeBitmapSource image = this.image;
     if (!BlackPointEstimationMethod.TWO_D_SAMPLING.equals(image.getLastEstimationMethod())) {
@@ -53,7 +66,7 @@ public final class Detector {
     }
 
     FinderPatternFinder finder = new FinderPatternFinder(image);
-    FinderPatternInfo info = finder.find();
+    FinderPatternInfo info = finder.find(hints);
 
     FinderPattern topLeft = info.getTopLeft();
     FinderPattern topRight = info.getTopRight();
index 91f8473..4bc33d4 100755 (executable)
@@ -16,6 +16,7 @@
 \r
 package com.google.zxing.qrcode.detector;\r
 \r
+import com.google.zxing.DecodeHintType;\r
 import com.google.zxing.MonochromeBitmapSource;\r
 import com.google.zxing.ReaderException;\r
 import com.google.zxing.ResultPoint;\r
@@ -23,6 +24,7 @@ import com.google.zxing.common.BitArray;
 import com.google.zxing.common.Collections;\r
 import com.google.zxing.common.Comparator;\r
 \r
+import java.util.Hashtable;\r
 import java.util.Vector;\r
 \r
 /**\r
@@ -52,7 +54,8 @@ final class FinderPatternFinder {
     this.possibleCenters = new Vector();\r
   }\r
 \r
-  FinderPatternInfo find() throws ReaderException {\r
+  FinderPatternInfo find(Hashtable hints) throws ReaderException {\r
+    boolean tryHarder = hints != null && hints.containsKey(DecodeHintType.TRY_HARDER);\r
     int maxI = image.getHeight();\r
     int maxJ = image.getWidth();\r
     // We are looking for black/white/black/white/black modules in\r
@@ -61,7 +64,7 @@ final class FinderPatternFinder {
     boolean done = false;\r
     // We can afford to examine every few lines until we've started finding\r
     // the patterns\r
-    int iSkip = BIG_SKIP;\r
+    int iSkip = tryHarder ? 1 : BIG_SKIP;\r
     for (int i = iSkip - 1; i < maxI && !done; i += iSkip) {\r
       // Get a row of black/white values\r
       BitArray blackRow = image.getBlackRow(i, null, 0, maxJ);\r