ZXing.Net 解码条形码给出错误 - 无法从“System.Drawing.Bitmap”转换为“ZXing.LuminanceSource”

yog*_*ing 4 c# qr-code barcode zxing asp.net-core

我正在使用ZXing.Net 0.16.4.0 解码保存在“wwwroot/qrr”文件夹中的二维码文件,但我收到编译时错误:

无法从“System.Drawing.Bitmap”转换为“ZXing.LuminanceSource”

我的代码:

string[] files = Directory.GetFiles("wwwroot/qrr");
foreach (string file in files)
{
    // create a barcode reader instance
    IBarcodeReader reader = new BarcodeReader();
    // load a bitmap
    var barcodeBitmap = (Bitmap)Image.FromFile("wwwroot/qrr/" + Path.GetFileName(file));

    // detect and decode the barcode inside the bitmap
    var result = reader.Decode(barcodeBitmap);
}
Run Code Online (Sandbox Code Playgroud)

错误出现在最后一行代码:

 var result = reader.Decode(barcodeBitmap);
Run Code Online (Sandbox Code Playgroud)

我的应用程序位于 ASP.NET Core 中,我正在使用官方文档代码,但它们不起作用。请帮忙?

更新

我注意到,当 ZXing 包添加到 ASP.NET Core 应用程序时,它的 ZXing.IBarcodeReader 缺少 Decode 重载方法:

IBarcodeReader 只有 2 个解码方法重载:

Result Decode(byte[] rawRGB, int width, int height, RGBLuminanceSource.BitmapFormat format);
Result Decode(LuminanceSource luminanceSource);
Run Code Online (Sandbox Code Playgroud)

但是当你在.Net 4.6.1框架中安装这个包时,还有一种重载方法:

Result Decode(Bitmap barcodeBitmap);
Run Code Online (Sandbox Code Playgroud)

一个包如何在不同的框架中给出不同的代码?

itm*_*nus 6

由于您使用的是 ASP.NET Core,我假设您已经添加了对ZXing.Net.Bindings.CoreCompat.System.Drawing. 您需要更改您的代码如下:

string[] files = Directory.GetFiles("wwwroot/qrr");
foreach(文件中的字符串文件)
{
    // 创建一个条形码读取器实例
    IBarcodeReader 阅读器 = new BarcodeReader();
    BarcodeReader 阅读器 = new BarcodeReader();
    // 加载位图
    var BarcodeBitmap = (Bitmap)Image.FromFile("wwwroot/qrr/" + Path.GetFileName(file));

    // 检测并解码位图中的条形码
    var result = reader.Decode(barcodeBitmap);
}

请注意,这.Decode()一个扩展方法IBarcodeReaderGeneric而不是IBarcodeReader

  • @yogihosting 对于将 ZXing.NET 与 ASP.NET Core 结合使用,作者有一个很棒的[示例](https://github.com/micjahn/ZXing.Net/tree/master/Clients/ASP.NetCoreDemo)。但该演示并未更新到 ASP.NET Core 2.x。有人在这里问[类似的操作方法问题](/sf/ask/3784743511/#54070276),希望有帮助。注意我们创建图像的方式。 (2认同)