X-Git-Url: http://git.rot13.org/?p=zxing.git;a=blobdiff_plain;f=core%2Fsrc%2Fcom%2Fgoogle%2Fzxing%2FMultiFormatReader.java;h=9784760c90b3aa6b3808e186e37d6d4e92a18a3c;hp=1017d4f4e22ee7cb2316df601f9741b27f435269;hb=f2200f8ebe0f0eef72b8b916d085506a94c774b0;hpb=91b25e76789a4ca9c631d5d786043f06d9e1bf04 diff --git a/core/src/com/google/zxing/MultiFormatReader.java b/core/src/com/google/zxing/MultiFormatReader.java index 1017d4f4..9784760c 100644 --- a/core/src/com/google/zxing/MultiFormatReader.java +++ b/core/src/com/google/zxing/MultiFormatReader.java @@ -16,7 +16,9 @@ package com.google.zxing; +import com.google.zxing.datamatrix.DataMatrixReader; import com.google.zxing.oned.MultiFormatOneDReader; +import com.google.zxing.pdf417.PDF417Reader; import com.google.zxing.qrcode.QRCodeReader; import java.util.Hashtable; @@ -27,7 +29,8 @@ import java.util.Vector; * By default it attempts to decode all barcode formats that the library supports. Optionally, you * can provide a hints object to request different behavior, for example only decoding QR codes. * - * @author srowen@google.com (Sean Owen), dswitkin@google.com (Daniel Switkin) + * @author Sean Owen + * @author dswitkin@google.com (Daniel Switkin) */ public final class MultiFormatReader implements Reader { @@ -35,15 +38,15 @@ public final class MultiFormatReader implements Reader { private Vector readers; /** - * This version of decode honors the intent of Reader.decode(MonochromeBitmapSource) in that it + * This version of decode honors the intent of Reader.decode(BinaryBitmap) in that it * passes null as a hint to the decoders. However, that makes it inefficient to call repeatedly. * Use setHints() followed by decodeWithState() for continuous scan applications. * * @param image The pixel data to decode * @return The contents of the image - * @throws ReaderException Any errors which occurred + * @throws NotFoundException Any errors which occurred */ - public Result decode(MonochromeBitmapSource image) throws ReaderException { + public Result decode(BinaryBitmap image) throws NotFoundException { setHints(null); return decodeInternal(image); } @@ -54,9 +57,9 @@ public final class MultiFormatReader implements Reader { * @param image The pixel data to decode * @param hints The hints to use, clearing the previous state. * @return The contents of the image - * @throws ReaderException Any errors which occurred + * @throws NotFoundException Any errors which occurred */ - public Result decode(MonochromeBitmapSource image, Hashtable hints) throws ReaderException { + public Result decode(BinaryBitmap image, Hashtable hints) throws NotFoundException { setHints(hints); return decodeInternal(image); } @@ -67,9 +70,9 @@ public final class MultiFormatReader implements Reader { * * @param image The pixel data to decode * @return The contents of the image - * @throws ReaderException Any errors which occurred + * @throws NotFoundException Any errors which occurred */ - public Result decodeWithState(MonochromeBitmapSource image) throws ReaderException { + public Result decodeWithState(BinaryBitmap image) throws NotFoundException { // Make sure to set up the default state so we don't crash if (readers == null) { setHints(null); @@ -88,27 +91,34 @@ public final class MultiFormatReader implements Reader { this.hints = hints; boolean tryHarder = hints != null && hints.containsKey(DecodeHintType.TRY_HARDER); - Vector possibleFormats = hints == null ? null : (Vector) hints.get(DecodeHintType.POSSIBLE_FORMATS); + Vector formats = hints == null ? null : (Vector) hints.get(DecodeHintType.POSSIBLE_FORMATS); readers = new Vector(); - if (possibleFormats != null) { + if (formats != null) { boolean addOneDReader = - possibleFormats.contains(BarcodeFormat.UPC_A) || - possibleFormats.contains(BarcodeFormat.UPC_E) || - possibleFormats.contains(BarcodeFormat.EAN_13) || - possibleFormats.contains(BarcodeFormat.EAN_8) || - possibleFormats.contains(BarcodeFormat.CODE_39) || - possibleFormats.contains(BarcodeFormat.CODE_128); + formats.contains(BarcodeFormat.UPC_A) || + formats.contains(BarcodeFormat.UPC_E) || + formats.contains(BarcodeFormat.EAN_13) || + formats.contains(BarcodeFormat.EAN_8) || + //formats.contains(BarcodeFormat.CODABAR) || + formats.contains(BarcodeFormat.CODE_39) || + formats.contains(BarcodeFormat.CODE_93) || + formats.contains(BarcodeFormat.CODE_128) || + formats.contains(BarcodeFormat.ITF) || + formats.contains(BarcodeFormat.RSS14) || + formats.contains(BarcodeFormat.RSS_EXPANDED); // Put 1D readers upfront in "normal" mode if (addOneDReader && !tryHarder) { readers.addElement(new MultiFormatOneDReader(hints)); } - if (possibleFormats.contains(BarcodeFormat.QR_CODE)) { + if (formats.contains(BarcodeFormat.QR_CODE)) { readers.addElement(new QRCodeReader()); } - // TODO re-enable once Data Matrix is ready - //if (possibleFormats.contains(BarcodeFormat.DATAMATRIX)) { - // readers.addElement(new DataMatrixReader()); - //} + if (formats.contains(BarcodeFormat.DATAMATRIX)) { + readers.addElement(new DataMatrixReader()); + } + if (formats.contains(BarcodeFormat.PDF417)) { + readers.addElement(new PDF417Reader()); + } // At end in "try harder" mode if (addOneDReader && tryHarder) { readers.addElement(new MultiFormatOneDReader(hints)); @@ -119,15 +129,28 @@ public final class MultiFormatReader implements Reader { readers.addElement(new MultiFormatOneDReader(hints)); } readers.addElement(new QRCodeReader()); + // TODO re-enable once Data Matrix is ready // readers.addElement(new DataMatrixReader()); + + // TODO: Enable once PDF417 has passed QA + //readers.addElement(new PDF417Reader()); + if (tryHarder) { readers.addElement(new MultiFormatOneDReader(hints)); } } } - private Result decodeInternal(MonochromeBitmapSource image) throws ReaderException { + public void reset() { + int size = readers.size(); + for (int i = 0; i < size; i++) { + Reader reader = (Reader) readers.elementAt(i); + reader.reset(); + } + } + + private Result decodeInternal(BinaryBitmap image) throws NotFoundException { int size = readers.size(); for (int i = 0; i < size; i++) { Reader reader = (Reader) readers.elementAt(i); @@ -138,7 +161,7 @@ public final class MultiFormatReader implements Reader { } } - throw ReaderException.getInstance(); + throw NotFoundException.getNotFoundInstance(); } }