动画扫描二维码

时间:2017-08-30 08:51:29

标签: c# winforms

我正在使用Emgucv和Zxing创建QR码扫描仪我创建了一个客户PictureBox来扫描QR码。网络摄像头负责将QR码扫描到PictureBox。我还想制作一个扫描动画在PictureBox中。代码工作正常,但当我开始扫描QR码时,红线的动画不会出现在PictureBox中。这是我的代码:

客户图片框:

public partial class qrCodeViewer : PictureBox
{
    int y = 0;
    public Timer _timer;

    public qrCodeViewer()
    {
        InitializeComponent();
    }

    public void _timer_Tick(object sender, EventArgs e)
    {
        y += 10;
        if (y >= 300)
        {
            y = 0;
        }
        Invalidate();
    }

    protected override void OnPaint(PaintEventArgs pe)
    {
        Graphics g = pe.Graphics;
        g.DrawLine(new Pen(Color.Red, 2f), new Point(0, y), new Point(360, y));
        base.OnPaint(pe);
    }
}

的WinForms:

private void readQR_Click(object sender, EventArgs e)
{
    qrRealTime._timer = new Timer();
    qrRealTime._timer.Start();
    qrRealTime._timer.Interval = 50;
    qrRealTime._timer.Tick += new EventHandler(qrRealTime._timer_Tick);
    openWebCam();
    _timer.Start();
    _timer.Tick += new EventHandler(TimerEventProcessor);
}

private void TimerEventProcessor(object sender, EventArgs e)
{
    Image<Bgr, Byte> frame = new Image<Bgr, Byte>(360, 280);
    frame = cap.QueryFrame();
    qrRealTime.Image = frame.ToBitmap();

    ZXing.IBarcodeReader reader = new ZXing.BarcodeReader();

    ZXing.Result result = reader.Decode(frame.ToBitmap());

    if (result != null)
    {

    }

}

我的问题是如何在PictureBox中显示动画? WinForms's image

1 个答案:

答案 0 :(得分:0)

OnPaint方法中的调用顺序很重要。

先致电

base.OnPaint(pe);

绘制下方图像。

然后调用另外两行绘制红线。现在代码看起来像

protected override void OnPaint(PaintEventArgs pe)
{
    base.OnPaint(pe);
    Graphics g = pe.Graphics;
    g.DrawLine(new Pen(Color.Red, 2f), new Point(0, y), new Point(360, y));
}