| | |
| | | using System; |
| | | using System.IO; |
| | | using Shared; |
| | | using ZXing.Mobile; |
| | | |
| | |
| | | public Scan() |
| | | { |
| | | } |
| | | |
| | | static MobileBarcodeScanner scanner; |
| | | public static void OpenScan(Action<string> action) |
| | | { |
| | | (Shared.Application.Activity as BaseActivity).SetCamera((obj) => { |
| | | string cancel = "取消"; |
| | | string flashText = ""; |
| | | string titleText = "二维码扫描"; |
| | | if (Language.CurrentLanguage != "Chinese") |
| | | { |
| | | cancel = "Cancel"; |
| | | flashText = ""; |
| | | titleText = "Scan"; |
| | | } |
| | | |
| | | ((BaseActivity)Shared.Application.Activity).SetCamera(async (obj) => |
| | | { |
| | | if (obj) |
| | | { |
| | | var scanner = new MobileBarcodeScanner { }; |
| | | // ZXing |
| | | scanner.UseCustomOverlay = false; |
| | | // 底部两个按钮文字 |
| | | scanner.FlashButtonText = "";//"识别"; |
| | | scanner.CancelButtonText = Language.CurrentLanguage == "Chinese" ? "取消" : "Cancel"; |
| | | if (scanner == null) |
| | | { |
| | | MobileBarcodeScanner.Initialize(Shared.Application.Activity.Application); |
| | | var mZXingCustomScanView = new ZXingCustomScanView(Shared.Application.Activity.Application); |
| | | mZXingCustomScanView.cancelTextView.Text = cancel; |
| | | mZXingCustomScanView.flashTextView.Text = flashText; |
| | | mZXingCustomScanView.titleTextView.Text = titleText; |
| | | var bOn = false; |
| | | scanner = new ZXing.Mobile.MobileBarcodeScanner() |
| | | { |
| | | UseCustomOverlay = true, |
| | | CustomOverlay = mZXingCustomScanView |
| | | }; |
| | | |
| | | // 方框上,下方文字提示 |
| | | scanner.TopText = Language.CurrentLanguage == "Chinese" ? "请将条形码对准方框内" : "Please align the bar code in the scan box"; |
| | | scanner.BottomText = ""; |
| | | mZXingCustomScanView.OnCancel += () => |
| | | { |
| | | |
| | | // 延时三秒自动扫秒 |
| | | var opt = new MobileBarcodeScanningOptions(); |
| | | opt.DelayBetweenContinuousScans = 3000; |
| | | scanner.ScanContinuously(opt, (obj2) => { |
| | | scanner.Cancel(); |
| | | action?.Invoke(obj2.Text); |
| | | }); |
| | | scanner?.Cancel(); |
| | | }; |
| | | |
| | | mZXingCustomScanView.OnTorch += () => |
| | | { |
| | | bOn = !bOn; |
| | | scanner?.Torch(bOn); |
| | | }; |
| | | } |
| | | |
| | | var result = await scanner.Scan(); |
| | | |
| | | if (result != null) |
| | | action?.Invoke(result.Text); |
| | | else |
| | | action?.Invoke(null); |
| | | |
| | | } |
| | | else |
| | | { |
| | | action?.Invoke(""); |
| | | action?.Invoke(null); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | public static byte[] BytesFromText(string text, int width = 300, int height = 300) |
| | | { |
| | | var barcodeWriter = new ZXing.Mobile.BarcodeWriter |
| | | { |
| | | Format = ZXing.BarcodeFormat.QR_CODE, |
| | | Options = new ZXing.Common.EncodingOptions |
| | | { |
| | | Width = width, |
| | | Height = height, |
| | | Margin = 0 |
| | | } |
| | | }; |
| | | |
| | | barcodeWriter.Renderer = new ZXing.Mobile.BitmapRenderer(); |
| | | var bitmap = barcodeWriter.Write(text); |
| | | using (var stream = new MemoryStream()) |
| | | { |
| | | bitmap.Compress(Android.Graphics.Bitmap.CompressFormat.Png, 100, stream); // this is the diff between iOS and Android |
| | | stream.Position = 0; |
| | | return stream.ToArray(); |
| | | } |
| | | } |
| | | |
| | | //public static void OpenScan1(Action<string> action) |
| | | //{ |
| | | // (Shared.Application.Activity as BaseActivity).SetCamera((obj) => { |
| | | // if (obj) |
| | | // { |
| | | // var scanner = new MobileBarcodeScanner { }; |
| | | // // ZXing |
| | | // scanner.UseCustomOverlay = false; |
| | | // // 底部两个按钮文字 |
| | | // scanner.FlashButtonText = "";//"识别"; |
| | | // scanner.CancelButtonText = Language.CurrentLanguage == "Chinese" ? "取消" : "Cancel"; |
| | | |
| | | // // 方框上,下方文字提示 |
| | | // scanner.TopText = Language.CurrentLanguage == "Chinese" ? "请将条形码对准方框内" : "Please align the bar code in the scan box"; |
| | | // scanner.BottomText = ""; |
| | | |
| | | // // 延时三秒自动扫秒 |
| | | // var opt = new MobileBarcodeScanningOptions(); |
| | | // opt.DelayBetweenContinuousScans = 3000; |
| | | // scanner.ScanContinuously(opt, (obj2) => { |
| | | // scanner.Cancel(); |
| | | // action?.Invoke(obj2.Text); |
| | | // }); |
| | | // } |
| | | // else |
| | | // { |
| | | // action?.Invoke(""); |
| | | // } |
| | | // }); |
| | | //} |
| | | } |
| | | } |