1

我正在使用这个库将二维码生成到 WinForm 应用程序中,但我真的不知道如何使用 OnPaint() 方法。

所以我有这个:

public partial class Form1 : Form
{
  public Form1()
  {
    InitializeComponent();
  }

  protected override void OnPaint(PaintEventArgs e)
  {
    QrEncoder encoder = new QrEncoder(ErrorCorrectionLevel.M);
    QrCode qrCode;
    encoder.TryEncode("link to some website", out qrCode);

    new GraphicsRenderer(new FixedCodeSize(200, QuietZoneModules.Two))
                             .Draw(e.Graphics, qrCode.Matrix);

    base.OnPaint(e);
  }

  private void Form1_Load(object sender, EventArgs e)
  {
    this.Invalidate();
  }
}

我在表单中有一个简单的图片框,我只想在其中生成二维码图像(如果可以在图片框中生成它)。

4

2 回答 2

1

如果您将图像放入图片框中并且只生成一次图像,那么您无需担心绘画方法(您不是在制作动画等,它只是一个 QR 码)

只需在您的表单加载中执行此操作(或您生成图像的任何位置)

mypicturebox.Image = qrCodeImage;

更新 - 附加代码以方便您的库

    var bmp = new Bitmap(200, 200);
    using (var g = Graphics.FromImage(bmp))
    {
        new GraphicsRenderer(
            new FixedCodeSize(200, QuietZoneModules.Two)).Draw(g, qrCode.Matrix);
    }
    pictureBox1.Image = bmp;
于 2013-04-30T07:33:28.033 回答
0

这就是我最终所做的:

public partial class Form1 : Form
    {
        public event PaintEventHandler Paint;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            pictureBox1.Paint += new System.Windows.Forms.PaintEventHandler(this.pictureBox_Paint);
            this.Controls.Add(pictureBox1);
        }

        private void pictureBox_Paint(object sender, PaintEventArgs e)
        {
            QrEncoder encoder = new QrEncoder(ErrorCorrectionLevel.M);
            QrCode qrCode;
            encoder.TryEncode("www.abix.dk", out qrCode);

            new GraphicsRenderer(
                new FixedCodeSize(200, QuietZoneModules.Two)).Draw(e.Graphics, qrCode.Matrix);
        }
    }
于 2013-04-30T08:40:12.597 回答