From: srowen Date: Tue, 18 Dec 2007 21:45:44 +0000 (+0000) Subject: Improve correctness of black-run logic in case where patterns are very close to edge X-Git-Url: http://git.rot13.org/?p=zxing.git;a=commitdiff_plain;h=8a18f57147f156b21a6edd411f2577034182690b Improve correctness of black-run logic in case where patterns are very close to edge git-svn-id: http://zxing.googlecode.com/svn/trunk@124 59b500cc-1b3d-0410-9834-0bbf25fbcc57 --- diff --git a/core/src/com/google/zxing/qrcode/detector/Detector.java b/core/src/com/google/zxing/qrcode/detector/Detector.java index 49c255c6..3f20bdbe 100644 --- a/core/src/com/google/zxing/qrcode/detector/Detector.java +++ b/core/src/com/google/zxing/qrcode/detector/Detector.java @@ -172,8 +172,23 @@ public final class Detector { * of another point (another finder pattern center), and in the opposite direction too.

*/ private float sizeOfBlackWhiteBlackRunBothWays(int fromX, int fromY, int toX, int toY) { + float result = sizeOfBlackWhiteBlackRun(fromX, fromY, toX, toY); - result += sizeOfBlackWhiteBlackRun(fromX, fromY, fromX - (toX - fromX), fromY - (toY - fromY)); + + // Now count other way -- don't run off image though of course + int otherToX = fromX - (toX - fromX); + if (otherToX < 0) { + otherToX = 0; + } else if (otherToX >= image.getWidth()) { + otherToX = image.getWidth(); + } + int otherToY = fromY - (toY - fromY); + if (otherToY < 0) { + otherToY = 0; + } else if (otherToY >= image.getHeight()) { + otherToY = image.getHeight(); + } + result += sizeOfBlackWhiteBlackRun(fromX, fromY, otherToX, otherToY); return result - 1.0f; // -1 because we counted the middle pixel twice } @@ -229,8 +244,9 @@ public final class Detector { error -= dx; } } - // Hmm, couldn't find all of what we wanted -- don't know - return Float.NaN; + int diffX = toX - fromX; + int diffY = toY - fromY; + return (float) Math.sqrt((double) (diffX * diffX + diffY * diffY)); } /**