• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > 详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)

详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)

作者:彭泽0902 字体:[增加 减小] 来源:互联网 时间:2017-05-11

彭泽0902通过本文主要向大家介绍了详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

在生活中有一种东西几乎已经快要成为我们的另一个电子”身份证“,那就是二维码。无论是在软件开发的过程中,还是在普通用户的日常中,几乎都离不开二维码。二维码 (dimensional barcode) ,又称二维条码,是在一维条码的基础上扩展出的一种具有可读性的条码。设备扫描二维条码,通过识别条码的长度和宽度中所记载的二进制数据,可获取其中所包含的信息。相比一维条码,二维码记载更复杂的数据,比如图片、网络链接等。

今天介绍一种免费开源的二维码操作组件,ThoughtWorks.QRCode组件可以高效而稳定的生成我们需要的二维码,接下来我们详细的了解一下这个组件。

一.ThoughtWorks.QRCode组件概述:

QRCode库是一个.NET组件,可用于编码和解码QRCode。 QRCode是源自日本的二维条形码。 现在,它广泛应用于广泛的工业领域。 用于车辆部件跟踪和库存管理。QR代表“快速反应”。 它是日本公司Denso-Wave在1994年创建的,目的是高速解码内容。 如今,QR码被用于手机中以缓解数据输入。QRCode还可以打印在名片上或显示在任何显示器上,然后可以由移动电话捕获,只要移动电话具有读取QRCode的软件。QRCode库提供的功能包括:将内容编码为QR码图像,可以保存为JPEG,GIF,PNG或位图格式;解码QR码图像。

该库可用于任何.NET 2.0 Windows应用程序,ASP.NET Web应用程序或Windows Mobile设备应用程序。以下是该组件的声明”本文以及任何相关的源代码和文件均已获得代码项目开放许可证(CPOL)许可“。

二.ThoughtWorks.QRCode相关核心对象和方法解析:

有关ThoughtWorks.QRCode的主要类如下:

以上是采用.NET Reflector对DLL文件进行反编译,以此查看源代码。由于我只是下载了DLL文件,没有下载源码,所以直接利用.NET Reflector查看源码,接下来具体介绍一下组件的一些类和方法:

1.QRCodeEncoder:二维码编码类。

 public enum ENCODE_MODE
{
 ALPHA_NUMERIC,
 NUMERIC,
 BYTE
}

public enum ERROR_CORRECTION
{
 L,
 M,
 Q,
 H
}

public virtual Bitmap Encode(string content, Encoding encoding)
{
 bool[][] flagArray = this.calQrcode(encoding.GetBytes(content));
 SolidBrush brush = new SolidBrush(this.qrCodeBackgroundColor);
 Bitmap image = new Bitmap((flagArray.Length * this.qrCodeScale) + 1, (flagArray.Length * this.qrCodeScale) + 1);
 Graphics graphics = Graphics.FromImage(image);
 graphics.FillRectangle(brush, new Rectangle(0, 0, image.Width, image.Height));
 brush.Color = this.qrCodeForegroundColor;
 for (int i = 0; i < flagArray.Length; i++)
 {
  for (int j = 0; j < flagArray.Length; j++)
  {
   if (flagArray[j][i])
   {
    graphics.FillRectangle(brush, j * this.qrCodeScale, i * this.qrCodeScale, this.qrCodeScale, this.qrCodeScale);
   }
  }
 }
 return image;
}

</div>

2.QRCodeDecoder:二维码解码类。

 public virtual string decode(QRCodeImage qrCodeImage, Encoding encoding)
{
 sbyte[] src = this.decodeBytes(qrCodeImage);
 byte[] dst = new byte[src.Length];
 Buffer.BlockCopy(src, 0, dst, 0, dst.Length);
 return encoding.GetString(dst);
}

 
public virtual sbyte[] decodeBytes(QRCodeImage qrCodeImage)
{
 DecodeResult result;
 Point[] adjustPoints = this.AdjustPoints;
 ArrayList list = ArrayList.Synchronized(new ArrayList(10));
 while (this.numTryDecode < adjustPoints.Length)
 {
  try
  {
   result = this.decode(qrCodeImage, adjustPoints[this.numTryDecode]);
   if (result.CorrectionSucceeded)
   {
    return result.DecodedBytes;
   }
   list.Add(result);
   canvas.println("Decoding succeeded but could not correct");
   canvas.println("all errors. Retrying..");
  }
  catch (DecodingFailedException exception)
  {
   if (exception.Message.IndexOf("Finder Pattern") >= 0)
   {
    throw exception;
   }
  }
  finally
  {
   this.numTryDecode++;
  }
 }
 if (list.Count == 0)
 {
  throw new DecodingFailedException("Give up decoding");
 }
 int num = -1;
 int numErrors = 0x7fffffff;
 for (int i = 0; i < list.Count; i++)
 {
  result = (DecodeResult) list[i];
  if (result.NumErrors < numErrors)
  {
   numErrors = result.NumErrors;
   num = i;
  }
 }
 canvas.println("All trials need for correct error");
 canvas.println("Reporting #" + num + " that,");
 canvas.println("corrected minimum errors (" + numErrors + ")");
 canvas.println("Decoding finished.");
 return ((DecodeResult) list[num]).DecodedBytes;
}

