Why can't I use Gma.QrCodeNet.Encoding.Windows.Render?

I use QrCode.Net library version 0.3, and I need to use Gma.QrCodeNet.Encoding.Windows.Render to create images with qrcode ISizeCalculation , but I am missing something or not another version. What is the problem? In any case, I found a solution for people with the same problem, and they want to create images with the same fixed size. Here is the code:

 private void gen_qr_file(string file_name, string content, int image_size) { string new_file_name = file_name; QrEncoder qrEncoder = new QrEncoder(ErrorCorrectionLevel.H); QrCode qrCode = new QrCode(); qrEncoder.TryEncode(content, out qrCode); Renderer renderer = new Renderer(image_size, Brushes.Black, Brushes.White); MemoryStream ms = new MemoryStream(); renderer.WriteToStream(qrCode.Matrix, ms, ImageFormat.Png); var image = new Bitmap(Image.FromStream(ms), new Size(new Point(200, 200))); image.Save(new_file_name + ".png", ImageFormat.Png); } 

This generates a 200x200 pixel png image with qrcode.

There is a way in the library itself to do this, but I need to enable RENDER, and I cannot. Does anyone know what the problem is?

+4
source share
4 answers
 private void gen_qr_file(string file_name, string content, int image_size) { string new_file_name = file_name; QrEncoder qrEncoder = new QrEncoder(ErrorCorrectionLevel.H); QrCode qrCode = new QrCode(); qrEncoder.TryEncode(content, out qrCode); Renderer renderer = new Renderer(image_size, Brushes.Black, Brushes.White); MemoryStream ms = new MemoryStream(); renderer.WriteToStream(qrCode.Matrix, ms, ImageFormat.Png); var imageTemp = new Bitmap(ms); var image = new Bitmap(imageTemp, new Size(new Point(image_size, image_size))); image.Save(new_file_name + ".png", ImageFormat.Png); } 

Note. Only 2 lines changed. Hope this helps someone.

+4
source

Use FixedCodeSize . See the Example below, which will create a 400x400 pixel image, with each "module" (block) becoming smaller, the more data is added.

 var qrEncoder = new QrEncoder(ErrorCorrectionLevel.M); var qrCode = qrEncoder.Encode("my value"); var renderer = new GraphicsRenderer(new FixedCodeSize(400, QuietZoneModules.Zero), Brushes.Black, Brushes.White); renderer.WriteToStream(qrCode.Matrix, ImageFormat.Png, /* OUTPUT STREAM */); 
+3
source

I had to include both of the following statements:

using Gma.QrCodeNet.Encoding; using Gma.QrCodeNet.Encoding.Windows.Controls;

Also, how big is Gma.QrCodeNet.Encoding.dll?

It should be more than 80 thousand or you have the wrong one.

I had the same problem.

+1
source

This is my implementation. GraphicsRenderer only change

 private string gen_qr_file(string file_name, string content, int image_size) { string new_file_name = file_name; QrEncoder qrEncoder = new QrEncoder(ErrorCorrectionLevel.H); QrCode qrCode = new QrCode(); qrEncoder.TryEncode(content, out qrCode); GraphicsRenderer renderer = new GraphicsRenderer( new FixedCodeSize(400, QuietZoneModules.Zero), Brushes.Black, Brushes.White); MemoryStream ms = new MemoryStream(); renderer.WriteToStream(qrCode.Matrix, ImageFormat.Png, ms); var imageTemp = new Bitmap(ms); var image = new Bitmap(imageTemp, new Size(new Point(200, 200))); image.Save(new_file_name, ImageFormat.Png); return new_file_name; } 
-1
source

Source: https://habr.com/ru/post/1434530/


All Articles