zoukankan      html  css  js  c++  java
  • zxing二维码

      最近二维码用的很多,同时给了个zxing.dll和demo,用着还不错,就想着自己看看源码。于是搜索到一下资料:

      ZXing是一个开源Java类库用于解析多种格式的1D/2D条形码。目标是能够对QR编码、Data Matrix、UPC的1D条形码进行解码。 其提供了多种平台下的客户端包括:J2ME、J2SE和Android。

    首先,在其官网http://code.google.com/p/zxing/上去下载源码

    编译在其csharp目录下打开zxing.csproj文件,新建一个工程。在编译之前修改两个错误:

    源代码中有两处UTF-8的问题,会导致乱码,

    其一:com.google.zxing.qrcode.encoder.encoder类中的

    internal const System.String DEFAULT_BYTE_MODE_ENCODING = "ISO-8859-1";

    此处,将ISO-8859-1改为UTF-8

    其二:com.google.zxing.qrcode.decoder.DecodedBitStreamParser类的成员

    private const System.String UTF8 = "UTF8";

    应将UTF8改为UTF-8

    修改完之后,点重新生成编译出新的dll文件。

    将zxing.dll考入到你自己所需要的工程中,并添加引用。

    这样自己就可以试用了,主要是二维码的生成和识别两个用处:

    简单调用:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using ZXing;
    using ZXing.QrCode;
    using ZXing.Common;
    using ZXing.Rendering;
    using ZXing.QrCode.Internal;


           options = new QrCodeEncodingOptions { DisableECI = true,//将该属性设置为真的可以使用UTF-8编码 ErrorCorrection = ErrorCorrectionLevel.L,//指定使用误差校正的程度 CharacterSet = "UTF-8",//指定所使用的字符编码 PureBarcode = false,//不要把内容字符串到输出图像 Width = pictureBoxQr.Width, Height = pictureBoxQr.Height, Margin = 0 //边界 }; writer = new BarcodeWriter(); writer.Format = BarcodeFormat.QR_CODE; writer.Options = options; } Bitmap bitmap = writer.Write(textBoxText.Text); pictureBoxQr.Image = bitmap;
    二维码的生成:
    using com.google.zxing.qrcode;  
    
    using com.google.zxing;  
    
    using com.google.zxing.common;  
    
    using ByteMatrix = com.google.zxing.common.ByteMatrix;  
    
    using EAN13Writer = com.google.zxing.oned.EAN13Writer;  
    
    using EAN8Writer = com.google.zxing.oned.EAN8Writer;  
    
    using MultiFormatWriter = com.google.zxing.MultiFormatWriter;  
    
    private void button1_Click(object sender, EventArgs e)  
    
    {  
    
    string content = textBox1.Text;  
    
    ByteMatrix byteMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, 200, 200);  
    
    Bitmap bitmap = toBitmap(byteMatrix);  
    
    pictureBox1.Image = bitmap;  
    
    //writeToFile(byteMatrix, System.Drawing.Imaging.ImageFormat.Png, sFD.FileName);  
    
    //SaveFileDialog sFD = new SaveFileDialog();  
    
    //sFD.DefaultExt = "*.png|*.png";  
    
    //sFD.AddExtension = true;  
    
    //try  
    
    //{  
    
    // if (sFD.ShowDialog() == DialogResult.OK)  
    
    // {  
    
    // }  
    
    //}  
    
    //catch (Exception ex)  
    
    //{  
    
    // MessageBox.Show(ex.Message);  
    
    //}  
    
    }  
    
    public static void writeToFile(ByteMatrix matrix, System.Drawing.Imaging.ImageFormat format, string file)  
    
    {  
    
    Bitmap bmap = toBitmap(matrix);  
    
    bmap.Save(file, format);  
    
    }  
    
    public static Bitmap toBitmap(ByteMatrix matrix)   
    
    {   
    
    int width = matrix.Width;   
    
    int height = matrix.Height;   
    
    Bitmap bmap = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);   
    
    for (int x = 0; x < width; x++)   
    
    {   
    
    for (int y = 0; y < height; y++)   
    
    {   
    
    bmap.SetPixel(x, y, matrix.get_Renamed(x, y) != -1 ? ColorTranslator.FromHtml("0xFF000000") : ColorTranslator.FromHtml("0xFFFFFFFF"));   
    
    }   
    
    }   
    
    return bmap;   
    
    }  


    二维码的读取识别:

     

    rivate void button1_Click(object sender, EventArgs e)   
    
    {   
    
    if (this.openFileDialog1.ShowDialog() != DialogResult.OK)   
    
    {   
    
    return;   
    
    }   
    
    Image img = Image.FromFile(this.openFileDialog1.FileName);   
    
    Bitmap bmap;   
    
    try   
    
    {   
    
    bmap = new Bitmap(img);   
    
    }   
    
    catch (System.IO.IOException ioe)   
    
    {   
    
    MessageBox.Show(ioe.ToString());   
    
    return;   
    
    }   
    
    if (bmap == null)   
    
    {   
    
    MessageBox.Show("Could not decode image");   
    
    return;   
    
    }   
    
    LuminanceSource source = new RGBLuminanceSource(bmap, bmap.Width, bmap.Height);   
    
    com.google.zxing.BinaryBitmap bitmap = new com.google.zxing.BinaryBitmap(new COMMON.HybridBinarizer(source));   
    
    Result result;   
    
    try   
    
    {   
    
    result = new MultiFormatReader().decode(bitmap);   
    
    }   
    
    catch(ReaderException re)   
    
    {   
    
    MessageBox.Show(re.ToString());   
    
    return;   
    
    }   
    
    MessageBox.Show(result.Text);   
    
    }  

  • 相关阅读:
    【C#新特性】不用out ref同时返回多个值-元组Tuple
    【数据处理】SQL Server高效大数据量存储方案SqlBulkCopy
    【WinForm程序】注册热键快捷键切换
    【面试题】新东方.NET工程师面试题总结
    【EF框架】另一个 SqlParameterCollection 中已包含 SqlParameter。
    【EF框架】使用params参数传值防止SQL注入报错处理
    【EF框架】EF DBFirst 快速生成数据库实体类 Database1.tt
    【接口安全】接口合法性验证加密验签SIGN 签名规则
    【激活码汇总】各种软件激活码整理 亲测可用
    requests实现接口自动化(一)
  • 原文地址:https://www.cnblogs.com/liaocheng/p/4551353.html
Copyright © 2011-2022 走看看