1.下载Qrcode库源码,下载地址:http://www.codeproject.com/Articles/20574/Open-Source-QRCode-Library

2.打开源码时,部分类库可能会加载失败,不用理会,只需正常加载 QRCodeLib、QRCodeSampleApp 即可。

3.生成时,会提示编译出错,Error'ThoughtWorks.QRCode.Properties.Resources' does not contain a definition for 'GetResource'。

需修改错误提示的代码行为:

MemoryStream memoryStream = new MemoryStream((byte[])Resources.ResourceManager.GetObject(fileName));

修改支持中文



修改库QRCodeLib中的类QRCodeEncoder.cs

 

    public virtual Bitmap Encode(String content)

    {

      if (QRCodeUtility.IsUniCode(content))

      {

         return Encode(content, Encoding.Unicode);

      }

      else

      {

         return Encode(content, Encoding.ASCII);

      }

    }

为 

public virtual Bitmap Encode(String content)

    {

        if (QRCodeUtility.IsUniCode(content))

{

return Encode(content, Encoding.GetEncoding("gb2312"));

}

else

{

return Encode(content, Encoding.ASCII);

}

    }

对应的,QRCodeDecoder.cs类中的相应代码也要改。这样就中英文支持了。(改为UTF8也可以)

扩展





1、修改 QRCodeEncoder.cs 跟 QRCodeDecoder.cs

      Search一下,將 Encoding.Unicode 替換成 Encoding.UTF8

2、修改 QRCodeUtility.cs

      將 UnicodeEncoding encoding = new UnicodeEncoding();改成 UTF8Encoding encoding = new UTF8Encoding();

      

使用 

QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();

            String encoding = cboEncoding.Text ;

            if (encoding == "Byte") {

                qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;

            } else if (encoding == "AlphaNumeric") {

                qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.ALPHA_NUMERIC;            

            } else if (encoding == "Numeric") {

                qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.NUMERIC;            

            }

            try {

                int scale = Convert.ToInt16(txtSize.Text);

                qrCodeEncoder.QRCodeScale = scale;

            } catch (Exception ex) {

                MessageBox.Show("Invalid size!");

                return;

            }

            try {

                int version = Convert.ToInt16(cboVersion.Text) ;

                qrCodeEncoder.QRCodeVersion = version;

            } catch (Exception ex) {

                MessageBox.Show("Invalid version !");

            }

            string errorCorrect = cboCorrectionLevel.Text;

            if (errorCorrect == "L")

                qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L;

            else if (errorCorrect == "M")

                qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;

            else if (errorCorrect == "Q")

                qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.Q;

            else if (errorCorrect == "H")

                qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;

            Image image;

            String data = txtEncodeData.Text;

            image = qrCodeEncoder.Encode(data);                      

            picEncode.Image = image;

            

带图片 

/// <summary>  

      /// 生成二维码.  

      /// </summary>  

      /// <param name="data">需要添加进去的文本</param>  

      /// <returns></returns>  

      public System.Drawing.Image GCode(String data)  

      {  

          QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();  

          qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;  

          qrCodeEncoder.QRCodeScale = 5;  

          qrCodeEncoder.QRCodeVersion = 7;  

   

          qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L;  

          var pbImg = qrCodeEncoder.Encode(data, System.Text.Encoding.UTF8);  

         var width = pbImg.Width / 10;  

        var dwidth = width * 2;  

          Bitmap bmp = new Bitmap(pbImg.Width + dwidth, pbImg.Height + dwidth);  

          Graphics g = Graphics.FromImage(bmp);  

          var c = System.Drawing.Color.White;  

          g.FillRectangle(new SolidBrush(c), 0, 0, pbImg.Width + dwidth, pbImg.Height + dwidth);  

          g.DrawImage(pbImg, width, width);  

          g.Dispose();  

         return bmp;  

      }  

   

     /// <summary>  

      /// 调用此函数后使此两种图片合并,类似相册,有个  

    /// 背景图,中间贴自己的目标图片  

     /// </summary>  

      /// <param name="sourceImg">粘贴的源图片</param>  

      /// <param name="destImg">粘贴的目标图片</param>  

      public static System.Drawing.Image CombinImage(System.Drawing.Image imgBack, string destImg)  

      {  

  

          System.Drawing.Image img = System.Drawing.Image.FromFile(destImg);        //照片图片    

          if (img.Height != 50 || img.Width != 50) {  

              img = KiResizeImage(img, 50, 50, 0);  

          }  

          Graphics g = Graphics.FromImage(imgBack);  

   

          g.DrawImage(imgBack, 0, 0, imgBack.Width, imgBack.Height);      //g.DrawImage(imgBack, 0, 0, 相框宽, 相框高);   

   

          //g.FillRectangle(System.Drawing.Brushes.White, imgBack.Width / 2 - img.Width / 2 - 1, imgBack.Width / 2 - img.Width / 2 - 1,1,1);//相片四周刷一层黑色边框  

   

          //g.DrawImage(img, 照片与相框的左边距, 照片与相框的上边距, 照片宽, 照片高);  

   

         g.DrawImage(img, imgBack.Width / 2 - img.Width / 2, imgBack.Width / 2 - img.Width / 2 , img.Width, img.Height);  

          GC.Collect();  

          return imgBack;  

      }  

   

      /// <summary>  

      /// Resize图片  

      /// </summary>  

      /// <param name="bmp">原始Bitmap</param>  

      /// <param name="newW">新的宽度</param>  

      /// <param name="newH">新的高度</param>  

      /// <param name="Mode">保留着,暂时未用</param>  

      /// <returns>处理以后的图片</returns>  

      public static System.Drawing.Image KiResizeImage(System.Drawing.Image bmp, int newW, int newH, int Mode)  

      {  

          try 

          {  

              System.Drawing.Image b = new Bitmap(newW, newH);  

              Graphics g = Graphics.FromImage(b);  

   

              // 插值算法的质量  

              g.InterpolationMode = InterpolationMode.HighQualityBicubic;  

   

             g.DrawImage(bmp, new Rectangle(0, 0, newW, newH), new Rectangle(0, 0, bmp.Width, bmp.Height), GraphicsUnit.Pixel);  

             g.Dispose();  

   

              return b;  

          }  

         catch 

          {  

              return null;  

      }  

}

