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("");
|
// }
|
// });
|
//}
|
}
|
}
|