zxing二维码的生成与解码(C#)(附例子)

分类:.Net知识问答| 发布:camnprbubuol| 查看: | 发表时间:2011/11/17

更新于:2015-10-27 18:31:11

例子下载zxing二维码.rar在线例子地址在线生成二维码、条形码(带读取码图)

二维码的生成:

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

源代码中有两处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

来源:http://blog.csdn.net/NickWar/archive/2010/06/21/5684134.aspx

简介 
      最近的Widget项目用到需要用摄像头来处理条形码,章师兄推荐了ZXing这个开源的项目,于是做一简单的调研。 
ZXing是一个开源Java类库用于解析多种格式的1D/2D条形码。目标是能够对QR编码、Data Matrix、UPC的1D条形码进行解码。 其提供了多种平台下的客户端包括:J2ME、J2SE和Android。 
当前,ZXing主要支持以下条形码: 
&bull;UPC-A and UPC-E 
&bull;EAN-8 and EAN-13 
&bull;Code 39 
&bull;Code 128 
&bull;QR Code 
&bull;Data Matrix (’alpha’ quality) 
&bull;ITF 
       首先,在http://code.google.com/p/zxing/上下载到ZXing的应用程序包,解压下载到的程序包后,我们可以看到整个应用程序分为一些组件。如下: 
1.core: 核心包,是整个应用的主要组件组成部分。 
2.javame: 为JavaME来定制的客户端工具。 
3.javase: 为PC端定制的客户端工具。 
4.android: 为Android端定制的客户端工具。 
5.androidtest: Android测试应用程序,里面有在其它程序中使用此应用的示例。 
基本测试 
     ZXing程序的运行需要我们使用Ant去打包编译之后才可。在这里,我主要调研了在PC端,在WTK上及android上的运行。 
1.PC端使用Java应用程序调试 
     首先,Build一下core与javase两个包,如下: 

      编译完毕后,我们来运行程序,如下: 

控制台输入代码代码  
  1. cd core   
  2. ant   
  3. cd ../javase   
  4. ant  
控制台输入代码代码  
  1. cd .. java -cp javase/javase.jar;core/core.jar com.google.zxing.client.j2se.GUIRunner  

    运行后会弹出一个文件选择器,我们选取事先准备好的一张条形码图后,可以看出,对于给出的条形码图,程序将其读出到图片下的一个标签中。 
2.在NOKIA N82上程序调试 
    首先,我们得保证我们的机器已经安装了WTK。之后,我们必须下载Proguard (http://proguard.sourceforge.net/downloads.html)到本地,将其中的proguard.jar拷备到WTK的bin目录下,修改zxing根目录下的build.properties文件中的wtk-home属性就可以了(注意,对于windows环境中使用,目录分隔符为两个斜杠)之后可以开始编译: 

控制台输入代码代码  
  1. cd core  
  2. ant  
  3. cd ../javame  
  4. ant  

    在编译之后,会在zxing的javame目录下生成一个BarcodeReader.jar与BarcodeReader.jad文件。我们直接双击jad文件就可以在WTK模拟器中使用了。 
3.在Android模拟器上程序调试 
    首先,我们得保证我们机器有有现成的Andorid SDK。同时保证在WTK的bin目录下存在proguard.jar,并在build.properties中配置了wtk-home与android-home属性,之后开始编译程序: 
 

控制台输入代码代码  
  1.  cd core  
  2.  ant clean build-no-debug  
  3.  cd ../android  
  4.  ant  


   程序编译完成之后,就会在android下的bin目录中生成一个BarcodeScanner-debug.apk程序,我们可以使用Android模拟器为我们提供的adb工具来完成测试。执行: 

   

控制台输入代码代码  
  1. adb install bin/BarcodeReader.apk  

就会打开Andorid的模拟器并将我们的应用程序安装到Android中

例子下载zxing二维码.rar在线例子地址在线生成二维码、条形码(带读取码图)

365据说看到好文章不转的人,服务器容易宕机
原创文章如转载,请注明:转载自郑州网建-前端开发 http://camnpr.com/
本文链接:http://camnpr.com/net-wiki/501.html