如何解决Xamarin.Forms ZXing BarcodeReaderGeneric 在扫描图库中的图像时返回 null
我正在使用 Xamarin.Forms 开发条形码阅读器。我正在尝试在 Android 设备上扫描图像。
首先,我使用 Xamarin.Essentials MediaPicker 从图库中选择图像,然后从该图像的路径中获得具有 Dependency 类的 RGBluminance。
然后我尝试使用 ZXing BarcodeReaderGeneric 类的 Decode() 方法解码这个 RGBluminance。但是,结果总是返回 null。
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.
}
Android 中依赖类的方法:
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,RGBLuminanceSource.BitmapFormat.RGB32);
为了更准确地使用 RGB 格式,您应该
- 将 RGBLuminanceSource.BitmapFormat.RGB32 更改为 RGBLuminanceSource.BitmapFormat.ARGB32
- 或更改 rgbBytesList.AddRange(new[] { c.A,c.R,c.G,c.B });到 rgbBytesList.AddRange(new[] { c.R,c.B,c.A });
你可以试试这张照片吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。