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

扫描库中的图像时,Xamarin.Forms ZXing BarcodeReaderGeneric返回null,xamarin,xamarin.forms,zxing,zxing.net,zxing.net.mobile,Xamarin,Xamarin.forms,Zxing,Zxing.net,Zxing.net.mobile,我正在用Xamarin.Forms开发条形码阅读器。我正试图在Android设备上扫描图像 首先,我使用Xamarin.Essentials MediaPicker从图库中选择图像,并从该图像的路径中获得一个带有依赖类的RGBLuminance 然后我尝试用ZXingBarcodeReaderGeneric类的decode()方法来解码这个RGBLuminance。但是,结果总是返回null 这是我的演示项目: ViewModel类中的命令: public ICommand PickComman

我正在用Xamarin.Forms开发条形码阅读器。我正试图在Android设备上扫描图像

首先,我使用Xamarin.Essentials MediaPicker从图库中选择图像,并从该图像的路径中获得一个带有依赖类的RGBLuminance

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

这是我的演示项目:

ViewModel类中的命令:

public ICommand PickCommand=>new命令(PickImage);
私有异步void PickImage()
{
var pickResult=wait MediaPicker.PickPhotoAsync(新的MediaPickerOptions
{
Title=“选择条形码。”
});
var path=pickResult.FullPath;
var RGBLuminance=DependencyService.Get().GetRGBLuminanceSource(路径);
var reader=new barcoderereadergeneric();
var result=reader.Decode(RGBLuminance);//结果始终为空。
}
Android中依赖类的方法:

public RGBLuminanceSource GetRGBLuminanceSource(字符串图像路径)
{
if(File.Exists(imagePath))
{
Android.Graphics.Bitmap Bitmap=BitmapFactory.DecodeFile(imagePath);
List rgbBytesList=新列表();
对于(int y=0;y
您应该更改行

返回新的RGBLuminanceSource(rgbBytes,bitmap.Height,bitmap.Width,RGBLuminanceSource.BitmapFormat.RGB32)

返回新的RGBLuminanceSource(rgbBytes、bitmap.Width、bitmap.Height、RGBLuminanceSource.BitmapFormat.RGB32)

为了更准确地使用RGB格式,您应该

  • 将RGBLuminanceSource.BitmapFormat.RGB32更改为RGBLuminanceSource.BitmapFormat.ARGB32
  • 或者更改rgbBytesList.AddRange(新[]{c.A,c.R,c.G,c.B});到rgbBytesList.AddRange(新[]{c.R,c.G,c.B,c.A})
你能试试这些图片吗


Hi@Serkan Seker,您能发布关于此问题的完整错误日志吗?这将给我们一个问题的线索。如果您方便的话,请您将一个基本的演示发布到githhub或onedriver,这样我们就可以在我们这边进行测试了吗?嗨@JessieZhang MSFT我准备了一个演示项目。非常感谢。不同的位图格式是否会影响扫描条形码的结果?具体取决于。RGB32模式下的亮度源使用前三个字节作为R、G和B通道。忽略第四个字节(alpha通道)。如果以ARGB顺序构建阵列,则alpha值将解释为红色通道,红色通道将解释为绿色,绿色通道将解释为蓝色,蓝色通道将被忽略。这会导致不同的灰度图像,在某些情况下会导致不同的单色位矩阵。某些图像(可能对比度低或类似)可能会失败。覆盖所有条形码类型的最佳位图格式设置是什么?黑白和彩色条形码都可用。条形码类型不依赖于位图格式。您必须选择适合字节数组的格式。您也可以使用Android绑定包中的条形码阅读器类ZXing.Android.BarcodeReader。在这种情况下,您的代码如下所示:'''''if(File.Exists(imagePath)){Android.Graphics.Bitmap Bitmap=BitmapFactory.DecodeFile(imagePath);var reader=new ZXing.Android.barcodereder();var result=reader.Decode(Bitmap);}我不明白的是,一幅大小不同、内容相同的图像被正确解码,而另一幅图像返回空值。为什么会这样?