【问题标题】:ZXing.Net decode barcode giving Error - Cannot convert from 'System.Drawing.Bitmap' to 'ZXing.LuminanceSource'ZXing.Net 解码条形码给出错误 - 无法从“System.Drawing.Bitmap”转换为“ZXing.LuminanceSource”
【发布时间】:2019-01-23 14:37:08
【问题描述】:

我正在使用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);
}

错误在最后一行代码:

 var result = reader.Decode(barcodeBitmap);

我的应用程序在 ASP.NET Core 中,我正在使用官方文档代码,但它们无法正常工作。请帮忙?

更新

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

IBarcodeReader 只有 2 个 decode 方法重载:

Result Decode(byte[] rawRGB, int width, int height, RGBLuminanceSource.BitmapFormat format);
Result Decode(LuminanceSource luminanceSource);

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

Result Decode(Bitmap barcodeBitmap);

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

【问题讨论】:

  • 你用的是什么版本?
  • @最新版本
  • 请指定版本号。我不知道你认为最新的是什么。
  • 今天是 0.16.4.0,通过运行 PM> Install-Package ZXing.Net 从包管理器控制台自行安装

标签: c# asp.net-core qr-code barcode zxing


【解决方案1】:

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

字符串[] 文件 = Directory.GetFiles("wwwroot/qrr"); foreach(文件中的字符串文件) { // 创建一个条形码阅读器实例 IBarcodeReader reader = new BarcodeReader(); BarcodeReader 阅读器 = new BarcodeReader(); // 加载位图 varbarcodeBitmap = (Bitmap)Image.FromFile("wwwroot/qrr/" + Path.GetFileName(file)); // 检测和解码位图中的条形码 var 结果 = reader.Decode(barcodeBitmap); }

注意这个.Decode()an extension methodIBarcodeReaderGeneric 而不是IBarcodeReader

【讨论】:

  • @yogihosting 见a demo here
  • @yogihosting 1. 顾名思义,ZXing.Net.Bindings.CoreCompat.System.Drawing 使用CoreCompat.System.Drawing 包而不是System.Drawing.CommonCoreCompat.System.Drawing 是一个在 System.Drawing.Common 包在 .NET Core 上可用之前更早发布的库。您将在 CoreCompat.System.Drawing 库中找到 Bitmap 类。
  • @yogihosting 在一条评论中发布解释太长了。 2.您似乎在System.Drawing.Common上手动添加了另一个包引用。如果是这种情况,您不必这样做。只需删除该依赖项。见my Demo here
  • @yogihosting 如果您使用的是 .NET Framework,请删除 ASP.NET Core 标签
  • @yogihosting 此外,.NET Framework 本身已经有一个System.Drawing.Bitmap。所以没有必要为.NET Framework定义这样的兼容类
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多