zoukankan      html  css  js  c++  java
  • zxing二维码的生成与解码(C#)

    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 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; 
    }

    二维码的读取识别:

    private 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); 
    }
  • 相关阅读:
    转【jenkins插件】
    【BZOJ】1492: [NOI2007]货币兑换Cash
    【BZOJ】3295: [Cqoi2011]动态逆序对
    【算法专题】卡特兰数(计数数列)
    【CodeForces】908 E. New Year and Entity Enumeration
    【CodeForces】698 C. LRU
    【CodeForces】908 D. New Year and Arbitrary Arrangement
    【BZOJ】4032: [HEOI2015]最短不公共子串(LibreOJ #2123)
    【BZOJ】4596: [Shoi2016]黑暗前的幻想乡
    【BZOJ】4766: 文艺计算姬
  • 原文地址:https://www.cnblogs.com/hnsongbiao/p/9145285.html
Copyright © 2011-2022 走看看