ZXing.Net解码条形码时出现错误 - 无法将'System.Drawing.Bitmap'转换为'ZXing.LuminanceSource'。

4
我将使用 ZXing.Net 0.16.4.0 来解码存储在'wwwroot/qrr'文件夹中的QR码文件,但是我遇到了编译时错误:

无法将 '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);
}

错误在代码的最后一行:
 var result = reader.Decode(barcodeBitmap);

我的应用程序是在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);

但是,当您在 .Net 4.6.1 框架中安装此软件包时,则会有一个额外的重载方法:

Result Decode(Bitmap barcodeBitmap);

一个包如何在不同的框架中提供不同的代码?

你使用的是哪个版本? - user47589
@最新版本 - yogihosting
请指定一个版本号。我不知道您认为最新的是什么。 - user47589
今天自己从包管理器控制台运行PM> Install-Package ZXing.Net安装了0.16.4.0版本。 - yogihosting
1个回答

5

由于您正在使用ASP.NET Core,我假设您已经添加了对ZXing.Net.Bindings.CoreCompat.System.Drawing包的引用。 您需要按照以下方式更改代码:

string[] files = Directory.GetFiles("wwwroot/qrr");
foreach (string file in files)
{
    // 创建条形码读取器实例
    IBarcodeReader reader = new BarcodeReader();
    BarcodeReader reader = new BarcodeReader();
    // 加载位图
    var barcodeBitmap = (Bitmap)Image.FromFile("wwwroot/qrr/" + Path.GetFileName(file));
// 检测并解码位图中的条形码 var result = reader.Decode(barcodeBitmap); }
请注意,.Decode()一个扩展方法,属于 IBarcodeReaderGeneric 而不是 IBarcodeReader

1
@yogihosting 在此处查看demo - itminus
1
正如名称所示,“ZXing.Net.Bindings.CoreCompat.System.Drawing”使用“CoreCompat.System.Drawing”包而不是“System.Drawing.Common”。 “CoreCompat.System.Drawing”是在“.NET Core”上发布之前发布的库。您将在“CoreCompat.System.Drawing”库中找到“Bitmap”类。 - itminus
1
@yogihosting 在单个评论中解释太长了。2. 看起来您已经手动添加了另一个包引用 System.Drawing.Common。如果是这种情况,您不必这样做。只需删除该依赖项即可。请参见我的演示 - itminus
1
如果您正在使用.NET Framework,请删除ASP.NET Core标记。 - itminus
1
@yogihosting 另外,.NET Framework 已经有了 System.Drawing.Bitmap。因此,没有必要为 .NET Framework 定义这样的兼容类。 - itminus
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接