ZXing.NET用来生成和解释 (条码、二维码)

添加引用:zxing.dll、zxing.presentation.dll

1 生成 (条码、二维码)主要用到 BarcodeWriter、BarcodeFormat、EncodingOptions、BitmapRenderer 这几个类。

2  解释 (条码、二维码)主要用到 BarcodeReader、DecodingOptions 这两个类。

  /// <summary>/// 条码、二维码/// </summary>public static class BarQrCodeHelper{/// <summary>/// 生成条码、二维码/// </summary>/// <param name="code">要编码内容</param>/// <param name="format">编码格式(条码CODE_128、二维码QR_CODE)</param>/// <param name="options">编码参数(条码EncodingOptions、二维码QrCodeEncodingOptions)</param>/// <param name="renderer">条码、二维码Bitmap参数</param>/// <param name="qrcodeoptions">二维码参数</param>/// <returns></returns>public static Bitmap EncodeBarQrCode(string code, BarcodeFormat format, EncodingOptions options, BitmapRenderer renderer = null, QrCodeOptions qrcodeoptions = null){BarcodeWriter writer = new BarcodeWriter();writer.Options = options;writer.Format = format;if (renderer != null)writer.Renderer = renderer;Bitmap bmp = writer.Write(code);if ((options is QrCodeEncodingOptions) && qrcodeoptions != null && qrcodeoptions.IsLogo){int w = qrcodeoptions.Width - qrcodeoptions.LogoPadding * 2;int h = qrcodeoptions.Height - qrcodeoptions.LogoPadding * 2;Rectangle logo_rect = new Rectangle((bmp.Width - w) / 2, (bmp.Height - h) / 2, w, h);if (qrcodeoptions.LogoPadding == 0){logo_rect = new Rectangle((bmp.Width - qrcodeoptions.Width) / 2, (bmp.Height - qrcodeoptions.Height) / 2, qrcodeoptions.Width, qrcodeoptions.Height);}Graphics bmp_g = Graphics.FromImage(bmp);bmp_g.InterpolationMode = InterpolationMode.HighQualityBicubic;bmp_g.CompositingQuality = CompositingQuality.HighQuality;bmp_g.SmoothingMode = SmoothingMode.AntiAlias;Bitmap logo_bmp = (Bitmap)qrcodeoptions.Logo;//按比例缩放Logoif ((qrcodeoptions.Logo.Width > logo_rect.Width || qrcodeoptions.Logo.Height > logo_rect.Height) || (qrcodeoptions.Logo.Width < logo_rect.Width && qrcodeoptions.Logo.Height < logo_rect.Height)){logo_bmp = new Bitmap(logo_rect.Width, logo_rect.Height);Graphics logo_g = Graphics.FromImage(logo_bmp);logo_g.InterpolationMode = InterpolationMode.HighQualityBicubic;logo_g.CompositingQuality = CompositingQuality.HighQuality;logo_g.SmoothingMode = SmoothingMode.AntiAlias;Rectangle rect = new Rectangle(0, 0, 0, 0);float num1 = (float)logo_rect.Width / (float)qrcodeoptions.Logo.Width;float num2 = (float)logo_rect.Height / (float)qrcodeoptions.Logo.Height;float num3 = Math.Min(num1, num2);rect.Width = (int)((float)qrcodeoptions.Logo.Width * (float)num3);rect.Height = (int)((float)qrcodeoptions.Logo.Height * (float)num3);rect.X = (logo_rect.Width - rect.Width) / 2;rect.Y = (logo_rect.Height - rect.Height) / 2;logo_g.DrawImage((Bitmap)qrcodeoptions.Logo, rect);logo_g.Dispose();}Bitmap corner_bmp = new Bitmap(logo_rect.Width, logo_rect.Height);//圆角处理Graphics corner_g = Graphics.FromImage(corner_bmp);corner_g.InterpolationMode = InterpolationMode.HighQualityBicubic;corner_g.CompositingQuality = CompositingQuality.HighQuality;corner_g.SmoothingMode = SmoothingMode.AntiAlias;corner_g.SetClip(CreateRoundedRectanglePath(new Rectangle(0, 0, logo_rect.Width, logo_rect.Height), qrcodeoptions.Radius));corner_g.DrawImage(logo_bmp, new Rectangle(0, 0, logo_bmp.Width, logo_bmp.Height));logo_bmp.Dispose();if (qrcodeoptions.LogoPadding != 0){Pen padding_pen = new Pen(Color.Gray);SolidBrush padding_sb = new SolidBrush(qrcodeoptions.LogoBackColor);Rectangle padding_rect = new Rectangle((bmp.Width - qrcodeoptions.Width) / 2, (bmp.Height - qrcodeoptions.Height) / 2, qrcodeoptions.Width, qrcodeoptions.Height);GraphicsPath padding_path = CreateRoundedRectanglePath(padding_rect, qrcodeoptions.Radius);bmp_g.FillPath(padding_sb, padding_path);bmp_g.DrawPath(padding_pen, padding_path);padding_sb.Dispose();padding_pen.Dispose();padding_path.Dispose();}bmp_g.DrawImage(corner_bmp, logo_rect);corner_bmp.Dispose();corner_g.Dispose();bmp_g.Dispose();}return bmp;}/// <summary>/// 解释条码、二维码/// </summary>/// <param name="code">要解码内容</param>/// <param name="options">解码参数</param>/// <returns></returns>public static string DecodeBarQrCode(Bitmap code, DecodingOptions options){BarcodeReader reader = new BarcodeReader();reader.Options = options;reader.AutoRotate = true;Result result = reader.Decode(code);return result != null ? result.Text : String.Empty;}/// <summary>/// 创建圆角矩形/// </summary>/// <param name="rect">区域</param>/// <param name="cornerRadius">圆角角度</param>/// <returns></returns>private static GraphicsPath CreateRoundedRectanglePath(Rectangle rect, int cornerRadius){GraphicsPath result = new GraphicsPath();int diameter = cornerRadius * 2;result.AddArc(rect.X, rect.Y, diameter, diameter, 180, 90);result.AddLine(rect.X + cornerRadius, rect.Y, rect.Right - cornerRadius, rect.Y);result.AddArc(rect.Right - diameter, rect.Y, diameter, diameter, 270, 90);result.AddLine(rect.Right, rect.Y + cornerRadius, rect.Right, rect.Bottom - cornerRadius);result.AddArc(rect.Right - diameter, rect.Bottom - diameter, diameter, diameter, 0, 90);result.AddLine(rect.Right - cornerRadius, rect.Bottom, rect.X + cornerRadius, rect.Bottom);result.AddArc(rect.X, rect.Bottom - diameter, diameter, diameter, 90, 90);result.AddLine(rect.X, rect.Bottom - cornerRadius, rect.X, rect.Y + cornerRadius);result.CloseFigure();return result;}/// <summary>/// 二维码参数/// </summary>public class QrCodeOptions{public QrCodeOptions(){}public QrCodeOptions(int _Radius, bool _IsLogo, Image Logo, int _Width, int _Height, int _LogoPadding, Color _LogoBackColor, Color _LogoBorderColor){this.Radius = _Radius;this.IsLogo = _IsLogo;this.Logo = Logo;this.Width = _Width;this.Height = _Height;this.LogoPadding = _LogoPadding;this.LogoBackColor = _LogoBackColor;this.LogoBorderColor = _LogoBorderColor;}/// <summary>/// 圆角度数/// </summary>public int Radius = 4;/// <summary>/// 是否显示Logo/// </summary>public bool IsLogo = false;/// <summary>/// Logo图片/// </summary>public Image Logo;/// <summary>/// Logo宽度/// </summary>public int Width;/// <summary>/// Logo高度/// </summary>public int Height;/// <summary>/// Logo内边距/// </summary>public int LogoPadding = 4;/// <summary>/// Logo内边距背景颜色/// </summary>public Color LogoBackColor = Color.White;/// <summary>/// Logo边框颜色/// </summary>public Color LogoBorderColor = Color.Gray;}}

