Windows Forms: QR Code Scanner using Camera in C#

This post shows you How to Read QR Code from Webcam or Camera using AForge , ZXing.Net in C# .NET Windows Forms Application.

To create a QR Code scanner with webcam, you need to drag the TextBox, Label, PictureBox, Combobox and Button from the Visual Studio Toolbox into your form designer, then design a simple UI that allows you to read data QR Code using webcam camera as shown below.

c# qr code reader webcam

C# Read QR Code from Webcam

You need to install the AForge, AForge.Video, AForge.Video.DirectShow, ZXing.Net packages from the Nuget Manage Packages in your Visual Studio.

The AForge.Video library contains interfaces and classes to help you access different video sources, such as webcame, IP video cameras. The library defines types used by other video related libraries from AForge.NET framework.

The AForge.Video.DirectShow library contains classes, which allow to access video sources using DirectShow interface (USB web cameras, capture devices, video files, etc.).

ZXing.Net is a port of ZXing. It's an open-source, multi-format 1D/2D barcode image processing library originally implemented in Java.
It has been ported by hand with a lot of optimizations and improvements.

It's compatible with .Net 2.0, .Net 3.5, .Net 4.0, .Net 4.5, .Net 4.6, .Net 4.7, .Net 4.8, Windows RT Class Library and Components, UWP, .Net Standard 1.0, 1.1, 1.3 and 2.0, Silverlight 4, Silverlight 5, Windows Phone 7.x and Windows Phone 8.x and Xamarin.Android

After finishing installing the above libraries, you need to declare two variables as shown below.

FilterInfoCollection filterInfoCollection;
VideoCaptureDevice videoCaptureDevice;

Adding a Form_Load event handler that allows you to detect the camera from your computer, then you can select the camera you want to use as the following c# code.

private void Form1_Load(object sender, EventArgs e)
    filterInfoCollection = new FilterInfoCollection(FilterCategory.VideoInputDevice);
    foreach (FilterInfo Device in filterInfoCollection)
    cboCamera.SelectedIndex = 0;
    videoCaptureDevice = new VideoCaptureDevice();

Adding a click event to the Start button that allows you to show the camera image in the PictureBox control.

private void btnStart_Click(object sender, EventArgs e)
    videoCaptureDevice = new VideoCaptureDevice(filterInfoCollection[cboCamera.SelectedIndex].MonikerString);
    videoCaptureDevice.NewFrame += FinalFrame_NewFrame;

Adding a FinalFrame_NewFrame event handler that allows you to capture image from camera.

private void FinalFrame_NewFrame(object sender, NewFrameEventArgs eventArgs)
    pictureBox1.Image = (Bitmap)eventArgs.Frame.Clone();

Open the form designer, then drag the timer control from the visual studio toolbox to your winform, then set Interval property to 1000 (1 second). Next, Double click on timer control to add the timer tick event handler as the following c# code.

private void timer1_Tick(object sender, EventArgs e)
    BarcodeReader Reader = new BarcodeReader();
    Result result = Reader.Decode((Bitmap)pictureBox1.Image);
    if (result != null)
        txtResult.Text = result.ToString();

Finaly, Call the Start method of timer in the Decode button click event handler.

private void btnDecode_Click(object sender, EventArgs e)

You should stop your webcam when your form closing.

private void Form24_FormClosing(object sender, FormClosingEventArgs e)
    if (videoCaptureDevice.IsRunning == true)

And don't forget to import the namespaces below.

using AForge.Video;
using AForge.Video.DirectShow;
using ZXing;

Run your project, try to find the QR Code sample to test your application or you can generate qr code online

Next, Click the Start button to scan qr code using webcam in c#. You can also watch the video below to know How to create a QR Code Scanner with webcam in C#.