Исключение рендерера ZXing QrCode с .Net Core 2.1 - PullRequest
0 голосов
/ 03 октября 2018

Я хотел бы создать QR-код с использованием ZXing (0.16.4), но я встречаю следующее исключение:

System.InvalidOperationException: 'Вы должны установить экземпляр средства визуализации.'

Почти такой же код хорошо работает с .Net Framework 4.6.1

вот мой код

static void Main(string[] args)
{
    var qrCode = CreateQrCode("test");
    Console.ReadKey();
}

public static byte[] CreateQrCode(string content)
{
    BarcodeWriter<Bitmap> writer = new BarcodeWriter<Bitmap>
    {
        Format = BarcodeFormat.QR_CODE,
        Options = new QrCodeEncodingOptions
        {
            Width = 100,
            Height = 100,
        }
    };

    var qrCodeImage = writer.Write(content); // BOOM!!

    using (var stream = new MemoryStream())
    {
        qrCodeImage.Save(stream, ImageFormat.Png);
        return stream.ToArray();
    }
}

1 Ответ

0 голосов
/ 03 октября 2018

Я решил проблему, в основном я использовал https://www.nuget.org/packages/ZXing.Net.Bindings.CoreCompat.System.Drawing

Я создаю BarcodeWriter, сгенерированный из следующего пространства имен

ZXing.CoreCompat.System.Drawing

вот мой метод CreateQrCode

public static byte[] CreateQrCode(string content)
{
    BarcodeWriter writer = new BarcodeWriter
    {
        Format = BarcodeFormat.QR_CODE,
        Options = new QrCodeEncodingOptions
        {
            Width = 100,
            Height = 100,
        }
    };

    var qrCodeImage = writer.Write(content); // BOOM!!

    using (var stream = new MemoryStream())
    {
        qrCodeImage.Save(stream, ImageFormat.Png);
        return stream.ToArray();
    }
}

Вот метод чтения QR-кода, возможно, кому-то тоже понадобится.BarcodeReader также генерируется из того же пространства имен, что и create.

Вот метод

public static string ReadQrCode(byte[] qrCode)
{
    BarcodeReader coreCompatReader = new BarcodeReader();

    using (Stream stream = new MemoryStream(qrCode))
    {
        using (var coreCompatImage = (Bitmap)Image.FromStream(stream))
        {
            return coreCompatReader.Decode(coreCompatImage).Text;
        }
    }
}

Надеюсь, этот ответ защитит чьи-то волосы от натяжения.

...