C# GDI+绘制一维条码打印模糊的解决办法
最近遇到使用zxing生成的一维条码打印出来的条码图形很模糊根本识别不了。其实原因只有一句话: bitmap没有直接使用PrintDocument的Graphics画布进行绘制,而是中间处理了一下外部传过来一个图片,这个图片看起来很成像质量很好,但其实是一个彩色图片,一维条码是由黑白两种颜色组成的,没有灰度是两种纯色。这样打印出来的图片看起来有毛刺,直线不连续了。解决方法是减少中间环节直接把zxing生成的bitmap对象使用"PrintDocument的Graphics画布"绘制。PrintDocument的Graphics和Bitmap的Graphics要是同一个对象。
记录一下,zxing生成黑白图片的办法:
Dictionary<EncodeHintType, Object> hintMap = new Dictionary<EncodeHintType, Object>();
//设置编码
hintMap.Add(EncodeHintType.CHARACTER_SET, "UTF-8"); // Now with zxing version 3.2.1 you could change border size (white
// border size to just 1)
//设置间距
hintMap.Add(EncodeHintType.MARGIN, );
//设置纠错级别
hintMap.Add(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L); QRCodeWriter qrCodeWriter = new QRCodeWriter();
//ZXing.MultiFormatWriter qrCodeWriter = new ZXing.MultiFormatWriter();//new QRCodeWriter();
//BitMatrix 根据其需要输出的参数,和设置条件等新建BitMatrix对象
BitMatrix byteMatrix = qrCodeWriter.encode(value, BarcodeFormat.QR_CODE, width, height, hintMap); var imgInfo = new Bitmap(width, height); for (int x = ; x < byteMatrix.Width; x++)
{
for (int y = ; y < byteMatrix.Width; y++)
{
if (byteMatrix[y, x])
{
if (graphics != null)
graphics.FillRectangle(Brushes.Black, x + viewX, y + viewY, , );
imgInfo.SetPixel(x, y, Color.Black);
}
else
{
if (graphics != null)
graphics.FillRectangle(Brushes.White, x + viewX, y + viewY, , );
imgInfo.SetPixel(x, y, Color.White);
}
}
}
BitMatrix是zxing将字符Encode成条码图形的一种返回值类型,是条码图形的矩阵表示方式。转换成bitmap时就是需要每个像素重绘一遍。这样生成的图形就是黑白两种颜色的。
C# GDI+绘制一维条码打印模糊的解决办法的更多相关文章
- GDI+中发生一般性错误的解决办法(转帖)
今天在开发.net引用程序中,需要System.Drawing.Image.Save 创建图片,debug的时候程序一切正常,可是发布到IIS后缺提示出现“GDI+中发生一般性错误”的异常.于是开始“ ...
- 【转】GDI+中发生一般性错误的解决办法
今天在开发.net引用程序中,需要System.Drawing.Image.Save 创建图片,debug的时候程序一切正常,可是发布到IIS后缺提示出现“GDI+中发生一般性错误”的异常. 于是开始 ...
- GDI+中发生一般性错误的解决办法(转)
今天在开发.net引用程序中,需要System.Drawing.Image.Save 创建图片,debug的时候程序一切正常,可是发布到IIS后缺提示出现"GDI+中发生一般性错误" ...
- GDI+中发生一般性错误的解决办法(转载)
今天在开发.net引用程序中,需要System.Drawing.Image.Save 创建图片,debug的时候程序一切正常,可是发布到IIS后缺提示出现"GDI+中发生一般性错误" ...
- GDI+中发生一般性错误的解决办法
这个错误经常发生,代码如下: private static byte[] GetBytes (Image image) { try { if (image == null) return null ...
- C#一例绘制字体不清晰的解决办法
public static Bitmap GetPieWithText(String text, Color color, Color fontColor,Font font) { ; Bitmap ...
- win32绘制自定义类窗口导致绘制11个窗口的解决办法
上网查了一圈也没有找到解决问题的办法,一旦创建了一个窗口,并且在过程函数中绘制窗口,尤其是一些非子窗口的自定义类窗口,都会生成11个窗口(算上主窗口就是12个),但是使用系统通用控件就不会有这种情况的 ...
- 转:在eclipse中 使用7.0及以上手机进行测试时logcat不打印日志的解决办法
解决办法 替换ADT中的ddmlib.jar文件. 下载ADT对应的zip包,解压出ddmlib.jar文件 放到eclipse\configuration\org.eclipse.osgi\bund ...
- 安装Windows 10后PDF补丁丁等程序界面变得模糊的解决办法
对于使用高分辨率屏幕且屏幕缩放比例在 100%以上的用户,升级到 Windows 10 后将发现许多程序的界面,例如QQ.电脑管家.Windows本身的服务管理程序等等,都变得非常模糊,<PDF ...
随机推荐
- 第52章 撤销端点(Revocation Endpoint) - Identity Server 4 中文文档(v1.0.0)
此端点允许撤消访问令牌(仅限引用令牌)和刷新令牌.它实现了令牌撤销规范(RFC 7009). token 要撤销的令牌(必填) token_type_hint access_token或refresh ...
- JSON 与 JS 对象的区别与对比
定义: JSON是什么?JSON是JS的一种简单数据格式,JSON是JavaScript原生格式,它是一种严格的js对象的格式,JSON的属性名必须有双引号,如果值是字符串,也必须是双引号. 问题: ...
- .NET [MVC] 利用特性捕捉异常
声明:本代码只适用于.NET MVC. 先创建一个类继承ActionFilterAttribute这个抽象类以及实现IExceptionFilter接口,并实现它的方法OnException. 代码如 ...
- 【开源】Netty轻松实现聊天室,附带数据记录,聊天历史
阅读本文约“2.5分钟” 听说快七夕······ 不对,这不是今天的主题,嘿嘿. 今天说说一个小的网页聊天室,功能如下 群聊无限制 记录用户群聊信息 下次登录显示聊天历史 消息发送速度(光速) 聊天历 ...
- 预计2019年发布的Vue3.0到底有什么不一样的地方?
摘要: Vue 3.0预览. 原文:预计今年发布的Vue3.0到底有什么不一样的地方? 作者:小肆 微信公众号:技术放肆聊 Fundebug经授权转载,版权归原作者所有. 还有几个月距离 vue2 的 ...
- 纯css做幻灯片效果
css3里面有一个@keyframes动画功能. w3c上面的例子: 可以使用它来做一个幻灯片效果. <!DOCTYPE html> <html lang="en" ...
- thymeleaf的配置
1.在springboto项目中使用thymeleaf标签,必须先添加依赖,如下. <dependency> <groupId>org.springframework.boot ...
- Dynamics 365新功能:可编辑的网格(行内编辑)
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复238或者20161127可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...
- 【Dojo 1.x】笔记5 使用本地引用
习惯用CDN引用的同学肯定会知道还有一种叫本地引用,这篇笔记测试本地引用. Dojo SDK下载地址:点我 下载中间的Release Package即可,如果希望下载完整包(Full Source), ...
- TextView图文混排
大家都知道,textView有一个setCompoundDrawables的方法来设置上下左右位置的图标,当然,也可以在xml布局文件中设置,然而问题来了,假如我们把图标放在左边,当我们让TextVi ...