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里的信息。

posted @ 2011-09-17 20:27  卿之  阅读(6115)  评论(2编辑  收藏  举报
无觅相关文章插件,快速提升流量