PCB Genesis加二维码 实现方式
使用incam可以很轻松的增加2维码,这里通过另外一种方式玩转二维码的加法,
使用谷歌zxing.dll类库实现,将文字信息转为bitmap点阵后,在Genesis绘制点即可。
一.incam增加二维码效果

二.通过代码增加方PAD实现效果:

三.代码实现:
Genesis增加二维码代码
private void addQR()
{
CodeHelper qr = new CodeHelper();
Dictionary<EncodeHintType, object> hint = new Dictionary<EncodeHintType, object>();
hint.Add(EncodeHintType.CHARACTER_SET, "UTF-8");//设置内容编码
hint.Add(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);//错码率 L水平 7 % M水平 15 % Q水平 25 % H水平 30 %
hint.Add(EncodeHintType.QR_VERSION, );//大小 (V-1)*4 + 21(V是版本号)
hint.Add(EncodeHintType.MARGIN, );//边距
ZXing.Common.BitMatrix codeArray = qr.enMatrix("at00101ca0", , , BarcodeFormat.QR_CODE, hint); //at00101ca0为增加二维码内容
add add_ = new add();
gPP gp = new gPP();
gp.width = ;//PAD大小
gp.symbols = "s";//PAD形状为方PAD
for (int x = ; x < codeArray.Width; x++)
{
for (int y = ; y < codeArray.Height; y++)
{
if (codeArray[x, y])
{
gp.p.x = x * 0.5;
gp.p.y = y * 0.5;
add_.pad(gp); //增加方PAD PAD
}
}
}
}
zxing.dll重新封装后的二维码类
public class CodeHelper
{ public string CHARSET = "UTF-8"; public static int SaveTo(Bitmap bitmap, string filepath, string filename)
{
try
{
bitmap.Save(filepath + filename); return ;
}
catch (System.Exception ex)
{
return -;
}
}
/// <summary>
///字符转二维码
/// </summary>
/// <param name="content"></param>
/// <param name="width"></param>
/// <param name="height"></param>
/// <param name="barcodeFormat"></param>
/// <param name="hints"></param>
/// <returns></returns>
public Bitmap encode(string content, int width, int height, BarcodeFormat barcodeFormat, IDictionary<EncodeHintType, object> hints)
{
BitMatrix byteMatrix = new MultiFormatWriter().encode(content, barcodeFormat, width, height, hints);
Bitmap bitmap = toBitmap(byteMatrix);
return bitmap;
} /// <summary>
///字符转二维码
/// </summary>
/// <param name="content"></param>
/// <param name="width"></param>
/// <param name="height"></param>
/// <param name="barcodeFormat"></param>
/// <param name="hints"></param>
/// <returns></returns>
public string enString(string content, int width, int height, BarcodeFormat barcodeFormat, IDictionary<EncodeHintType, object> hints)
{
BitMatrix byteMatrix = new MultiFormatWriter().encode(content, barcodeFormat, width, height, hints);
return toString(byteMatrix);
}
/// <summary>
///字符转二维码
/// </summary>
/// <param name="content"></param>
/// <param name="width"></param>
/// <param name="height"></param>
/// <param name="barcodeFormat"></param>
/// <param name="hints"></param>
/// <returns></returns>
public BitMatrix enMatrix(string content, int width, int height, BarcodeFormat barcodeFormat, IDictionary<EncodeHintType, object> hints)
{
BitMatrix byteMatrix = new MultiFormatWriter().encode(content, barcodeFormat, width, height, hints);
return byteMatrix;
}
/// <summary>
/// 字符转二维码
/// </summary>
/// <param name="content"></param>
/// <param name="width"></param>
/// <param name="height"></param>
/// <param name="barcodeFormat"></param>
/// <returns></returns>
public Bitmap encode(string content, int width, int height, BarcodeFormat barcodeFormat)
{
BitMatrix byteMatrix = new MultiFormatWriter().encode(content, barcodeFormat, width, height); Bitmap bitmap = toBitmap(byteMatrix);
return bitmap;
}
/// <summary>
/// BitMatrix转Bitmap
/// </summary>
/// <param name="matrix"></param>
/// <returns></returns>
private static String toString(BitMatrix matrix)
{
StringBuilder bitString = new StringBuilder(); for (int x = ; x < matrix.Width; x++)
{
bitString.Append("\r\n");
for (int y = ; y < matrix.Height; y++)
{
//bitmap.SetPixel(x, y, matrix[x, y] ? ColorTranslator.FromHtml("0xFF000000") : ColorTranslator.FromHtml("0xFFFFFFFF"));
bitString.Append(matrix[x, y] ? "■" : " ");
}
}
return bitString.ToString ();
}
/// <summary>
/// BitMatrix转Bitmap
/// </summary>
/// <param name="matrix"></param>
/// <returns></returns>
private static Bitmap toBitmap(BitMatrix matrix)
{
int width = matrix.Width;
int height = matrix.Height;
Bitmap bitmap = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); for (int x = ; x < width; x++)
{
for (int y = ; y < height; y++)
{
bitmap.SetPixel(x, y, matrix[x, y] ? ColorTranslator.FromHtml("0xFF000000") : ColorTranslator.FromHtml("0xFFFFFFFF"));
}
}
return bitmap;
} /// <summary>
/// 字符转二维码并保存
/// </summary>
/// <param name="content"></param>
/// <param name="path"></param>
/// <param name="width"></param>
/// <param name="height"></param>
/// <param name="barcodeFormat"></param>
/// <returns></returns>
public int encodeAndSave(string content, string path, int width, int height, BarcodeFormat barcodeFormat)
{
return SaveTo(encode(content, width, height, barcodeFormat), path, "");
}
/// <summary>
/// bmp图片路径转换??
/// </summary>
/// <param name="bmppath"></param>
/// <param name="hints"></param>
/// <param name="result"></param>
/// <returns></returns>
public static int decode(string bmppath, IDictionary<DecodeHintType, object> hints, out Result result)
{
Bitmap bmap = new Bitmap(bmppath);
BitmapLuminanceSource source = new BitmapLuminanceSource(bmap);
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
result = new MultiFormatReader().decode(bitmap, hints);
return ;
}
}
PCB Genesis加二维码 实现方式的更多相关文章
- php生成二维码的几种方式整理及使用实例
hp生成二维码的方式:1.google开放api:2.php类库PHP QR Code:3.libqrencode:4.QRcode Perl CGI & PHP scripts感兴趣的朋友可 ...
- php生成二维码的几种方式
一些php生成二维码的方式:1.google开放api:2.php类库PHP QR Code:3.libqrencode:4.QRcode Perl CGI & PHP scripts 1.g ...
- 使用jquery.qrcode生成二维码实现微信分享功能
前言: 最近有个这样的需求,在pc端的商品详情页增加分享功能. 微博分享.QQ好友分享.QQ空间分享这些都很常见.但是微信分享我还没有手动写过(以前改过). 最终效果如下图: 解决方案:使用jquer ...
- 二维码相关---java生成二维码名片,而且自己主动保存到手机通讯录中...
版权声明:本文为博主原创文章,未经博主credreamer 同意不得转载 违者追究法律责任. https://blog.csdn.net/lidew521/article/details/244418 ...
- Java 获取微信小程序二维码(可以指定小程序页面 与 动态参数)
一.准备工作 微信公众平台接口调试工具 小程序的唯一标识(appid) 小程序的密钥(secret) 二.获取access_token 打开微信公众平台接口调试工具,在参数列表中输入小程序的appid ...
- Java语言实现二维码的生成
众所周知,现在生活中二维码已经是无处不见.走在街道上,随处可见广告标语旁有二维码,手机上QQ,微信加个好友都能通过二维码的方式,我不知道是什么时候兴起的二维码浪潮,但是我知道,这在我小时候可是见不到的 ...
- [C#]二维码(QR Code)生成与解析
写在前面 经常在大街上听到扫码送什么什么,如果真闲着没事,从头扫到位,估计书包都装满了各种东西.各种扫各种送,太泛滥了.项目中从没接触过二维码的东东,最近要使用,就扒了扒网络,发现关于解析二维码的类库 ...
- 二维码(QR Code)生成与解析
二维码(QR Code)生成与解析 写在前面 经常在大街上听到扫码送什么什么,如果真闲着没事,从头扫到位,估计书包都装满了各种东西.各种扫各种送,太泛滥了.项目中从没接触过二维码的东东,最近要使用,就 ...
- java生成二维码(带logo)
之前写过一篇不带logo的二维码实现方式,採用QRCode和ZXing两种方式 http://blog.csdn.net/xiaokui_wingfly/article/details/3947618 ...
随机推荐
- Linux Shell ssh登录脚本
Linux 登陆服务器敲命令太多,某时候确实不便,所以就用shell写了一个 我的blog地址: http://www.cnblogs.com/caoguo 一.说明 支持秘密和密钥两种格式 用户名 ...
- 关于在win7旗舰版32位上 安装 net4.0 的闪退问题研究 和安装sqlserver2008问题
1.配置文件客户端[目标x86x64]的 可以安装 2.配置文件完全的目标x86x64的 出现闪退. 3.服务器核心的出现无法安装 安装 sqlserver 2008R2数据库 报错 \最后留下了它, ...
- Oracle 函数总结
<1>=========================返回 String,其中包含有与指定的字符代码相关的字符======================== 函 数:< ...
- c#符号含义
属性:(带手型图标)方法:(紫红色菱形)事件:(闪电)字段:(蓝色菱形) 还有很多,具体图标不好描述命名空间,类,接口,值类,枚举,清单或类信息项等
- Python random模块&string模块 day3
一.random模块的使用: Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. 1.常用函数: (1)random.random() 用于生成一个0到1 ...
- Scrapy下载器中间件用法示例
1.爬虫文件httpbin.py # -*- coding: utf-8 -*- import scrapy class HttpbinSpider(scrapy.Spider): name = 'h ...
- 微信小程序·前端-锦囊
========================== flex[盒子] display: flex; flex-direction: column; [从上到下排列]↓ justify-conte ...
- Huawei-R&S-网络工程师实验笔记20190525-设备登录、VRP基本配置、文件系统
>Huawei-R&S-网络工程师实验笔记20190525-设备登录.VRP基本配置.文件系统(环回接口.telnet远程.AAA登录.命令行.时钟.banner.文件目录) >& ...
- cocoa 运行apple脚本文件的方法
NSString* path = [[NSBundle mainBundle] pathForResource:@"ScriptName" ofType:@"scpt&q ...
- centos7安装opennms-17.0.0
https://blog.csdn.net/jiangzhexi/article/details/52036858 http://www.jb51.net/os/RedHat/281470.html