二维码识别程序及代码

时间:2024-02-22 22:22:48

 

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Threading.Tasks;
 9 using System.Windows.Forms;
10 using ThoughtWorks.QRCode.Codec;//引用ThoughtWorks.QRcode.Codec二维码生成类
11 
12 using ThoughtWorks.QRCode.Codec.Data;//引用ThoughtWorks.QRCode.Codec.Data;二维码识别类
13 namespace 生成二维码
14 {
15     public partial class Form1 : Form
16     {
17         public Form1()
18         {
19             InitializeComponent();
20         }
21 
22         Image image;
23 
24         private void button1_Click(object sender, EventArgs e)
25         {
26 
27             //声明一个 QRCodeEncoder 类实例
28             QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
29 
30             //设置编码方式 将其设置为字节编码(还有两种编码方式),现在的流行的普遍的二维码都是字节编码。
31             qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
32 
33             //设置二维码的大小
34             qrCodeEncoder.QRCodeScale = 5;
35             //设置二维码的版本
36             qrCodeEncoder.QRCodeVersion = 7;
37             //设置错误校验(错误更正)的级别,这里设置为中等,一共有四个级别
38             qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
39             //设置要生成二维码的字
40             string str = textBox1.Text.ToString().Trim();
41             //编码并赋处理成位图数据
42             System.Drawing.Bitmap bp = qrCodeEncoder.Encode(str.ToString());
43             //将位图数据赋给图片类
44             image = bp;
45             //将图片赋给控件,用于显示出来
46             pictureBox1.Image = image;
47 
48         }
49 
50         private void button2_Click(object sender, EventArgs e)
51         {
52             //实例化一个保存对话框
53             SaveFileDialog sf = new SaveFileDialog();
54             sf.Title = "选择保存的位置";
55             sf.Filter = "保存图片(*.jpg)|*.jpg|所有文件(*)|*.*";
56             //设置默认文件类型显示顺序
57             sf.FilterIndex = 1;
58             //保存对话框是否记忆上次打开的目录
59             sf.RestoreDirectory = true;
60             if (sf.ShowDialog() == DialogResult.OK)
61             {
62 
63                 Image im = this.pictureBox1.Image;
64                 //获取文件路径
65                 string localFilePath = sf.FileName.ToString();
66                 //当文件保存路径不为空时
67                 if (sf.FileName != "")
68                 {
69                     //获取文件名,不带路径
70                     string fileNameExt = localFilePath.Substring(localFilePath.LastIndexOf("\\") + 1);
71                     string FilePath = localFilePath.Substring(0, localFilePath.LastIndexOf("."));  //获取文件路径,带文件名,不带后缀
72                     string fn = sf.FileName;
73                     pictureBox1.Image.Save(FilePath + "-" + DateTime.Now.ToString("yyyyMMdd") + ".jpg");
74                     MessageBox.Show("保存成功!");
75 
76                 }
77             }
78 
79         }
80 
81         private void button3_Click(object sender, EventArgs e)
82         {
83 
84             //实例化一个二维码解析器
85             QRCodeDecoder deCoder = new QRCodeDecoder();
86             //将图片解析为位图数据
87             Bitmap bp = new Bitmap(this.pictureBox1.Image);
88             //将位图数据用二维码解析器解析
89             QRCodeBitmapImage qbm=new QRCodeBitmapImage(bp);
90             //解析为字符串
91             string deString = deCoder.decode(qbm);
92 
93             //还可以用下面这种写法,一条语句解析成字符串
94             // String deString = deCoder.decode(new QRCodeBitmapImage(new Bitmap(this.pictureBox1.Image)));
95            //在Label1中显示出来
96             this.label1.Text = deString;
97         }
98     }
99 }