/// <summary> /// Locates and decodes a Data Matrix code in an image. /// </summary> /// <param name="image">image of barcode to decode</param> /// <param name="hints">passed as a {@link java.util.Hashtable} from {@link com.google.zxing.DecodeHintType} /// to arbitrary data. The /// meaning of the data depends upon the hint type. The implementation may or may not do /// anything with these hints.</param> /// <returns> /// String which the barcode encodes /// </returns> public Result decode(BinaryBitmap image, IDictionary<DecodeHintType, object> hints) { var blackmatrix = image.BlackMatrix; if (blackmatrix == null) return null; Detector detector = new Detector(blackmatrix); ResultPoint[] points = null; DecoderResult decoderResult = null; var detectorResult = detector.detect(false); if (detectorResult != null) { points = detectorResult.Points; decoderResult = new Decoder().decode(detectorResult); } if (decoderResult == null) { detectorResult = detector.detect(true); if (detectorResult == null) return null; points = detectorResult.Points; decoderResult = new Decoder().decode(detectorResult); if (decoderResult == null) return null; } if (hints != null && hints.ContainsKey(DecodeHintType.NEED_RESULT_POINT_CALLBACK)) { var rpcb = (ResultPointCallback)hints[DecodeHintType.NEED_RESULT_POINT_CALLBACK]; if (rpcb != null) { foreach (var point in points) { rpcb(point); } } } var result = new Result(decoderResult.Text, decoderResult.RawBytes, points, BarcodeFormat.AZTEC); IList<byte[]> byteSegments = decoderResult.ByteSegments; if (byteSegments != null) { result.putMetadata(ResultMetadataType.BYTE_SEGMENTS, byteSegments); } var ecLevel = decoderResult.ECLevel; if (ecLevel != null) { result.putMetadata(ResultMetadataType.ERROR_CORRECTION_LEVEL, ecLevel); } result.putMetadata(ResultMetadataType.AZTEC_EXTRA_METADATA, new AztecResultMetadata(detectorResult.Compact, detectorResult.NbDatablocks, detectorResult.NbLayers)); return result; }
/// <summary> /// Locates and decodes a Data Matrix code in an image. /// </summary> /// <param name="image">image of barcode to decode</param> /// <param name="hints">passed as a {@link java.util.Hashtable} from {@link com.google.zxing.DecodeHintType} /// to arbitrary data. The /// meaning of the data depends upon the hint type. The implementation may or may not do /// anything with these hints.</param> /// <returns> /// String which the barcode encodes /// </returns> public Result Decode(BinaryBitmap image, IDictionary<DecodeHintType, object> hints) { var blackmatrix = image.BlackMatrix; if (blackmatrix == null) return null; AztecDetectorResult detectorResult = new Detector(blackmatrix).detect(); if (detectorResult == null) return null; ResultPoint[] points = detectorResult.Points; if (hints != null && hints.ContainsKey(DecodeHintType.NEED_RESULT_POINT_CALLBACK)) { var rpcb = (ResultPointCallback)hints[DecodeHintType.NEED_RESULT_POINT_CALLBACK]; if (rpcb != null) { foreach (var point in points) { rpcb(point); } } } DecoderResult decoderResult = new Internal.Decoder().decode(detectorResult); if (decoderResult == null) return null; Result result = new Result(decoderResult.Text, decoderResult.RawBytes, points, BarcodeFormat.AZTEC); IList<byte[]> byteSegments = decoderResult.ByteSegments; if (byteSegments != null) { result.putMetadata(ResultMetadataType.BYTE_SEGMENTS, byteSegments); } var ecLevel = decoderResult.ECLevel; if (ecLevel != null) { result.putMetadata(ResultMetadataType.ERROR_CORRECTION_LEVEL, ecLevel); } return result; }