Ошибка декодирования штрих-кода в ZXing.Net - невозможно преобразовать из 'System.Drawing.Bitmap' в 'ZXing.LuminanceSource'

61
8

Я использую 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 pacakage при добавлении в приложение 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 framework, появляется еще один метод перегрузки:

Result Decode(Bitmap barcodeBitmap);

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

спросил(а) 2019-01-23T17:37:00+03:00 2 года, 1 месяц назад
1
Решение
120

Поскольку вы используете 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
IBarcodeReader reader = new BarcodeReader();
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

ответил(а) 2019-01-24T06:29:00+03:00 2 года, 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема