千家信息网

DotNet二维码操作组件ThoughtWorksQRCode怎么用

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章给大家介绍DotNet二维码操作组件ThoughtWorks.QRCode怎么用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在生活中有一种东西几乎已经快要成为我们的另一
千家信息网最后更新 2026年11月03日DotNet二维码操作组件ThoughtWorksQRCode怎么用

这篇文章给大家介绍DotNet二维码操作组件ThoughtWorks.QRCode怎么用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

在生活中有一种东西几乎已经快要成为我们的另一个电子"身份证",那就是二维码。无论是在软件开发的过程中,还是在普通用户的日常中,几乎都离不开二维码。二维码 (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;}

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

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; }}
public interface QRCodeImage{ // Methods int getPixel(int x, int y); // Properties int Height { get; } int Width { get; }}

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

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

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

 ///   /// 生成二维码  ///   /// 带生成二维码的字符串  /// 路径  ///   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);  }

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

 ///   /// 选择生成二维码的相关类型  /// 要生成的文字或者数字,支持中文。如: "4408810820 深圳-广州" 或者:4444444444  /// 三种尺寸:BYTE ,ALPHA_NUMERIC,NUMERIC  /// 大小:L M Q H  /// 版本:如 8  /// 比例:如 4  ///   ///   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 "AlphaNumeric":     qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.ALPHA_NUMERIC;     break;    case "Numeric":     qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.NUMERIC;     break;    default:     qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;     break;   }   qrCodeEncoder.QRCodeScale = scale;   qrCodeEncoder.QRCodeVersion = version;   switch (level)   {    case "L":     qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L;     break;    case "M":     qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;     break;    case "Q":     qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.Q;     break;    default:     qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;     break;   }   Image image = null;   FileStream fs = null;   try   {    //文字生成图片    image = qrCodeEncoder.Encode(strData);    var filename = DateTime.Now.ToString("yyyymmddhhmmssfff") + ".jpg";    var filepath = HttpContext.Current.Server.MapPath(@"~\Upload") + "\\" + filename;    fs = new FileStream(filepath, FileMode.OpenOrCreate, FileAccess.Write);    image.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);   }   catch (IOException ioex)   {    throw new IOException(ioex.Message);   }   catch (Exception ex)   {    throw new Exception(ex.Message);   }   finally   {    if (fs != null) fs.Close();    if (image != null) image.Dispose();   }  }

3.二维码解码。

///   /// 二维码解码  ///   /// 图片路径  ///   public static string CodeDecoder(string filePath)  {   if (string.IsNullOrEmpty(filePath))   {    throw new ArgumentNullException(filePath);   }   try   {    if (!File.Exists(filePath))     return null;    var myBitmap = new Bitmap(Image.FromFile(filePath));    var decoder = new QRCodeDecoder();    var decodedString = decoder.decode(new QRCodeBitmapImage(myBitmap));    return decodedString;   }   catch (Exception ex)   {    throw new Exception(ex.Message);   }  }

跟以前介绍组件一样,首先是组件的概述,组件的核心类,组件的使用方法,这些在这个组件时,找改组件的相关概述时,花了不少时间,也不知道为何,这个组件没有找到相关的资料,甚至连作者都是以某某某代替,但是互联网就是如此,我们不需要知道是谁制造的,只要用起来方便就可以。在生成二维码的组件和js插件中,我个人还是喜欢这个组件的,感觉很不错,任何组件和方法都是有个人偏好和使用环境,读者可以自行根据情况选择。

关于DotNet二维码操作组件ThoughtWorks.QRCode怎么用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

二维 组件 二维码 生成 方法 条码 内容 应用 图像 图片 应用程序 数据 文件 更多 源码 程序 编码 选择 不错 接下来 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 新华互联网科技 为想互联网科技怎么样 互联网的科技 互联网科技有限公司经营范围 中国 科技 互联网 唐信互联网科技 银优互联网科技有限公司 人人互联网科技是培训 镁科技互联网资讯平台 深圳卡尔迅互联网科技有限公司怎么样 广西拼得多互联网科技有限公司 富国互联网科技创新基金 互联网为啥属于高科技 武汉健翔互联网络科技有限公司 和信科技工业互联网 互联网5g黑科技有哪些 本届互联网博览会上的黑科技 合肥互联网科技公司公章图片 互联网科技股为什么大涨 张家口科技产业互联网平台 互联网科技图片 广东猪兼强互联网科技有限公司 今日互联网科技 唐信互联网科技 大连 苏州大垚互联网科技 开启互联网科技时代小说 千方科技属于互联网企业吗 群盈汇互联网科技有限公司 张家口科技产业互联网平台 如何强化互联网金融科技
0