C#中创建与读取QRCode的方法 - [C#实例]
在学校的物流实验室做项目的同学问我了解不了解QRCode的一些内容,恰好之前有做过这方面的小应用,于是整理总结了一下C#中操作QRCode的方法,首先先要了解一下什么是QRCode,借着物联网概念,跟QRCode有关的硬件实体与软件应用在我们身边越来越多,不知将来有一天是否会彻底改变我们的生活方式?
QR 码是二维条码的一种,QR 来自英文 “Quick Response” 的缩写,即快速反应的意思,源自发明者希望 QR 码可让其内容快速被解码。QR码比普通条码可储存更多资料,亦无需像普通条码般在扫描时需直线对准扫描器。 QR 码呈正方形,只有黑白两色。在4个角落的其中3个,印有较小,像“回”字的的正方图案。这 3 个是帮助解码软件定位的图案,使用者不需要对准,无论以任何角度扫描,资料仍可正确被读取。 更详细介绍。
QRCode在生活中有着多方面的应用,例如火车票上有QRCode可以用来保存信息,现在很多手机软件都提供扫描QRCode下载,而一号店网上商店在上海地铁那里开设有“墙贴超市”,路人只要用手机扫描某商品的QRCode即可下单购买等等。而从开发者的角度来看,主要包括有创建QRCode与读取QRCode信息两方面的需求。在这里主要考虑用C#去实现QR Code的创建与读取。
一、QR Code的创建方法一
创建QR Code的方式有多种,比较简单的是直接引用别人已经编译好的Dll即可实现功能,下载那dll并添加引用后即可使用。
关键的代码如下:
private void QRCode_Click(object sender, RoutedEventArgs e) { QRCodeWriter qrWrite = new QRCodeWriter(); ByteMatrix bm = qrWrite.encode(TxtSource.Text, BarcodeFormat.QR_CODE, 150, 150); this.QrImg.Source = ConvertByteMartixToWriteableBitmap(bm); } public WriteableBitmap ConvertByteMartixToWriteableBitmap(ByteMatrix bm) { WriteableBitmap wb = new WriteableBitmap(bm.Width, bm.Height); for (int x = 0; x <= wb.PixelWidth - 1; x++) { for (int y = 0; y <= wb.PixelHeight - 1; y++) { if (bm.Array[y][x] == -1) { //白色 wb.Pixels[wb.PixelWidth * y + x] = BitConverter.ToInt32(BitConverter.GetBytes(0xffffffff), 0); } else { //黑色 wb.Pixels[wb.PixelWidth * y + x] = BitConverter.ToInt32(BitConverter.GetBytes(0xff000000), 0); } } } return wb; }
二、QR Code的创建方法二
还有一种更为简单的方式就是通过Google Chart API 来生成QR Code,调用代码如下:
private void btnCreate_Click(object sender, RoutedEventArgs e) { var imgSrc = "http://chart.apis.google.com/chart?chs=" + this.txtSize.Text + "&chl=" + this.txtContent.Text + "&choe=UTF-8&cht=qr"; imgSource.Source=(new BitmapImage(new Uri(imgSrc))); }
也就是说需要用户提供两个参数,一个为生成QR Code图像的大小,以及要生成QR Code所包含的内容。
三、QR Code的读取
QR Code创建后当然就是需要去读取里面的信息了,与创建QR Code方法一中相似,我们需要通过那个dll提供的函数去识别QR Code里的内容,代码如下:
private void btnReadQRCode_Click(object sender, RoutedEventArgs e) { WriteableBitmap wb = new WriteableBitmap(imageSource, null); QRCodeReader qrRead = new QRCodeReader(); RGBLuminanceSource luminiance = new RGBLuminanceSource(wb, wb.PixelWidth, wb.PixelHeight); HybridBinarizer binarizer = new HybridBinarizer(luminiance); BinaryBitmap binBitmap = new BinaryBitmap(binarizer); Result results; try { results = qrRead.decode(binBitmap); txtShow.Text = results.Text; } catch (Exception ex) { txtShow.Text = "Error:" + ex.GetType() + ":" + ex.Message; } }
先加载入要查询的QR Code图片,然后就可以通过这个方式来获取QR Code里的信息。
@:卿之 → http://www.cnblogs.com/wpdev
©:博文是本人当时的学习笔记及知识整理,由于自身局限错误在所难免,敬请斧正.
©:本文版权属于博客园和本人,版权基于署名 2.5 中国大陆许可协议发布,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接和署名卿之(包含链接),不得删节,否则保留追究法律责任的权利。