用到外部一个DLL文件(ThoughtWorks.QRCode.dll),看效果

生成截图

识别截图

生成二维码后右键菜单可以保存二维码图片,然后可以到识别模式下进行识别,当然生成后可以用手机扫描识别出来,或者用手机直接扫描以上两张图也能看到识别后的结果。

使用方法,在解决方案中引用上面那个dll文件,引入命名空间

using ThoughtWorks.QRCode.Codec;
using ThoughtWorks.QRCode.Codec.Data;

看完整的生成二维码代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using ThoughtWorks.QRCode.Codec;
using ThoughtWorks.QRCode.Codec.Data;
namespace 二维码
{
public partial class UC_To : UserControl
{
public UC_To()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text.Trim() != "")
{
string enCodeString = textBox1.Text;
QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
pictureBox1.Image = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8);
}
//else
//MessageBox.Show("请输入内容");
} private void 保存图片ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (pictureBox1.Image != null)
{
SaveFileDialog s = new SaveFileDialog();
s.Title = "保存二维码图片";
s.Filter = "图片文件(*.jpg)|*.jpg";
if(s.ShowDialog()==DialogResult.OK)
try
{
pictureBox1.Image.Save(s.FileName,System.Drawing.Imaging.ImageFormat.Jpeg);
MessageBox.Show("保存成功");
}
catch { MessageBox.Show("保存失败"); }
}
}
}
}

看完整的识别二维码的代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using ThoughtWorks.QRCode.Codec;
using ThoughtWorks.QRCode.Codec.Data;
namespace 二维码
{
public partial class UC_From : UserControl
{
public UC_From()
{
InitializeComponent();
}
string filepath = "";
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog p = new OpenFileDialog();
p.Title = "请选择二维码文件";
p.Filter = "图片文件(*.jpg)|*.jpg";
p.Multiselect = false;
if (p.ShowDialog() == DialogResult.OK)
{
filepath = p.FileName;
System.Threading.Thread t = new System.Threading.Thread(ss);
t.IsBackground = true;
t.Start();
}
}
private void ss()
{
if (filepath != "")
{
string tt = "";
try
{
Invoke((EventHandler)delegate
{
button1.Enabled = false;
button1.Text = "Waiting!";
pictureBox1.Image = new Bitmap(filepath);
});
//pictureBox1.Size = new Size(new Bitmap(filepath).Size.Width, new Bitmap(filepath).Size.Height);
QRCodeDecoder qrDecoder = new QRCodeDecoder();
string txtMsg = qrDecoder.decode(new QRCodeBitmapImage(new Bitmap(pictureBox1.Image)), Encoding.UTF8);
tt = txtMsg;
}
catch { tt = "识别失败"; }
Invoke((EventHandler)delegate
{
textBox1.Text = tt;
button1.Enabled = true;
button1.Text = "识别";
});
}
System.Threading.Thread.CurrentThread.Abort();
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = true;
}
}
}

