xamarin - 如何用zxing条码扫描库解码EAN128条码
问题描述
我正在尝试使用 zxing 条码扫描库读取 EAN128 条码。而且我在这样的 Xamarin 共享项目中使用它……</p>
private async void OnButtonForBarcodeReadPressed(object sender, EventArgs e)
{
ZXingScannerPage scannerPage = new ZXingScannerPage();
scannerPage.OnScanResult += (result) =>
{
scannerPage.IsScanning = false;
var rawBytes = result.RawBytes;
var barcodeType = result.BarcodeFormat.ToString();
var barcodeText = result.Text;
};
}
问题是结果的Text属性不包含特殊字符。
我注意到结果的属性RawBytes(这是一个字节数组)在每个特殊字符的正确位置都有一个字节 102,但我似乎无法理解其余字节是如何计算的。
这是一个例子。我生成了这个 EAN128 条形码(21)500600(11)201201。我是使用在线条形码生成器完成的,所以我确信在正确的位置有一个特殊字符!当我用 zxing 扫描它时,结果的Text属性是“2150060011201201”,长度正好是 16 个字符,因此不包含特殊字符。这是RawBytes属性中字节数组的图像。正如您所看到的,在每个应用程序标识符之前都有一个字节 102。但其余的似乎有点。当你在条形码中添加一个字母时,它会更加混乱。
有没有办法从属性RawBytes获取带有特殊字符的正确条形码文本,或者配置 zxing 以使Text属性包含特殊字符?
解决方案
您需要设置 ScanningOptions 的BarcodeFormat。
var options = new ZXing.Mobile.MobileBarcodeScanningOptions
{
PossibleFormats = new List<ZXing.BarcodeFormat>() {
ZXing.BarcodeFormat.CODE_128
},
ryHarder = true,
AssumeGS1 = true,
AutoRotate = true,
};