X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=android%2Fsrc%2Fcom%2Fgoogle%2Fzxing%2Fclient%2Fandroid%2FDecodeThread.java;h=b383b4760024b99c0479ee43151bd5b5b9c4110b;hb=608fe313d82bb79f0f5a96856697bdfb4a6305d3;hp=1c36e84cbc541d7aa40177e2b8fd2d1588f86503;hpb=acdc884c319f62186da2f9dfa42ce8dc27e79696;p=zxing.git diff --git a/android/src/com/google/zxing/client/android/DecodeThread.java b/android/src/com/google/zxing/client/android/DecodeThread.java index 1c36e84c..b383b476 100755 --- a/android/src/com/google/zxing/client/android/DecodeThread.java +++ b/android/src/com/google/zxing/client/android/DecodeThread.java @@ -22,7 +22,8 @@ import com.google.zxing.DecodeHintType; import com.google.zxing.MultiFormatReader; import com.google.zxing.ReaderException; import com.google.zxing.Result; -import com.google.zxing.common.GlobalHistogramBinarizer; +import com.google.zxing.ResultPointCallback; +import com.google.zxing.common.HybridBinarizer; import android.content.SharedPreferences; import android.os.Bundle; @@ -47,10 +48,12 @@ final class DecodeThread extends Thread { private Handler handler; private final CaptureActivity activity; private final MultiFormatReader multiFormatReader; + private final ResultPointCallback resultPointCallback; - DecodeThread(CaptureActivity activity, String mode) { + DecodeThread(CaptureActivity activity, String mode, ResultPointCallback resultPointCallback) { this.activity = activity; multiFormatReader = new MultiFormatReader(); + this.resultPointCallback = resultPointCallback; // The prefs can't change while the thread is running, so pick them up once here. if (mode == null || mode.length() == 0) { @@ -101,39 +104,27 @@ final class DecodeThread extends Thread { } private void setDecodeProductMode() { - Hashtable hints = new Hashtable(3); - Vector vector = new Vector(4); - vector.addElement(BarcodeFormat.UPC_A); - vector.addElement(BarcodeFormat.UPC_E); - vector.addElement(BarcodeFormat.EAN_13); - vector.addElement(BarcodeFormat.EAN_8); - hints.put(DecodeHintType.POSSIBLE_FORMATS, vector); - multiFormatReader.setHints(hints); + doSetDecodeMode(BarcodeFormat.UPC_A, + BarcodeFormat.UPC_E, + BarcodeFormat.EAN_13, + BarcodeFormat.EAN_8); } /** * Select the 1D formats we want this client to decode by hand. */ private void setDecode1DMode() { - Hashtable hints = new Hashtable(3); - Vector vector = new Vector(7); - vector.addElement(BarcodeFormat.UPC_A); - vector.addElement(BarcodeFormat.UPC_E); - vector.addElement(BarcodeFormat.EAN_13); - vector.addElement(BarcodeFormat.EAN_8); - vector.addElement(BarcodeFormat.CODE_39); - vector.addElement(BarcodeFormat.CODE_128); - vector.addElement(BarcodeFormat.ITF); - hints.put(DecodeHintType.POSSIBLE_FORMATS, vector); - multiFormatReader.setHints(hints); + doSetDecodeMode(BarcodeFormat.UPC_A, + BarcodeFormat.UPC_E, + BarcodeFormat.EAN_13, + BarcodeFormat.EAN_8, + BarcodeFormat.CODE_39, + BarcodeFormat.CODE_128, + BarcodeFormat.ITF); } private void setDecodeQRMode() { - Hashtable hints = new Hashtable(3); - Vector vector = new Vector(1); - vector.addElement(BarcodeFormat.QR_CODE); - hints.put(DecodeHintType.POSSIBLE_FORMATS, vector); - multiFormatReader.setHints(hints); + doSetDecodeMode(BarcodeFormat.QR_CODE); } /** @@ -141,17 +132,24 @@ final class DecodeThread extends Thread { * explicitly set which formats are available. */ private void setDecodeAllMode() { + doSetDecodeMode(BarcodeFormat.UPC_A, + BarcodeFormat.UPC_E, + BarcodeFormat.EAN_13, + BarcodeFormat.EAN_8, + BarcodeFormat.CODE_39, + BarcodeFormat.CODE_128, + BarcodeFormat.ITF, + BarcodeFormat.QR_CODE); + } + + private void doSetDecodeMode(BarcodeFormat... formats) { Hashtable hints = new Hashtable(3); - Vector vector = new Vector(8); - vector.addElement(BarcodeFormat.UPC_A); - vector.addElement(BarcodeFormat.UPC_E); - vector.addElement(BarcodeFormat.EAN_13); - vector.addElement(BarcodeFormat.EAN_8); - vector.addElement(BarcodeFormat.CODE_39); - vector.addElement(BarcodeFormat.CODE_128); - vector.addElement(BarcodeFormat.ITF); - vector.addElement(BarcodeFormat.QR_CODE); + Vector vector = new Vector(formats.length); + for (BarcodeFormat format : formats) { + vector.addElement(format); + } hints.put(DecodeHintType.POSSIBLE_FORMATS, vector); + hints.put(DecodeHintType.NEED_RESULT_POINT_CALLBACK, resultPointCallback); multiFormatReader.setHints(hints); } @@ -167,7 +165,7 @@ final class DecodeThread extends Thread { long start = System.currentTimeMillis(); Result rawResult = null; PlanarYUVLuminanceSource source = CameraManager.get().buildLuminanceSource(data, width, height); - BinaryBitmap bitmap = new BinaryBitmap(new GlobalHistogramBinarizer(source)); + BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); try { rawResult = multiFormatReader.decodeWithState(bitmap); } catch (ReaderException re) {