.NET 6에서 Windows 데스크톱 바코드 및 QR 코드 스캐너를 빌드하는 방법
종속성 설치
OpenCvSharp4.Windows
웹캠에서 비디오 스트림을 캡처하는 데 사용됩니다.
dotnet add package OpenCvSharp4.Windows
OpenCvSharp4.Extensions
OpenCvSharp 매트를 비트맵으로 변환하는 데 사용됩니다.
dotnet add package OpenCvSharp4.Extensions
BarcodeQRCodeSDK
Mat
또는 Bitmap
에서 바코드 및 QR 코드를 디코딩하는 데 사용됩니다.dotnet add package BarcodeQRCodeSDK
.NET 6에서 Windows 데스크톱 바코드 및 QR 코드 스캐너를 개발하는 단계
응용 프로그램을 처음부터 빌드해 보겠습니다.
1단계: Windows Forms 앱 만들기:
터미널에서 다음 명령을 통해 새 프로젝트를 빠르게 생성하고 종속성을 설치할 수 있습니다.
dotnet new winforms -o desktop-barcode-qrcode-scanner
cd desktop-barcode-qrcode-scanner
dotnet add package OpenCvSharp4.Windows
dotnet add package OpenCvSharp4.Extensions
dotnet add package BarcodeQRCodeSDK
그런 다음
Form1.cs
파일에서 관련 네임스페이스 및 클래스를 가져옵니다.using Dynamsoft;
using Result = Dynamsoft.BarcodeQRCodeReader.Result;
using OpenCvSharp;
using OpenCvSharp.Extensions;
생성자에서
BarcodeQRCodeReader
및 VideoCapture
인스턴스를 초기화합니다. 30-day trial license을 신청하여 바코드 SDK를 활성화할 수 있습니다.public Form1()
{
InitializeComponent();
BarcodeQRCodeReader.InitLicense("DLS2eyJoYW5kc2hha2VDb2RlIjoiMjAwMDAxLTE2NDk4Mjk3OTI2MzUiLCJvcmdhbml6YXRpb25JRCI6IjIwMDAwMSIsInNlc3Npb25QYXNzd29yZCI6IndTcGR6Vm05WDJrcEQ5YUoifQ=="); // Get a license key from https://www.dynamsoft.com/customer/license/trialLicense?product=dbr
reader = BarcodeQRCodeReader.Create();
capture = new VideoCapture(0);
}
2단계: UI 구성 요소 추가
양식 디자이너에
PictureBox
및 Button
를 추가합니다. PictureBox
는 카메라 비디오 스트림을 표시하는 데 사용되며 Button
는 비디오 프레임에서 바코드 및 QR 코드 스캔을 시작 및 중지하는 데 사용됩니다. Visual Studio Code
를 사용하는 경우 Form1.Designer.cs
에 구성 요소를 수동으로 추가해야 합니다. 반면 Visual Studio
를 사용하는 경우 도구 상자에서 양식으로 구성 요소를 끌 수 있습니다.this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.pictureBox1.Location = new System.Drawing.Point(13, 12);
this.pictureBox1.Margin = new System.Windows.Forms.Padding(4);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(640, 640);
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBox1.TabIndex = 0;
this.pictureBox1.TabStop = false;
this.button1.AllowDrop = true;
this.button1.AutoEllipsis = true;
this.button1.Font = new System.Drawing.Font("Microsoft Sans Serif", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.button1.Location = new System.Drawing.Point(667, 12);
this.button1.Margin = new System.Windows.Forms.Padding(4);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(333, 79);
this.button1.TabIndex = 1;
this.button1.Text = "Camera Scan";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button_Click);
버튼 클릭 이벤트 핸들러는 다음과 같이 구현됩니다.
private void button_Click(object sender, EventArgs e)
{
if (!capture.IsOpened())
{
MessageBox.Show("Failed to open video stream or file");
return;
}
if (button2.Text == "Camera Scan")
{
StartScan();
}
else {
StopScan();
}
}
3단계: PictureBox에 카메라 비디오 스트림 표시
UI 스레드 차단을 방지하기 위해 백그라운드 스레드에서 비디오 스트림을 캡처합니다. 캡처된 이미지의 유형은
Mat
이며 PictureBox
에 직접 전달할 수 없습니다. 따라서 BitmapConverter
를 사용하여 Mat
를 Bitmap
로 변환합니다.private void StartScan() {
button2.Text = "Stop";
isCapturing = true;
thread = new Thread(new ThreadStart(FrameCallback));
thread.Start();
}
private void StopScan() {
button2.Text = "Camera Scan";
isCapturing = false;
if (thread != null) thread.Join();
}
private void FrameCallback() {
while (isCapturing) {
Mat frame = new Mat();
capture.Read(frame);
pictureBox1.Image = BitmapConverter.ToBitmap(frame);
}
}
4단계: 카메라 비디오 스트림에서 바코드 및 QR 코드 디코딩
다음은
Mat
에서 바코드 및 QR 코드를 디코딩하는 데 사용되는 코드입니다.Result[]? results = reader.DecodeBuffer(mat.Data, mat.Cols, mat.Rows, (int)mat.Step(), BarcodeQRCodeReader.ImagePixelFormat.IPF_RGB_888);
결과를 얻으면 이미지에 텍스트와 윤곽선을 그립니다.
private Bitmap DecodeMat(Mat mat)
{
Result[]? results = reader.DecodeBuffer(mat.Data, mat.Cols, mat.Rows, (int)mat.Step(), BarcodeQRCodeReader.ImagePixelFormat.IPF_RGB_888);
if (results != null)
{
foreach (Result result in results)
{
string output = "Text: " + result.Text + Environment.NewLine + "Format: " + result.Format1 + Environment.NewLine;
textBox1.AppendText(output);
textBox1.AppendText(Environment.NewLine);
int[]? points = result.Points;
if (points != null)
{
OpenCvSharp.Point[] all = new OpenCvSharp.Point[4];
int xMin = points[0], yMax = points[1];
all[0] = new OpenCvSharp.Point(xMin, yMax);
for (int i = 2; i < 7; i += 2)
{
int x = points[i];
int y = points[i + 1];
OpenCvSharp.Point p = new OpenCvSharp.Point(x, y);
xMin = x < xMin ? x : xMin;
yMax = y > yMax ? y : yMax;
all[i / 2] = p;
}
OpenCvSharp.Point[][] contours = new OpenCvSharp.Point[][] { all };
Cv2.DrawContours(mat, contours, 0, new Scalar(0, 0, 255), 2);
if (result.Text != null) Cv2.PutText(mat, result.Text, new OpenCvSharp.Point(xMin, yMax), HersheyFonts.HersheySimplex, 1, new Scalar(0, 0, 255), 2);
}
}
}
else
{
textBox1.AppendText("No barcode detected!" + Environment.NewLine);
}
Bitmap bitmap = BitmapConverter.ToBitmap(mat);
return bitmap;
}
바코드 및 QR 코드 결과를 표시하려면 다음 행을 업데이트하십시오.
- pictureBox1.Image = BitmapConverter.ToBitmap(frame);
+ pictureBox1.Image = DecodeMat(mat);
이제 프로그램을 실행하여 바코드 및 QR 코드를 스캔할 수 있습니다.
dotnet run
소스 코드
https://github.com/yushulx/dotnet-barcode-qr-code-sdk/tree/main/example/desktop-gui
Subversion으로 소스 코드 다운로드:
svn checkout https://github.com/yushulx/dotnet-barcode-qr-code-sdk/trunk/example/desktop-gui
Reference
이 문제에 관하여(.NET 6에서 Windows 데스크톱 바코드 및 QR 코드 스캐너를 빌드하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/yushulx/how-to-build-windows-desktop-barcode-and-qr-code-scanner-in-net-6-1o8b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)