Xamarin.Forms ZXing BarcodeReaderGeneric在扫描库中的图像时返回null



我正在用Xamarin开发条形码阅读器。表格。我正在尝试在安卓设备上扫描图像。

首先,我从Xamarin的图库中选择图像。Essentials MediaPicker,从这个图像的路径中,我得到了一个带有Dependency类的RGBLuminance。

然后,我尝试使用ZXingBarcodeReaderGeneric类的decode((方法来解码此RGBLuminance。但是,结果总是返回null。

这是我的演示项目:https://onedrive.live.com/?authkey=%21AFLjjM91wgZkBGU&cid=58BE2C2C3447FFA2&id=58BE2C3447FFA2%221829&parId=根&动作=定位

ViewModel类中的命令:

public ICommand PickCommand => new Command(PickImage);
private async void PickImage()
{
var pickResult = await MediaPicker.PickPhotoAsync(new MediaPickerOptions
{
Title = "Select a barcode."
});
var path = pickResult.FullPath;
var RGBLuminance = DependencyService.Get<ILuminance>().GetRGBLuminanceSource(path);
var reader = new BarcodeReaderGeneric();
var result = reader.Decode(RGBLuminance); // result always null.
}

安卓系统中依赖类的方法:

public RGBLuminanceSource GetRGBLuminanceSource(string imagePath)
{

if (File.Exists(imagePath))
{
Android.Graphics.Bitmap bitmap = BitmapFactory.DecodeFile(imagePath);
List<byte> rgbBytesList = new List<byte>();
for (int y = 0; y < bitmap.Height; y++)
{
for (int x = 0; x < bitmap.Width; x++)
{
var c = new Android.Graphics.Color(bitmap.GetPixel(x, y));
rgbBytesList.AddRange(new[] { c.A, c.R, c.G, c.B });
}
}
byte[] rgbBytes = rgbBytesList.ToArray();
return new RGBLuminanceSource(rgbBytes, bitmap.Height, bitmap.Width, RGBLuminanceSource.BitmapFormat.RGB32);
}
return null;
}

您应该更改行

return new RGBLuminanceSource(rgbBytes, bitmap.Height, bitmap.Width, RGBLuminanceSource.BitmapFormat.RGB32);

return new RGBLuminanceSource(rgbBytes, bitmap.Width, bitmap.Height, RGBLuminanceSource.BitmapFormat.RGB32);

为了更准确的RGB格式,你应该

  • 更改RGBLuminanceSource。位图格式。RGB32至RGB光源。位图格式。ARGB32
  • 或更改rgbBytesList。AddRange(new[]{c.A,c.R,c.G,c.B}(;到rgbBytesList。AddRange(new[]{c.R,c.G,c.B,c.A}(

你能试试这些照片吗?

图片一图二

相关内容

  • 没有找到相关文章

最新更新