using System; using HDL_ON_iOS; using Shared; using ZXing.Mobile; namespace HDL_ON { public class Scan { public Scan() { } static MobileBarcodeScanner scanner; public static async void OpenScan(Action action) { string cancel = "取消"; string flashText = ""; string titleText = "二维码扫描"; if (Language.CurrentLanguage != "Chinese") { cancel = "Cancel"; flashText = ""; titleText = "Scan"; } if (scanner == null) { var mZXingOverlayView = new ZXingOverlayView(cancel, flashText, titleText); scanner = new MobileBarcodeScanner(AppDelegate.rootViewController) { FlashButtonText = flashText, TopText = titleText, BottomText = "", CancelButtonText = cancel }; scanner.UseCustomOverlay = true; scanner.CustomOverlay = mZXingOverlayView; var bOn = false; mZXingOverlayView.OnCancel += () => { scanner?.Cancel(); }; mZXingOverlayView.OnTorch += () => { bOn = !bOn; scanner?.Torch(bOn); }; } var result = await scanner.Scan(); if (result != null) action?.Invoke(result.Text); else 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 uiImage = barcodeWriter.Write(text); var data = uiImage.AsJPEG(); var resultBytes = new byte[data.Length]; System.Runtime.InteropServices.Marshal.Copy(data.Bytes, resultBytes, 0, resultBytes.Length); return resultBytes; } //public static void OpenScan(Action action) //{ // var scanner = new MobileBarcodeScanner(BaseViewController.Instance) { }; // // 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, (obj) => { // scanner.Cancel(); // if (action != null) // { // action(obj.Text); // } // }); //} } }