为什么我不能使用Gma.QrCodeNet.Encoding.Windows.Render?

时间:2012-09-17 05:25:33

标签: c# winforms .net-4.0 qr-code

我正在使用QrCode.Net库版本0.3,我需要使用Gma.QrCodeNet.Encoding.Windows.Render来创建带有qrcode ISizeCalculation的图像,但我缺少一些或者还有另一个版本。可能是什么问题? 无论如何,我找到了解决同样问题的人的解决方案,他们想要创建具有相同固定大小的图像。这是代码:

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);

}

使用qrcode生成200x200像素的png图像。

图书馆本身有一个方法可以做到这一点,但我需要包含RENDER的东西而我不能。有人知道这是什么问题吗?

4 个答案:

答案 0 :(得分:4)

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);

}

注意:只修改了2行。我希望它对某人有所帮助。

答案 1 :(得分:3)

使用FixedCodeSize。请参见下面的示例,该图将生成400x400px图像,每个“模块”(块)越小,添加的数据越多。

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 */);

答案 2 :(得分:1)

我必须包含以下两个陈述:

使用Gma.QrCodeNet.Encoding; 使用Gma.QrCodeNet.Encoding.Windows.Controls;

另外,Gma.QrCodeNet.Encoding.dll有多大?

应该超过80K或者你错了。

我有同样的问题。

答案 3 :(得分:-1)

这是我的实施仅更改GraphicsRenderer

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;
}