二维码简介
二维码即2-Dimensional Bar Code,二维条码的种类很多,常见的二维码格式有:PDF417码、QR码、汉信码、颜色条码、quick mark code、data matrix。与传统的条形码相比,可以存储更多的信息,二维码本质上是个密码算法,本文描述的是最常见的QR码(QR Code)的生成方式,QR码的结构如下图所示。
目标
开发一个C# Winform应用程序:
1)可以在界面中输入任意文本内容,点击生成按钮可以将文本内容转换为二维码展示在用户界面中;
2)点击保存按钮可以将二维码以图片的形式保存在指定的路径下。
基于 C# Winform 的 QR 码生成程序
- 创建Winform .net framework项目,通过Nuget包管理器安装QRCoder库,如下图所示。
- 搭建 Winform 用户界面,如下图所示,其中一个richText文本框用于输入文本信息,该文本信息用于生成二维码,一个picturebox控件用于展示生成的二维码,两个Button控件用于触发二维码的生成和保存。
- 编写程序代码,代码源码如下:
using QRCoder;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace QRCode_Winform
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// 设置picQRCode对象图片自适应
picQRCode.BackgroundImageLayout = ImageLayout.Stretch;
picQRCode.SizeMode=PictureBoxSizeMode.StretchImage;
}
private void btnCreate_Click(object sender, EventArgs e)
{
// 创建QRCodeGenerator对象
QRCodeGenerator qrGenerator = new QRCodeGenerator();
// 创建QCodeRData对象
QRCodeData qrData = qrGenerator.CreateQrCode(txtText.Text, QRCodeGenerator.ECCLevel.M);
// 创建QRCode对象
QRCode qrCode = new QRCode(qrData);
// 将QRCode对象转换为BitMap对象
Bitmap qrCodeImage= qrCode.GetGraphic(20);
// 将Bitmap对象转换为Image对象
// Image img= Image.FromHbitmap(qrCodeImage.GetHbitmap());
// 设置picQRCode对象的数据源
//picQRCode.Image = img;
picQRCode.Image = qrCodeImage;
picQRCode.Show();
picQRCode.Refresh();
}
private void btnSave_Click(object sender, EventArgs e)
{
SaveFileDialog imgFilePath = new SaveFileDialog();
imgFilePath.Title = "二维码图片保存";
imgFilePath.FileName = "QRCode";
imgFilePath.Filter = "图片文件|*.jpg;*.png;*.jpeg;*.bmp";
if (imgFilePath.ShowDialog() == DialogResult.OK)
{
string fileName = imgFilePath.FileName.ToString();
// 获取图片后缀
string fileExtName = fileName.Substring(fileName.LastIndexOf(".") + 1).ToString();
System.Drawing.Imaging.ImageFormat imgformat;
if (fileExtName != "")
{
switch (fileExtName)
{
case "jpg":
imgformat = System.Drawing.Imaging.ImageFormat.Jpeg;
break;
case "bmp":
imgformat = System.Drawing.Imaging.ImageFormat.Bmp;
break;
case "png":
imgformat = System.Drawing.Imaging.ImageFormat.Png;
break;
default:
imgformat = System.Drawing.Imaging.ImageFormat.Jpeg;
break;
}
// 保存图片
picQRCode.Image.Save(fileName, imgformat);
}
}
}
}
}
- 程序运行效果如下图所示。