From 2ad6bf1cb08ff6b695443359ff849a0134e6e699 Mon Sep 17 00:00:00 2001 From: srowen Date: Wed, 11 Jun 2008 18:12:41 +0000 Subject: [PATCH] Add sharpening filter to this implementation too git-svn-id: http://zxing.googlecode.com/svn/trunk@415 59b500cc-1b3d-0410-9834-0bbf25fbcc57 --- .../LCDUIImageMonochromeBitmapSource.java | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/javame/src/com/google/zxing/client/j2me/LCDUIImageMonochromeBitmapSource.java b/javame/src/com/google/zxing/client/j2me/LCDUIImageMonochromeBitmapSource.java index 266cebf1..f123abbb 100644 --- a/javame/src/com/google/zxing/client/j2me/LCDUIImageMonochromeBitmapSource.java +++ b/javame/src/com/google/zxing/client/j2me/LCDUIImageMonochromeBitmapSource.java @@ -62,9 +62,30 @@ public final class LCDUIImageMonochromeBitmapSource implements MonochromeBitmapS } else { row.clear(); } - for (int i = 0, offset = y * width + startX; i < getWidth; i++, offset++) { - if (computeRGBLuminance(rgbPixels[offset]) < blackPoint) { - row.set(i); + + // If the current decoder calculated the blackPoint based on one row, assume we're trying to + // decode a 1D barcode, and apply some sharpening. + // TODO: We may want to add a fifth parameter to request the amount of shapening to be done. + if (lastMethod.equals(BlackPointEstimationMethod.ROW_SAMPLING)) { + int offset = y * width + startX; + int left = computeRGBLuminance(rgbPixels[offset]); + offset++; + int center = computeRGBLuminance(rgbPixels[offset]); + for (int i = 1; i < getWidth - 1; i++, offset++) { + int right = computeRGBLuminance(rgbPixels[offset + 1]); + // Simple -1 4 -1 box filter with a weight of 2 + int luminance = ((center << 2) - left - right) >> 1; + if (luminance < blackPoint) { + row.set(i); + } + left = center; + center = right; + } + } else { + for (int i = 0, offset = y * width + startX; i < getWidth; i++, offset++) { + if (computeRGBLuminance(rgbPixels[offset]) < blackPoint) { + row.set(i); + } } } return row; -- 2.20.1