C#生成和识别二维码的更多相关文章

  1. python实现树莓派生成并识别二维码

    python实现树莓派生成并识别二维码 参考来源:http://blog.csdn.net/Burgess_Liu/article/details/40397803 设备及环境 树莓派2代 官方系统R ...

  2. 使用ZXing.Net生成与识别二维码(QR Code)

    Google ZXing是目前一个常用的基于Java实现的多种格式的1D/2D条码图像处理库,出于其开源的特性其现在已有多平台版本.比如今天要用到的ZXing.Net就是针对微软.Net平台的版本.使 ...

  3. 在Windows IoT上生成和识别二维码

    在Windows IoT生成和识别二维码,实际上由于是UWP上实现,所以,理论上,这些生成和识别二维码的方法也可以在其它平台上运行. 关于二维码的生成有很多库可以实现,比如QRCoder,这个库可以在 ...

  4. Python3+qrcode+zxing生成和识别二维码教程

    一.安装依赖库 pip install qrcode pillow image zxing pillow是python3中PIL的代替库,image是生成图版需要用到的库 安装image时报错“Cou ...

  5. PHP 生成、识别二维码及安装相关扩展/工具

    2018-02-20 00:30:26  更新:推荐新扩展(极力推荐) 这篇文章里用的两个二维码扩展都有些问题和麻烦:phpqrcode(生成二维码)的源码有点小 bug: 而 php-zbarcod ...

  6. 利用ZXing.Net生成和识别二维码

    ZXing.Net:ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库. github:https://github.com/micjahn/ZXing.Net 直接将字符 ...

  7. ZXing 生成、读取二维码(带logo)

    前言 ZXing,一个支持在图像中解码和生成条形码(如二维码.PDF 417.EAN.UPC.Aztec.Data Matrix.Codabar)的库.ZXing(“zebra crossing”)是 ...

  8. Pyqt+QRcode 生成 识别 二维码

    1.生成二维码 python生成二维码是件很简单的事,使用第三方库Python QRCode就可生成二维码,我用Pyqt给QRcode打个壳 一.python-qrcode介绍 python-qrco ...

  9. HTML5实现扫描识别二维码/生成二维码

    扫描识别二维码 思路: 1. 操作摄像头,获取图片.HTML5 WEBRTC的navigator.getUserMedia方法去实时获取摄像头资源.  2. 利用canvas使用相关算法分析图片识别图 ...

随机推荐

  1. P2463 [SDOI2008]Sandy的卡片

    写一种\(O(nm)\)的做法,也就是\(O(\sum 串长)\)的. 先通过差分转化,把每个数变成这个数与上一个数的差,第一个数去掉,答案就是最长公共子串+1 按照套路把所有串拼起来,中间加一个分隔 ...

  2. [CERC2017]Intrinsic Interval[scc+线段树优化建图]

    题意 给定一个长度为 \(n\) 的排列,有 \(q\) 次询问,每次询问一个区间 \([l,r]\) ,找到最小的包含 \([l,r]\) 的区间,满足这个区间包含了一段连续的数字. \(n\leq ...

  3. jQuery .attr() vs. .prop()

    Property vs. Attribute 在开始正式比较prop()和attr()两个jQuery方法之前,我们有必要先弄清一下Property和Attribute两个单词的意思.在中文里面,它们 ...

  4. Html_兼容性

    那么如何禁止使用IE8兼容模式解析网页呢?在IE8以上版本的浏览器增加了一个X-UA-Compatible 头标记,用于为IE8指定不同的页面渲染模式. <meta http-equiv=&qu ...

  5. Scala基础(1)

    Scala基础语法 声明与定义: val,常量声明                       val  x:T(把x声明成一个类型为T的常量)  x是变量的名字,T是变量的类型          v ...

  6. SPIR-V*:面向 OpenCL™ 工作负载的英特尔® 显卡编译器默认接口

    英特尔® 显卡编译器最近从 SPIR* 转换到 SPIR-V*,作为面向 OpenCL™ 工作负载的中间表示.这看起来像编译器的内部变化,对用户来说不可见,但是这展示了我们支持 Khronos* 开放 ...

  7. [转载]JAVA内存分析——栈、堆、方法区 程序执行变化过程

    面向对象的内存分析 参考:http://www.sxt.cn/Java_jQuery_in_action/object-oriented.html :尚学堂JAVA300集-064内存分析详解_栈_堆 ...

  8. PHP学习 流程控制和数组

    flow control 流程控制decision structure 判断结构loop structure 循环结构 if(condition){statement1;} if(){}else{} ...

  9. 【Alpha】第二次Scrum meeting

    本次会议内容概括如下: 总结了今天各成员分配任务完成情况,对消耗时间进行统计 评估了各自对团队的贡献(影响)程度 初步讨论了日后需要逐步完成的一些任务并发布在github上 具体内容如下表所示: Me ...

  10. Linux内核分析第三周总结

    构造一个简单的Linux系统MenuOS 操作系统的"两把宝剑":中断上下文的切换(保存现场和恢复现场).进程上下文的切换 Linux内核源代码简介 --------------- ...