winfrom编写二维码(可上传图片)

编写一个个人信息二维码:

首先先下载一个生成二维码的ThoughtWorks.QRCode.dll(注:下载后将其添加引用到项目中即可)

然后设计一个窗体:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ThoughtWorks.QRCode.Codec;

namespace Two_dimensionCode
{
    public partial class MyselfInfo : Form
    {
        public MyselfInfo()
        {
            InitializeComponent();
        }

/// <summary>
        /// /获取二维码
        /// </summary>
        /// <param name="write"></param>
        /// <returns></returns>
        public Bitmap GetCode(string write)
        {
            StringBuilder builder = new StringBuilder();
            builder.Append("姓名:" + this.txtName);
            QRCodeEncoder code = new QRCodeEncoder();
            code.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
            code.QRCodeScale = 4;
            code.QRCodeVersion = 8;
            code.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
            Bitmap image = code.Encode(write);
            return image;
        }

///<summary>
        ///获取logo
        ///</summary>
        ///<returns></returns>
        public Bitmap getlogo()
        {
            Bitmap newBmp = new Bitmap("logo.jpg");//获取图片对象
            Bitmap bmp = new Bitmap(newBmp, 30, 30);//缩放
            return bmp;
        }

private object logoImg;//用于存放logo图片

/// <summary>
        /// 生成
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnGenerate_Click(object sender, EventArgs e)
        {
            if (this.txtName.Text.Trim() != "")//验证输入的生成内容是否为空
            {
                Bitmap bCode = GetCode(this.txtName.Text);//获取二维码图片
                if (logoImg == null)
                {
                    pbCode.Image = bCode;
                }
                else
                {
                    Bitmap bLogo = logoImg as Bitmap;//获取logo图片对象
                    bLogo = new Bitmap(bLogo, 30, 30);//改变图片的大小这里我们设置为30
                    int Y = bCode.Height;
                    int X = bCode.Width;
                    Point point = new Point(X / 2 - 15, Y / 2 - 15);//logo图片绘制到二维码上,这里将简单计算一下logo所在的坐标
                    Graphics g = Graphics.FromImage(bCode);//创建一个画布
                    g.DrawImage(bLogo, point);//将logo图片绘制到二维码图片上
                    pbCode.Image = bCode;
                }
            }
            else
            {
                MessageBox.Show("输入生成内容!");
            }
        }

/// <summary>
        /// 保存
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSave_Click(object sender, EventArgs e)
        {
            SaveFileDialog saveFile = new SaveFileDialog();//创建保存对话框
            saveFile.Filter = "JPEG|*.jpeg;*.jpg|位图文件|*.bmp|所有文件|*.*";//设置保存的图片格式
            if (pbCode.Image != null)
            {
                if (saveFile.ShowDialog() == DialogResult.OK)
                {
                    string sFilePathName = saveFile.FileName;
                    Image img = pbCode.Image;
                    img.Save(sFilePathName);
                }
            }
            else
            {
                MessageBox.Show("请先生成二维码!");
            }
        }

/// <summary>
        /// 上传Logo
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnLogo_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();//文件打开对话框
            openFileDialog.Filter = "JPEG|*.jpeg;*.jpg|位图文件|*.bmp|所有文件|*.*";//只能打开我们设置的这几类文件
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                string fileName = openFileDialog.FileName;
                Bitmap newBmp = new Bitmap(fileName);
                Bitmap bmp = new Bitmap(newBmp);
                pbCode.Image = bmp;
                logoImg = bmp;
            }
        }
    }
}

接下来创建一个QRCodeBuilder.cs类:

代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using ThoughtWorks.QRCode.Codec;

namespace TianQRCode
{
    public class QRCodeBuilder
    {
        /// <summary>
        /// 创建二维码图片
        /// </summary>
        /// <param name="codeStr">要产生二维码的字符串</param>
        /// <returns>返回生成的Image</returns>
        public Image CreateQRCode(string codeStr)
        {
            QRCodeEncoder encoder = new QRCodeEncoder();
            encoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;//编码方式
            encoder.QRCodeScale = 4;//大小
            encoder.QRCodeVersion = 8;//版本
            encoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
            System.Drawing.Bitmap bp = encoder.Encode(codeStr, Encoding.GetEncoding("GB2312"));
            Image image = bp;

//保存二维码图片:
            SaveFileDialog sf = new SaveFileDialog();
            sf.Title = "选择保存文件位置";
            sf.Filter = "保存图片(*.jpg) |*.jpg|所有文件(*.*) |*.*";
            //设置默认文件类型显示顺序
            sf.FilterIndex = 1;
            //保存对话框是否记忆上次打开的目录
            sf.RestoreDirectory = true;
            if (sf.ShowDialog() == DialogResult.OK)
            {
                //获得文件路径
                string localFilePath = sf.FileName.ToString();
                image.Save(localFilePath);
            }
            return image;
        }
    }
}

时间: 2024-08-19 12:52:30

winfrom编写二维码(可上传图片)的相关文章

java编写二维码

