一维码生成 c# winform GUI

最近看到同事小红在做一维码,感觉挺好玩,于是就在网上找了一个例子来玩玩。

下面的代码均为网上的代码,做了一些整理,但是忘记了出处,原作者看到可以提醒我,谢谢。

首先,一维码的相关知识可以先百度一下:http://baike.baidu.com/link?url=I4k1PM3WN5T9z0tGSC7eKLVg8GlDZvoWTM8N4cxzocueqAJBOHQl5SwB4fcpF3AWE3V8ipWqY_w7Rb0EcZA6v_

其中讲的还是比较清楚的,了解就行。

说明:本例讲的是code39,其他的没有哦。

界面如下:(不忍直视)

我使用微信扫一扫可以得到如下的结果:

应该说效果还是比较可以的。

如果需要该代码的就到360云盘去下吧:http://yunpan.cn/cKICBPBrk7xxh  提取码 0fe0

但是考虑到有些只是想看看流程的同学,我将主要的代码贴到下面了

        /// <summary>
        /// 生成条码 Bitmap,自定义条码高度,自定义文字对齐样式
        /// </summary>
        /// <param name="sourceCode"></param>
        /// <param name="barCodeHeight"></param>
        /// <param name="sf"></param>
        /// <returns></returns>
        public   Bitmap GetCode39(string sourceCode, int barCodeHeight, StringFormat sf)
        {
            BarCodeText = sourceCode.ToUpper();
            int leftMargin = 5;
            int topMargin = 0;
            int thickLength = 2;
            int narrowLength = 1;
            int intSourceLength = sourceCode.Length;
            string strEncode = "010010100" ; //添加起始码“ *”.
            var font = new System.Drawing.Font( "Segoe UI", 5);
            string AlphaBet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%*" ;
            string[] Code39 =
             {
                 /* 0 */ "000110100" ,
                 /* 1 */ "100100001" ,
                 /* 2 */ "001100001" ,
                 /* 3 */ "101100000" ,
                 /* 4 */ "000110001" ,
                 /* 5 */ "100110000" ,
                 /* 6 */ "001110000" ,
                 /* 7 */ "000100101" ,
                 /* 8 */ "100100100" ,
                 /* 9 */ "001100100" ,
                 /* A */ "100001001" ,
                 /* B */ "001001001" ,
                 /* C */ "101001000" ,
                 /* D */ "000011001" ,
                 /* E */ "100011000" ,
                 /* F */ "001011000" ,
                 /* G */ "000001101" ,
                 /* H */ "100001100" ,
                 /* I */ "001001100" ,
                 /* J */ "000011100" ,
                 /* K */ "100000011" ,
                 /* L */ "001000011" ,
                 /* M */ "101000010" ,
                 /* N */ "000010011" ,
                 /* O */ "100010010" ,
                 /* P */ "001010010" ,
                 /* Q */ "000000111" ,
                 /* R */ "100000110" ,
                 /* S */ "001000110" ,
                 /* T */ "000010110" ,
                 /* U */ "110000001" ,
                 /* V */ "011000001" ,
                 /* W */ "111000000" ,
                 /* X */ "010010001" ,
                 /* Y */ "110010000" ,
                 /* Z */ "011010000" ,
                 /* - */ "010000101" ,
                 /* . */ "110000100" ,
                 /*‘ ‘*/ "011000100" ,
                 /* $ */ "010101000" ,
                 /* / */ "010100010" ,
                 /* + */ "010001010" ,
                 /* % */ "000101010" ,
                 /* * */ "010010100"
             };
            sourceCode = sourceCode.ToUpper();
            Bitmap objBitmap = new Bitmap(((thickLength * 3 + narrowLength * 7) * (intSourceLength + 2)) +
                                           (leftMargin * 2), barCodeHeight + (topMargin * 2));
            Graphics objGraphics = Graphics.FromImage(objBitmap);
            objGraphics.FillRectangle( Brushes.White, 0, 0, objBitmap.Width, objBitmap.Height);
            for (int i = 0; i < intSourceLength; i++)
            {
                //非法字符校验
                if (AlphaBet.IndexOf(sourceCode[i]) == -1 || sourceCode[i] == ‘*‘ )
                {
                    objGraphics.DrawString( "Invalid Bar Code", SystemFonts.DefaultFont, Brushes .Red, leftMargin, topMargin);
                    return objBitmap;
                }
                //编码
                strEncode = string.Format("{0}0{1}" , strEncode,
                Code39[AlphaBet.IndexOf(sourceCode[i])]);
            }
            strEncode = string.Format("{0}0010010100" , strEncode); //添加结束码“*”
            int intEncodeLength = strEncode.Length;
            int intBarWidth;
            for (int i = 0; i < intEncodeLength; i++) //绘制 Code39 barcode
            {
                intBarWidth = strEncode[i] == ‘1‘ ? thickLength : narrowLength;
                objGraphics.FillRectangle(i % 2 == 0 ? Brushes.Black : Brushes .White, leftMargin, topMargin, intBarWidth, barCodeHeight);
                leftMargin += intBarWidth;
            }
            //绘制明码
            Font barCodeTextFont = new Font( "黑体" , 10F);
            RectangleF rect = new RectangleF(2, barCodeHeight - 20, objBitmap.Width - 4, 20);
            objGraphics.FillRectangle( Brushes.White, rect);
            //文本对齐
            objGraphics.DrawString(BarCodeText, barCodeTextFont, Brushes.Black, rect, sf);
            return objBitmap;
        }
 

