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

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 = ; x < width; x++)   

{   

for (int y = ; y < height; y++)   

{   

bmap.SetPixel(x, y, matrix.get_Renamed(x, y) != - ? 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);   

}  

zxing二维码的更多相关文章

  1. Atitit zxing二维码qr码识别解析

    Atitit zxing二维码qr码识别解析 1.1. qr码识别解析 by zxing1 1.2. 解码lib:qrcode.jar  2 1.3. atitit.二维码生成总结java zxing ...

  2. Android项目实战(二十八):Zxing二维码实现及优化

    前言: 多年之前接触过zxing实现二维码,没想到今日项目中再此使用竟然使用的还是zxing,百度之,竟是如此牛的玩意. 当然,项目中我们也许只会用到二维码的扫描和生成两个功能,所以不必下载完整的ja ...

  3. 程序猿媛 九:Adroid zxing 二维码3.1集成(源码无删减)

    Adroid zxing 二维码3.1集成 声明:博文为原创,文章内容为,效果展示,思路阐述,及代码片段. 转载请保留原文出处“http://my.oschina.net/gluoyer/blog”, ...

  4. 谷歌zxing 二维码生成工具

    一.加入maven依赖 <!-- 谷歌zxing 二维码 --> <dependency> <groupId>com.google.zxing</groupI ...

  5. (转载)Android项目实战(二十八):Zxing二维码实现及优化

    Android项目实战(二十八):Zxing二维码实现及优化   前言: 多年之前接触过zxing实现二维码,没想到今日项目中再此使用竟然使用的还是zxing,百度之,竟是如此牛的玩意. 当然,项目中 ...

  6. Android项目实战(四十四):Zxing二维码切换横屏扫描

    原文:Android项目实战(四十四):Zxing二维码切换横屏扫描 Demo链接 默认是竖屏扫描,但是当我们在清单文件中配置横屏显示的时候: <activity android:name=&q ...

  7. ZXing二维码生成在Unity3D中出错,数组超出界限的解决办法

    错误截图: IndexOutOfRangeException: Array index is out of range.ZXing.Color32Renderer.Render (ZXing.Comm ...

  8. Android—ZXing二维码扫描遇到的问题

    最近工作中需要开发带有二维码扫描功能的软件(基于开源项目ZXing),遇到的问题记录一下,也希望给大家带来帮助. 1.首先因为扫描要开摄像机所以加权限是一定的,不然后面什么都不能进行 <uses ...

  9. Google Zxing 二维码生成与解析

    生成二维码的开源项目可谓是琳琅满目,SwetakeQRCode.BarCode4j.Zxing...... 前端有JQuery-qrcode,同样能实现生成二维码. 选择Zxing的原因可能是对 Go ...

  10. ZXing二维码的生成和解析

    Zxing是Google提供的关于条码(一维码.二维码)的解析工具,提供了二维码的生成与解析的方法, 现在我简单介绍一下使用Java利用Zxing生成与解析二维码 注意: 二维码的生成需要借助辅助类( ...

随机推荐

  1. webserver nginx / https / upstream

    s nginx server_name 配置 https://segmentfault.com/q/1010000008426747?_ea=1647456 问题:我的host还没有域名,server ...

  2. UEFI BIOS Rootkit Analysis

    catalog . BIOS简介 . UEFI BIOS . EFI编程简介 . UEFI Rootkit 1. BIOS简介 BIOS("Basic Input Output System ...

  3. CentOS在VirtualBox虚拟机中网络配置

    1. 宿主机网络参数  2. 右键设置,对虚拟机进行设置网络 3.虚拟机   vi   /etc/sysconfig/network-scripts/ifcfg-eth1   打开该配置文件 eth0 ...

  4. Process和ProcessBuilder入门【原】

    ProcessBuilder优点 ProcessBuilder(XXX).start()和Runtime.exec(XXX)功能相同,主要优点在使用过程中感受有: 前者是jdk1.5后的新方式 配置环 ...

  5. js方法参数中含有单引号双引号的处理

    最近在做项目时,遇到一个问题.当在js脚本中,拼接生成一个tr,然后添加到一个表格里. //假定testval是从后台传过来的数据 var testval = "含有'半角单引号的字符串&q ...

  6. 2018牛客网暑期ACM多校训练营(第二场)G Transform(二分)

    题意 在一个数轴上有n个集装箱,第 i 个集装箱的位置为x[i],且在集装箱内装有a[i]件货物,现在将这些集装箱内的货物进行移动(将一件货物从第 i 个集装箱移动到第 j 个集装箱的花费就为2*ab ...

  7. vue-router导航钩子

    Vue路由中的导航钩子,可以用来拦截导航,让它完成跳转. 全局导航钩子 当一个导航触发时,全局的 before 钩子按照创建顺序调用.钩子是异步解析执行,此时导航在所有钩子 resolve 完之前一直 ...

  8. git步骤

    1.New一个Repositories 2.拿到这个仓库的URL 3.git clone https://github.com/zhuobo/new.git 4.进入到clone下来的文件夹,然后gi ...

  9. 15个新鲜出炉的 Photoshop 文本效果教程

    文本效果可能是 Photoshop 图形设计中最常用和最通用的技术之一.最重要的是你可以使用任何效果,风格或纹理来产生有趣的排版,越多人尝试过它并制作了一些精彩的教程.所以这篇文章旨在为您提供全面的 ...

  10. mini2440串口使用

    1.安装驱动CH340-USB转串口驱动,安装完成最好重启一下电脑. 2.用串口线将开发板与pc项链,并打开电源,通过电脑设备管理器查看端口(下一步要用到). 3.运行SecureCRT.exe,并建 ...