Ошибка декодирования штрих-кода в ZXing.Net. Невозможно преобразовать файл 'System.Drawing.Bitmap' в 'ZXing.LuminanceSource'. - PullRequest
0 голосов
/ 23 января 2019

Я использую ZXing.Net 0.16.4.0 для декодирования файлов кода qr, которые хранятся в папке '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, имеет отсутствующий метод перегрузки декодирования:

IBarcodeReader имеет только 2 перегрузки метода декодирования:

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

Но при установке этого пакета в .Net 4.6.1 framework возникает еще один метод перегрузки:

Result Decode(Bitmap barcodeBitmap);

Как пакет может выдавать разные коды в разных рамках?

1 Ответ

0 голосов
/ 24 января 2019

Поскольку вы используете ASP.NET Core, я полагаю, вы добавили ссылку на пакет ZXing.Net.Bindings.CoreCompat.System.Drawing. Вам нужно изменить код, как показано ниже:

string[] files = Directory.GetFiles("wwwroot/qrr");
foreach (string file in files)
{
    // create a barcode reader instance
    <strike>IBarcodeReader reader = new BarcodeReader();</strike>
    BarcodeReader 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);
}

Обратите внимание, что .Decode() является методом расширения из IBarcodeReaderGeneric вместо IBarcodeReader

...