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;
        }
    }
}

posted @ 2014-10-02 13:19  黯紫萌音  阅读(715)  评论(0编辑  收藏  举报