http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 49634|回复: 22
打印 上一主题 下一主题

[C#语言基础] C#Qrcode生成二维码支持中文,带图片,带文字

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-18 13:39:35 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
               C#Qrcode生成二维码支持中文
带图片的操作请看二楼的帖子
当然开始需要下载一下C#Qrcode的源码 下载地址 : http://www.codeproject.com/Articles/20574/Open-Source-QRCode-Library
直接下载
QRCode.zip (2.35 MB, 下载次数: 989)
然后需要修改一些代码用于支持中文
修改代码的时候会遇到可能遇到的问题
问题一(这个问题我遇到了):
调试Winform平台的例子时出现如下提 示:
  1. Error'ThoughtWorks.QRCode.Properties.Resources' does not contain a definition for 'GetResource'。
复制代码
只要把这些出错的地方改成:
[C#] 纯文本查看 复制代码
MemoryStream memoryStream = new MemoryStream((byte[])Resources.ResourceManager.GetObject(fileName));

  就可以了。
问题二:
调试WM版的示例程序在Encode时,出现IndexOutOfRangeException in rsTemp 的超出索引最大值异常,它在rsTemp[rsBlockNumber][j] = codewords[i2];这里抛出异常~
  
    原本我以为是程序逻辑出错,后来经过对比桌面版和WM版的类库,发现没有错啊,然后终于找到一个比较“笨”的解决方案:如下:
  我注意到,在QRCodeMobileLib项目下的QRCodeEncoder.cs类中,定义了个:
  [code=csharp]internal static String DATA_PATH = "qrcode_data";[/code]
  此行代码在桌面版被注释掉了,我猜是不是要把资源文件拷贝到WM程序的这个目录下呢?好吧,于是动手,在QRCodeWindowsMobile5项目下建立一个新文件夹,名字是qrcode_data,然后再拷贝那些资源文件到此目录。
  然后设置这些资源文件的生成动作为(复制,内容)好了,然后再重新调试一下,Encode~通过!
修改支持中文:
修改库QRCodeLib中的类QRCodeEncoder.cs
   
[C#] 纯文本查看 复制代码
 public virtual Bitmap Encode(String content)
    {
    if (QRCodeUtility.IsUniCode(content))
    {
    return Encode(content, Encoding.Unicode);
    }
    else
    {
    return Encode(content, Encoding.ASCII);
    }
    } 


   
[C#] 纯文本查看 复制代码
public virtual Bitmap Encode(String content)
    {
    if (QRCodeUtility.IsUniCode(content))
    {
    return Encode(content, Encoding.GetEncoding("gb2312"));
    }
    else
    {
    return Encode(content, Encoding.ASCII);
    }
    } 

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

扩展
  1.修改 QRCodeEncoder.cs 跟 QRCodeDecoder.cs
  Search一下,將 Encoding.Unicode 替換成 Encoding.UTF8
  
  2.修改 QRCodeUtility.cs
  
[C#] 纯文本查看 复制代码
將 UnicodeEncoding encoding = new UnicodeEncoding();
改成 UTF8Encoding encoding = new UTF8Encoding();

相关使用代码如下
[C#] 纯文本查看 复制代码
 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;


本帖被以下淘专辑推荐:



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
23
发表于 2024-2-10 21:11:52 | 只看该作者
感谢分享 谢谢
22
发表于 2021-2-17 13:52:11 | 只看该作者
下载看看
回复

使用道具 举报

21
发表于 2020-8-18 11:39:40 | 只看该作者
我想用下这个类库,怎么下载?
20
发表于 2015-8-26 11:37:13 | 只看该作者
赞一个
回复

使用道具 举报

19
发表于 2014-10-3 16:32:02 | 只看该作者
正学习如何生成二维码
18
发表于 2014-7-28 09:12:10 | 只看该作者
扫描能扫出图片么?
17
发表于 2014-7-25 10:44:07 | 只看该作者
站长苏飞 发表于 2013-3-18 13:48
下面是带图片的方式
[mw_shl_code=csharp,true]///   
      /// 生成二维码.  

真是难得给力的帖子啊,强烈支持楼主。
16
 楼主| 发表于 2013-6-8 11:23:11 | 只看该作者
゛浮尘 发表于 2013-6-8 10:32
生成中文用byte可以,为什么用AlphaNumeric不行呢

你确定是修改正确的,我亲测过是正常的。你再细看下我的文章。别丢了什么东西
15
发表于 2013-6-8 10:32:14 | 只看该作者
生成中文用byte可以,为什么用AlphaNumeric不行呢
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-5-9 12:38

© 2014-2021

快速回复 返回顶部 返回列表