2013-04-30 3 views
1

을 사용하여 WinForm 응용 프로그램에 QRcode를 생성하지만 실제로 OnPaint() 메서드를 사용하는 방법을 모르겠습니다. 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(); 
    } 
} 

내가 형태로 간단한에 PictureBox를 가지고 (그것의 PictureBox에를 생성 할 수있는 경우) 난 그냥 거기에있는 QR 코드 이미지를 생성하려면 :

그래서 나는이 있습니다.

+0

이 코드를 사용하면 직접 Form1에 smowhere됩니다. – wonko79

+0

이 링크가 도움이 될 것 같아요 http://msdn.microsoft.com/en-us/library/system.windows.forms.control.onpaint.aspx –

답변

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; 
+0

그러나 반환 형식 이미지가있는 라이브러리에 메서드가 없습니다. 그래서 나는 그것을 그림 상자에 할당 할 수 있습니다. 나는 또한'pictureBox.Invalidate()'를 시도했다. (그래서 그것은 "어디에서든지 형식"이지만 결과는 없다). – Milkncookiez

+0

해당 부분에 도움이되는 코드가 업데이트되었습니다. – Nathan

+0

Excellent! 이제 생성 된 이미지를 물리적으로 비트 맵 파일로 쉽게 저장할 수 있습니다. 고마워요! – Milkncookiez

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); 
     } 
    } 
+1

작동하지만 양식을 다시 그릴 때마다 반복됩니다. 위의 내 대답을 업데이트했습니다 - 양식로드 (또는 단추 클릭 등)에 해당 코드를 입력하면 QR 이미지를 한 번만 생성하여 도움을 얻을 수 있습니다. :) – Nathan