C# Winform生成条码二维码相关推荐

  1. C#实现生成(条码/二维码)

    winfrom窗体实现生成(条码/二维码) 程子 orange of backroom 2月22日 一码在手,天下我有 如今是二维码遍地的时代,扫一扫方便了大家的生活,今天我们就用C#在winfrom ...

  2. Android应用--QR的生成(二维码)

    二维码的定义: 二维码 (2-dimensional bar code),是用某种特定的几何图形按一定规律在平面(二维方向上) 分布的黑白相间的图形记录数据符号信息的. 在许多种类的二维条码中,常用的 ...

  3. H5案例分享:jquery.qrcode.js生成简易二维码

    近期做项目需要生成二维码,并且解码获取信息,jquery.qrcode.js生成二维码比较的方便,写个教程分享给大家.欢迎大家测试留言,我会改进代码. 现在二维码越来越流行啦,支付扫二维码,关注扫二维 ...

  4. Python生成动态二维码,运用神库:qrcode

    一.介绍 1.1 二维码 二维码又称二维条码,常见的二维码为 QR Code,QR 全称 Quick Response.是一个近几年来移动设备上超流行的一种编码方式,在现在的生活中二维码随处可见.我们 ...

  5. 生成QR二维码图片示例

    生成QR二维码图片的简单示例 QR二维码的生成,在生成QR二维条码中已经提及.不过上次是通过网站生成的,缺点是对网站的依赖.下面做了个调用zxing core实现生成QR二维码图片的示例.另外还可以通 ...

  6. 通过C#生成支付宝收款码 四(支付宝官方SDK配合沙箱生成收款二维码)

    前面三个章节是学习和摸索过程,现在进入主题,生成收款码.还是用沙箱环境来调试. 1.新建windowsform程序,根据章节三,导入支付宝SDK. 2.下载官方当面付DEMO程序:当面付DEMO 3. ...

  7. 如何批量生成Maxicode二维码

    Maxicode是一种中等容量.尺寸固定的矩阵式二维条码,它由紧密相连的六边形模组和位於符号中央位置的定位图形所组成.Maxicode是特别为高速扫瞄而设计,主要应用於包裹搜寻和追踪上.Maxicod ...

  8. Android二维码图片生成和二维码扫描软件的设计

    一.简要介绍 QR Code码,是由Denso公司于1994年9月研制的一种矩阵二维码符号,它具有一维条码及其它二维条码所具有的信息容量大.可靠性高.可表示汉字及图象多种文字信息.保密防伪性强等优点. ...

  9. 批量生成含二维码和条形码的产品标签

    今天跟大家分享下我们如何批量生成含二维码和条形码的产品标签.我们会用一个例子跟大家讲解制作过程.一般批量生成的标签,都会使用到数据库,所以小编这里也提前准备了一个数据库.如下图所示: 打开条码软件,先 ...

  10. python学习之生成一个二维码(一)

    首先,简单介绍一下二维码:二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多 ...

