博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
zxing二维码
阅读量:6071 次
发布时间:2019-06-20

本文共 3941 字,大约阅读时间需要 13 分钟。

  最近二维码用的很多,同时给了个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);   }

 

转载地址:http://ningx.baihongyu.com/

你可能感兴趣的文章
数组扩展方法之求和
查看>>
astah-professional-7_2_0安装
查看>>
函数是对象-有属性有方法
查看>>
uva 10107 - What is the Median?
查看>>
Linux下基本栈溢出攻击【转】
查看>>
c# 连等算式都在做什么
查看>>
使用c:forEach 控制5个换行
查看>>
java web轻量级开发面试教程摘录,java web面试技巧汇总,如何准备Spring MVC方面的面试...
查看>>
根据调试工具看Vue源码之组件通信(一)
查看>>
Thrift RPC 系列教程(5)—— 接口设计篇:struct & enum设计
查看>>
斯坦福-随机图模型-week1.5
查看>>
灵活的运用Model类
查看>>
hadoop 之分布式安装
查看>>
使用ansible工具部署ceph
查看>>
linux系列博文---->深入理解linux启动运行原理(一)
查看>>
Android反编译(一) 之反编译JAVA源码
查看>>
结合当前公司发展情况,技术团队情况,设计一个适合的技术团队绩效考核机制...
查看>>
python-45: opener 的使用
查看>>
cad图纸转换完成的pdf格式模糊应该如何操作?
查看>>
Struts2与Struts1区别
查看>>