• C#生成二维码名片


    摘自《31天学会CRM项目开发<C#编程入门级项目实战>》

    本例将使用ThoughtWorks.QRCode类库生成二维码名片。正式编码前,先了解一下什么是vCard?它是一种用于定义电子名片的标准或规范。手机通信录可导出vCard格式。片段21-15是一段vCard格式的文本,从数据结构上看并不复杂,按照格式填充相关信息,以二维码方式输出。

     

        BEGIN:VCARD  
        FN:张三  
        TITLE:技术总监  
        ORG:青岛**软件有限公司;ERP事业部  
        TEL;CELL:18605327777  
        TEL;WORK:+86 0532 86887777  
        TEL;WORK;FAX:+86 0532 86887778  
        ADR;WORK:青岛市市南区香港路100号  
        URL:www.huiyaosoft.com  
        EMAIL;WORK:admin@huiyaosoft.com  
        NOTE:  
        X-QQ:  
        PHOTO;ENCODING=b;TYPE=JPEG:  
        END:VCARD  
    

     

     主要开发步骤如下:

    (1)    绘制窗体如图21-7所示

    (2)    添加引用ThoughtWorks.QRCode.dll
    (3)    片段21-16使用ThoughtWorks.QRCode将名片信息输出到pictureBox1上,信息量越大,二维码图片也就越大。如果图片比较 小,信息量比较大,所生成的二维码不易识别。行31-34演示了在二维码图片中添加Logo的方法,之所以可加入Logo是因为二维码自身有一定纠错能 力。
    代码片段21-16

        public static Bitmap GetTwoDimensionCode(string strSource,  
            string text, int width, int height, string fontName)  
        {  
            // 创建Bitmap对象  
            Bitmap bmp = new Bitmap(width, height);  
            // 从image创建 Graphics对象  
            Graphics objGraphics = Graphics.FromImage(bmp);  
            // 填上背景色  
            objGraphics.FillRectangle(Brushes.White, 0, 0, bmp.Width, bmp.Height);  
            //    
            ThoughtWorks.QRCode.Codec.QRCodeEncoder qrCodeEncoder =   
                new ThoughtWorks.QRCode.Codec.QRCodeEncoder();  
            // 设置编码方法  
            qrCodeEncoder.QRCodeEncodeMode =   
                ThoughtWorks.QRCode.Codec.QRCodeEncoder.ENCODE_MODE.BYTE;  
            // 设置大小  
            qrCodeEncoder.QRCodeScale = 3;  
            // 适用于信息量较少的情形,图像越小保存的信息量越少  
            // qrCodeEncoder.QRCodeScale = 4;  
            // 设置版本  
            qrCodeEncoder.QRCodeVersion = 0;  
            // 设置错误校验的级别,正因为二维码有纠错能力,才能够加入logo  
            qrCodeEncoder.QRCodeErrorCorrect =   
                ThoughtWorks.QRCode.Codec.QRCodeEncoder.ERROR_CORRECTION.M;  
            Image image = qrCodeEncoder.Encode(strSource, Encoding.GetEncoding("utf-8"));  
            // 写入二维码  
            int x = (int)(width - image.Width) / 2;  
            int y = (int)(height - image.Height) / 2;  
            objGraphics.DrawImage(image, new Point(x, y));  
            // 添加Logo图标  
            image = TwoDimensionCodeNameCard.Properties.Resources.Apps_tux_icon;  
            x = (int)(width - image.Width) / 2;  
            y = (int)(height - image.Height) / 2;  
            objGraphics.DrawImage(image, new Point(x, y));  
            return bmp;  
        }  

    代码片段21-16中,行34通过DrawImage()方法向objGraphics指定位置加入图像image,代码片段21-17演示了使用DrawString()方法向objGraphics指定位置增加字符串text的过程。

    代码片段21-17

        // 写入字符串  
        objGraphics.DrawString(text, new Font(fontName, 13, FontStyle.Bold),   
            Brushes.Black, new PointF(43, 15));  

    示例下载:http://download.csdn.net/detail/daiqianjie/9472868

     

  • 相关阅读:
    logback 常用配置详解(二) <appender>
    logback 配置详解(一)
    logstash报错如下:Validation Failed: 1: this action would add [2] total shards, but this cluster currently has [999]/[1000] maximum shards open
    从字节码角度分析Byte类型变量b++和++b
    接口和抽象类有什么区别?你选择使用接口和抽象类的依据是什么?
    计算1至n中数字X出现的次数
    转:轻松搞定面试中的红黑树问题
    转:40个Java集合面试问题和答案
    自定义Adapter为什么会重复多轮调用getView?——原来是ListView.onMeasure在作祟
    何时调用getView?——从源码的角度给出解答
  • 原文地址:https://www.cnblogs.com/liuzhengdao/p/5686279.html
Copyright © 2020-2023  润新知