wxr
2020-09-30 ea318e20d9a513bfae81a9203cef4bca0fc23c2c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
using System;
using System.IO;
using Shared;
using ZXing.Mobile;
 
namespace HDL_ON
{
    public class Scan
    {
        public Scan()
        {
        }
        static MobileBarcodeScanner scanner;
        public static void OpenScan(Action<string> action)
        {
            string cancel = "取消";
            string flashText = "";
            string titleText = "二维码扫描";
            if (Language.CurrentLanguage != "Chinese")
            {
                cancel = "Cancel";
                flashText = "";
                titleText = "Scan";
            }
 
            ((BaseActivity)Shared.Application.Activity).SetCamera(async (obj) =>
            {
                if (obj)
                {
                    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
                        };
 
                        mZXingCustomScanView.OnCancel += () =>
                        {
 
                            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(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("");
        //        }
        //    });
        //}
    }
}