参考:http://www.daojia100.com/jingyan/info/51b2def12e05e81a20c042a8.aspx

完整Demo下载:http://download.csdn.net/detail/a497785609/8387311

版权声明:本文为博主原创文章,未经博主允许不得转载。

C# Qrcode生成二维码支持中文,带图片,带文字 2015-01-22 15:11 616人阅读 评论(1) 收藏的更多相关文章

  1. C#Qrcode生成二维码支持中文,带图片,带文字

    C#Qrcode生成二维码支持中文带图片的操作请看二楼的帖子,当然开始需要下载一下C#Qrcode的源码 下载地址 : http://www.codeproject.com/Articles/2057 ...

  2. Qrcode生成二维码支持中文,带图片,带文字

    1.下载Qrcode库源码, 下载地址:http://www.codeproject.com/Articles/20574/Open-Source-QRCode-Library2.打开源码时, 部分类 ...

  3. jquery.qrcode生成二维码支持中文

    基本使用方法: 1.首先在页面中加入jquery库文件和qrcode插件. <script type="text/javascript" src="jquery.j ...

  4. 使用jquery-qrcode在页面上生成二维码,支持中文

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. 使用jquery.qrcode生成二维码支持logo,和中文

    /* utf.js - UTF-8 <=> UTF-16 convertion * * Copyright (C) 1999 Masanao Izumo <iz@onicos.co. ...

  6. 使用jquery.qrcode生成二维码及常见问题解决方案

    转载文章  使用jquery.qrcode生成二维码及常见问题解决方案 一.jquery.qrcode.js介 jquery.qrcode.js 是一个纯浏览器 生成 QRcode 的 jQuery ...

  7. C# 利用QRCode生成二维码图片

    网上生成二维码的组件是真多,可是真正好用的,并且生成速度很快的没几个,QRCode就是我在众多中找到的,它的生成速度快.但是网上关于它的使用说明,真的太少了,大都是千篇一律的复制粘贴.这是本要用它做了 ...

  8. Qrcode生成二维码的参数总结 及最小尺寸的测试

    Qrcode生成二维码,做过很多实验,探索最小规格的二维码到底是多少尺寸,和最高规格的二维码到底是多大尺寸.现在我总结总结: 有两种思路: 1.生成规格高的二维码,然后压缩到自己想要的尺寸的二维码.这 ...

  9. qrcode 生成二维码

    qrcode 生成二维码 Demo: https://www.hgnulb.cn/freedom/qrcode/qrcode.html qrcodeGithub 地址: https://github. ...

随机推荐

  1. idea修改默认快捷键

    点击file ,选择settings. 输入keymap: 因为多数人使用的都是eclipse,比较容易上手,习惯了eclipse的键位,如 此就能更换. 也可以在对应的操作上,设置自己熟悉的键位.

  2. python协程

    http://bingotree.cn/?p=63 协程与yield的介绍,轻松搞笑. http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d ...

  3. peewee 字段属性help_text的支持问题

    至少在__version__ = '2.6.0'的时候,给字段添加help_text的时候,在数据库的ddl语句里面是没有comment的. 看了下源码,顺藤摸瓜,最终定位到了字段(Field类)的_ ...

  4. Python统计百分比及排序

    source.txt: 60行 89 91 93 90 92 92 94 92 89 95 93 92 90 92 93 94 94 92 90 92 92 92 ... 统计各个值的百分比,并排序 ...

  5. Android SDK 在线更新镜像服务器

    大连东软信息学院镜像服务器地址:- http://mirrors.neusoft.edu.cn 端口:80 北京化工大学镜像服务器地址:- IPv4: http://ubuntu.buct.edu.c ...

  6. cpu中断

    中断是什么?cpu在中断的时候做了些什么? 答:中断就是中止当前正在执行的工作,而去执行引起中断的事件,当引起中断的事件执行完毕之后,CPU继续执行以前的未执行完的工作. CPU暂时中断当前正在执行的 ...

  7. ios swift generator 文章推荐

    https://medium.com/swift-programming/sequence-beyond-primitive-iterations-in-swift-80bc2507d8cc /// ...

  8. 服务器×××上的MSDTC不可用解决办法

    MSDTC(分布式交易协调器),协调跨多个数据库.消息队列.文件系统等资源管理器的事务.该服务的进程名为Msdtc.exe,该进程调用系统Microsoft Personal Web Server和M ...

  9. iOS基础框架的搭建/国际化操作

    1.基础框架的搭建 1.1 pod引入常用的第三方类库 1.2 创建基础文件夹结构/目录结构 Resource———存放声音/图片/xib/storyboard 等资源文件 Define——宏定义, ...

  10. linux下动态链接库解决方案(一)

    1.c++无法直接调用用c写的动态链接库,如果调用的话可能需要用到一些交叉编译的知识: 2.在c++写的动态链接库无法被调用成功的反思: 在linux下,通常都是使用g++编译器("g++ ...