好了,如果有兴趣的同学就可以去看看怎么实现自己的想要的一维码了。

说明:本人才疏学浅,文中必定有没有想到的地方,还请包涵。

时间: 2024-08-16 06:55:55

一维码生成 c# winform GUI的相关文章

使用Zxing 一维码

最近看到满大街的二维码扫码有惊喜,对二维码也有过一些了解,想看看到底是什么原理,在网上找了一些资料,自己弄了一个实例,采用的是MVC,贴出来分享一下 一维码生成 Controller public ActionResult QRCodView() { return View(); } 1 <div class="col-md-4"> 2 <h2>一维码生成</h2> 3 <div><input type="number&q

winform使用Barcodex控件预览和打印一维码

1.控件下载. http://files.cnblogs.com/files/masonblog/barcodex.zip . 包含barcodex.ocx控件.barcodex帮助文档.两个winform控件的dll文件. 2.控件的注册. (1)检测控件是否注册(方法不唯一). 本例使用的是判断注册表中 HKEY_CLASSES_ROOT\TypeLib\ 是否包含barcodex.ocx的项. 如果注册了barcodex.ocx控件,则会生成对应的项. HKEY_CLASSES_ROOT\

c#生成二维码,一维码(条形码)

  一.一维码 1.一维条码即指条码条和空的排列规则,常用的一维码的码制包括:EAN码.39码.交叉25码.UPC码.128码.93码,ISBN码,及Codabar(库德巴码)等. 2.一维码用处:可以识别商品的基本信息,例如商品名称.价格等,但并不能提供商品更详细的信息,要调用更多的信息,需要电脑数据库的进一步配合. 代码具体实现:引用spire Barcode程序包,既可以生成一维码,又可以生成二维码,这是一个EAN-13码 使用winform实现: //创建 BarcodeSettings

Android生成一维码

BitmapUtil.java里面添加个方法 /** * 用于将给定的内容生成成一维码 注:目前生成内容为中文的话将直接报错,要修改底层jar包的内容 * * @param content 将要生成一维码的内容 * @return 返回生成好的一维码bitmap * @throws WriterException WriterException异常 */ public static Bitmap CreateOneDCode(String content) throws WriterExcept

zxing解析生成一维码二维码

@web界面实现扫一扫 二维码工具类 package util; import java.awt.BasicStroke; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Shape; import java.awt.geom.RoundRectangle2D; import java.awt.image.BufferedImage; import java.

【PYTHON】二维码生成

二维码是什么? 二维码从一维码扩展而来,增加另一维具有可读性的条码,用黑白矩形图形表示二进制数据,被设备扫描后获取其中包含的信息,二维码的长度.宽度均记载着数据,二维码具有定位点和容错机制,即便没有辨识全部的条码,也可根据容错机制正确还原条码信息. 我的博客QR码:最常用的二维码 二维码怎么识别方向?手机横排和竖排都能识别呢? 以QR码为例,有三个大的定位点,不管从哪个方向都可以识别. 二维码可以记录哪些信息? 网络连接.文本.图片. 二维码的应用有哪些? 微信.火车票.随处可见的商家广告链接等

vue项目条形码和二维码生成工具试用

项目开发需要,优惠券分不同类型,简单的使用id生成条形码供店铺使用,麻烦点的需要多个字段的就需要使用二维码来展示了,对应的效果如下 条形码(一维码)使用工具code128 需引入code128.js 和对应的 code123.css, 具体代码可以看 https://www.jb51.net/article/103472.htm 由于项目是vue开发,所以code128.js 稍微改一下,export 出createBarcode接口 export default function create

一维条形码生成与识别技术

核心提示:1引言 条形码(简称条码)技术是集条码理论.光电技术.计算机技术.通信技术.条码印制技术于一体的一种自动识别技术,条形码是由宽度不同.反射率不同的条(黑色)和空(白色),一维条形码生成与识别技术,按照一定的编码规则编制而成,用以表达一组数字或字母符号信息的图形标识符,参考文献1.熊小寒.条形码技术与标准化[M].天津: 1引言 条形码(简称条码)技术是集条码理论.光电技术.计算机技术.通信技术.条码印制技术于一体的一种自动识别技术.条形码是由宽度不同.反射率不同的条(黑色)和空(白色)

java二维码生成

二维码,是一种采用黑白相间的平面几何图形经过相应的编码算法来记载文字.图画.网址等信息的条码图画.如下图 二维码的特色: 1.  高密度编码,信息容量大 可容纳多达1850个大写字母或2710个数字或1108个字节,或500多个汉字,比一般条码信息容量约高几十倍. 2.  编码规模广 该条码能够把图画.声响.文字.签字.指纹等能够数字化的信息进行编码,用条码表明出来:能够表明多种语言文字:可表明图画数据. 3.  容错能力强,具有纠错功用 这使得二维条码因穿孔.污损等导致部分损坏时,照样能够正确