</div>

3.QRCodeBitmapImage:位图图像。

 public class QRCodeBitmapImage : QRCodeImage
{
 // Fields
 private Bitmap image;

 // Methods
 public QRCodeBitmapImage(Bitmap image);
 public virtual int getPixel(int x, int y);

 // Properties
 public virtual int Height { get; }
 public virtual int Width { get; }
}
</div>
public interface QRCodeImage
{
 // Methods
 int getPixel(int x, int y);

 // Properties
 int Height { get; }
 int Width { get; }
}
</div>

以上是对ThoughtWorks.QRCode组件的一些方法的介绍,如果需要了解更多的方法,可以查看对应的源码。

三.ThoughtWorks.QRCode二维码操作实例:

1.生成二维码(对二维码没有进行设置)。

 /// <summary>
  /// 生成二维码
  /// </summary>
  /// <param name="content">带生成二维码的字符串</param>
  /// <param name="path">路径</param>
  /// <returns></returns>
  public static string CreatehoughtWorksQrCode(string content, string path)
  {
   if (string.IsNullOrEmpty(content))
   {
    throw new ArgumentNullException(content);
   }
   if (string.IsNullOrEmpty(path))
   {
    throw new ArgumentNullException(path);
   }
   var qrCodeEncoder = new QRCodeEncoder
   {
    QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE,
    QRCodeScale = 4,
    QRCodeVersion = 8,
    QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M
   };
   Image image = qrCodeEncoder.Encode(content);
   var filename = DateTime.Now.ToString("yyyymmddhhmmssfff") + ".jpg";
   var filepath = string.Format("{0}{1}", path, filename);
   FileStream fs = null;
   try
   {
    fs = new FileStream(filepath, FileMode.OpenOrCreate, FileAccess.Write);
    image.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);
   }
   catch (IOException ex)
   {
    throw new IOException(ex.Message);
   }
   finally
   {
    if (fs != null) fs.Close();
    image.Dispose();
   }
   return CodeDecoder(filepath);
  }
</div>

2.选择生成二维码的相关类型。

 /// <summary>
  /// 选择生成二维码的相关类型
  /// <param name="strData">要生成的文字或者数字,支持中文。如: "4408810820 深圳-广州" 或者:4444444444</param>
  /// <param name="qrEncoding">三种尺寸:BYTE ,ALPHA_NUMERIC,NUMERIC</param>
  /// <param name="level">大小:L M Q H</param>
  /// <param name="version">版本:如 8</param>
  /// <param name="scale">比例:如 4</param>
  /// <returns></returns>
  /// </summary>
  public void CreateCode_Choose(string strData, string qrEncoding, string level, int version, int scale)
  {
   if (string.IsNullOrEmpty(strData))
   {
    throw new ArgumentNullException(strData);
   }
   if (string.IsNullOrEmpty(qrEncoding))
   {
    throw new ArgumentNullException(qrEncoding);
   }
   if (string.IsNullOrEmpty(level))
   {
    throw new ArgumentNullException(level);
   }
   var qrCodeEncoder = new QRCodeEncoder();
   var encoding = qrEncoding;
   switch (encoding)
   {
    case "Byte":
     qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
     break;
    case "AlphaNumeri



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-05-11asp.net使用npoi读取excel模板并导出下载详解
  • 2017-05-11Asp.net实现MVC处理文件的上传下载功能实例教程
  • 2017-05-11asp.net membership 密码重设
  • 2017-05-11一步步做自己的webinstall安装包
  • 2017-05-11Visual Studio 2017设置版权的方法
  • 2017-05-11asp.net(C#) Xml操作(增删改查)练习
  • 2017-05-11asp.net下URL处理两个小工具方法
  • 2017-05-11asp.net获取select值的方法
  • 2017-05-11blog程序新版本V2.0 Beta完成,提供V1.0全部源码下载
  • 2018-08-20ASP.NET Core中使用xUnit进行单元测试

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • .net使用自定义类属性实例
    • ASP.net处理XML数据实例浅析
    • ASP.NET打开新页面而不关闭原来的页面 实例代码
    • upload上传单张图片
    • gridview中实现radiobutton的单选示例
    • Ajax Throws Sys.WebForms.PageRequestManagerErrorException with Response.Redirect的解决方法
    • ASP.NET2.0中用Gridview控件操作数据的代码
    • ASP.Net全局变量的设置和读取方法
    • VS2010/VS2013项目创建 ADO.NET连接mysql/sql server详细步骤
    • ASP.NET对大文件上传的解决方案

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有