最新文章

  1. 这个奇葩打字外设火了,一分钟500词比说话还快,直接被打字比赛禁用
  2. mysql中的触发器
  3. 菜鸟学习Javascript20170116
  4. Intel Realsense 深度流向彩色流对齐 color_aligned_to_depth和depth_aligned_to_color
  5. VTK:相互作用之SelectAVertex
  6. 虚拟专题:知识图谱 | 频谱知识图谱:面向未来频谱管理的智能引擎
  7. 分治 —— 简单分治
  8. ASP.NET中Server.MapPath() 和Request.MapPath()使用
  9. mermaid流程图工具_Markdown高级使用之流程图
  10. VS 2012 单元测试简单配置
  11. 火鸡堂团队 团队展示
  12. sql查询数据库所有表、字、注释
  13. android实现图片自动轮播代码,Android实现图片轮播切换实例代码
  14. MapReduce自定义排序、自定义分组、自定义分区
  15. Compose版来啦!仿自如裸眼3D效果
  16. error C2440 无法转换到 AFX_PMSG mfc自定义信号及实现 PostMessage FindWindow
  17. 【vue 3】blob文件流 导出 excel 表格
  18. C++ 0xc0000417 错误
  19. 使用AD8618设计ADC信号调理电路随笔
  20. 【Visual C++】游戏开发笔记十六 讲解一个完整的回合制游戏demo

热门文章

  1. 把oblog3.13转换成PHP
  2. word自带参考文献标注功能
  3. matlab 调整灰度,matlab灰度变换函数
  4. 虚无鸿蒙混沌系统,玄幻 鸿蒙混沌选择系统
  5. STM32小车篇之超声波测距
  6. iphonex时间显示蓝色_iphonex左上角时间蓝色
  7. 超好玩的css3-3d效果
  8. 北京最好的商标律师解析商标侵权的处罚规定
  9. ADL平台上传数据前的准备工作
  10. txt音乐播放器PC版免费下载(包含C程序源码与exe文件)