我想使用ZXing(0.16.4)创建QR码,但遇到以下异常,
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();
}
}
答案 0 :(得分:2)
我解决了这个问题,基本上我使用了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;
}
}
}
希望这个答案可以保护别人的头发免受拉扯。
答案 1 :(得分:1)
有可用的较新版本的软件包,可与.NET Core 3.1一起使用。
https://www.nuget.org/packages/ZXing.Net.Bindings.Windows.Compatibility/