//自动生成二维码接口two_dimension_code String text = "http://10.20.24.43:8080/meeting/meeting_register_phoneIndex.html"; //二维码生产内容--跳转url int width = 350; // 二维码图片的宽 int height = 350; // 二维码图片的高String outPutPath = path+ "\\"+activity_name+"

Qt+QZXing编写识别二维码的程序

本人最近在用Qt编写程序,需要用编写二维码识别功能.在网上搜寻一番,找到了QZXing.配置过程中确实出了一大把汗,这里我写这篇文章记录配置方法,替后人省一把汗吧!我的开发环境:MSVC2010 + Qt5 从这里下载最新版的QZXing_sourceV2.3.zip,解压之后得到的是源代码,里面有一个QZXing.pri文件.理论上用MSVC加载这个pri文件之后这个库的代码就会出现在工程的代码列表中,但是理论归理论,实际上msvc在加载pri的过程中,弹出一大堆错误信息,完全不知所云,网上找

java实现二维码生成及调用打印机打印

在开发二维码打印的过程中走过几次弯路,所以在这里特意将其记录下来留作备忘.一开始参考其他博主写的文章,有介绍通过编写JAVA后台代码来获取本地默认打印机的驱动实现打印.BUT!这样就导致在本地开发测试时看似一切正常,一旦项目部署到linux环境下,就会完全失效了(JAVA后台代码去获取linux本地的打印机驱动).还有介绍并提供编写的插件的(不甚了解这块),鉴于时间要求比较苛刻,那就简单的来吧. 需求:生成带水印效果的二维码图片,可以批量预览,并连接打印机批量打印. 开发思路:1.编写二维码生成

简单编写一个二维码

参考网址:http://code.ciaoca.com/javascript/qrcode/ 1.下载qrcode.js插件 2.导入插件: 3.js路径: 4.方法: <script type="text/javascript"> //二维码方法 function code(){ New QRCode(document.getElementById('qrcode'), '1234567a23'); // 设置参数方式             var qrcode = n

【转】Android 二维码 生成和识别(附Demo源码)--不错

原文网址:http://www.cnblogs.com/mythou/p/3280023.html 今天讲一下目前移动领域很常用的技术——二维码.现在大街小巷.各大网站都有二维码的踪迹,不管是IOS.Android.WP都有相关支持的软件.之前我就想了解二维码是如何工作,最近因为工作需要使用相关技术,所以做了初步了解.今天主要是讲解如何使用ZXing库,生成和识别二维码.这篇文章实用性为主,理论性不会讲解太多,有兴趣可以自己查看源码. 1.ZXing库介绍 这里简单介绍一下ZXing库.ZXin

C#利用QrCode.Net生成二维码(Qr码

http://www.cnblogs.com/Soar1991/archive/2012/03/30/2426115.html 现在网上很多应用都是用二维码来分享网址或者其它的信息.尤其在移动领域,二维码更是有很大的应用场景.因为项目的需要,需要在网站中增加一个生成二维码分析网址的功能,在谷歌大幅度抽筋的情况下无奈使用百度.百度N多,找到一些项目,但是可用性不强.(有一个项目是用VS2005开发的,在2010中调试不开.)终于在codeplex上找到一个“神器”,这个“神器”可以很方便的生成二维

Python创建二维码通讯录

参考文档: Python二维码生成库qrcode安装和使用示例:http://www.jb51.net/article/58579.htm vCard格式参数详细说明:http://www.phpin.net/thread-280-1-1.html 二维码生成工具:http://tools.jb51.net/transcoding/jb51qrcode 准备环境: 系统版本:CentOS release 6.5 安装pip:yum install python-pip 安装qrcode: pip

Android开发之扫描二维码开发

原贴地址:http://www.cnblogs.com/Fndroid/p/5540688.html 二维码其实有很多种,但是我们常见的微信使用的是一种叫做QRCode的二维码,像下面这样的,可以放心的扫,这只是我的博客主页链接啦: 关于QR码编码的二维码,我们要知道几个特点: 1. 扫描时可以从各个角度去扫,也就是旋转多少度都没关系,不信吗?下次去肯德基买单试试咯. 2. 二维码有容错率,容错率越大,生成的二维码也就越复杂,但是越不容易出错,并且,当二维码被遮挡的时候也越容易扫描出来.这里我上

Android开发学习之路-二维码学习

这个月装逼有点少了,为什么呢,因为去考软件射鸡师了,快到儿童节了,赶紧写篇博纪念一下逝去的青春,唔,请忽略这句话. 二维码其实有很多种,但是我们常见的微信使用的是一种叫做QRCode的二维码,像下面这样的,可以放心的扫,这只是我的博客主页链接啦: 关于QR码编码的二维码,我们要知道几个特点: 1. 扫描时可以从各个角度去扫,也就是旋转多少度都没关系,不信吗?下次去肯德基买单试试咯. 2. 二维码有容错率,容错率越大,生成的二维码也就越复杂,但是越不容易出错,并且,当二维码被遮挡的时候也越容易扫描