C#学习笔记之条形码和二维码

条形码参考资料:http://www.51hei.com/mcu/4350.html

        http://www.cnblogs.com/rophie/archive/2012/03/02/2376946.html

二维码参考资料:http://wenku.baidu.com/link?url=1BqJ9BTkrqN9K3uRVL34HlyftPTbTSpVzQBC_fUZynMq1sNOiR4byzTezNf-UtHny9HVRsLIanF0C0gRsELH89FNjAuBqTaHc-RgCM6u_rK

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

namespace _01_条形码
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private Bitmap bmpLog; // 用于存放二维码Log图片

        /// <summary>
        /// 生成条形码
        /// </summary>
        private void button1_Click(object sender, EventArgs e)
        {
            Code128 code = new Code128();

            code.ValueFont = new Font("黑体", 20);
            Bitmap bmp1 = code.GetCodeImage(textBox1.Text, Code128.Encode.Code128A);
            Bitmap bmp2 = code.GetCodeImage(textBox1.Text, Code128.Encode.Code128C);

            code.ValueFont = new Font("黑体", 12);
            Bitmap bmp3 = code.GetCodeImage(textBox1.Text, Code128.Encode.Code128A);

            code.ValueFont = new Font("黑体", 10);
            Bitmap bmp4 = code.GetCodeImage(textBox1.Text, Code128.Encode.Code128C);

            pictureBox2.Image = bmp1;
            pictureBox3.Image = bmp2;
            pictureBox4.Image = bmp3;
            pictureBox5.Image = bmp4;
        }

        /// <summary>
        /// 生成二维码
        /// </summary>
        private void button2_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "")
            {
                MessageBox.Show("输入信息为空,请重新输入:");
                return;
            }

            // 获取二维码位图
            Bitmap bitmap = GetCode(textBox1.Text);

            if (bmpLog == null)  // 没有Log图标
            {
                pictureBox1.Image = bitmap;
            }
            else                 // 已上传Log图标
            {
                int x = bitmap.Width;                            // 二维码的宽
                int y = bitmap.Height;                           // 二维码的高
                Point point = new Point(x / 2 - 20, y / 2 - 20); // 计算Log图标的坐标位置
                Graphics g = Graphics.FromImage(bitmap);         // 将二维码设为一个画布
                g.DrawImage(bmpLog, point);                      // 将Log图标绘制到二维码上
                pictureBox1.Image = bitmap;                      // 显示带Log图标的二维码
            }
        }

        /// <summary>
        /// 获取二维码位图
        /// </summary>
        /// <param name="strMsg">二维码中存放的信息</param>
        /// <returns>二维码位图</returns>
        public Bitmap GetCode(string strMsg)
        {
            /// <summary>
            /// 生成二维码需要引用外部类库:ThoughtWorks.QRCode.dll,可以在网上下载
            /// </summary>
            QRCodeEncoder qrEncoder = new QRCodeEncoder();

            // 设置二维码背景颜色
            qrEncoder.QRCodeBackgroundColor = System.Drawing.Color.White;

            // 设置二维码编码格式(编码类型)
            qrEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;

            // 设置二维码每个小方格的宽度(规格)
            qrEncoder.QRCodeScale = 5;

            // 设置二维码的版本号。象征着二维码的信息容量。二维码可以看成一个黑白方格矩阵,版本不同,矩阵长宽方向
            // 方格的总数量分别不同。版本1为(21*21)矩阵,版本每增1,二维码的两个边长都增4,所以版本7为(45*45)
            // 矩阵,最高版本为40,是(177*177)矩阵。
            // 字符串太长的情况下,生成二维码可能会出现错误:“索引超出了数组界限”;
            // 解决办法:qrEncoder.QRCodeVersion = 0;
            qrEncoder.QRCodeVersion = 6;

            // 纠错等级。纠错信息同样存储的二维码中,纠错级别越高,纠错信息占用的空间越多,
            // 相对的能存储的有用信息就越少。
            qrEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;

            // 生成二维码位图
            Bitmap bitmap = qrEncoder.Encode(strMsg, Encoding.Default);

            return bitmap;
        }

        /// <summary>
        /// 保存二维码
        /// </summary>
        private void button4_Click(object sender, EventArgs e)
        {
            // 保存文件对话框
            SaveFileDialog saveFile = new SaveFileDialog();

            saveFile.Title = "请选择保存路径:";
            saveFile.Filter = "图片文件(*.jpg;*.bmp;*.gif)|*.jpg;*.bmp;*.gif";

            if (saveFile.ShowDialog() == DialogResult.OK)
            {
                string fileName = saveFile.FileName;  // 获取保存文件的全路径名字
                textBox2.Text = fileName;             // 显示保存路径名
                Image image = pictureBox1.Image;      // 获取二维码位图
                image.Save(fileName);                 // 保存二维码位图
            }
        }

        /// <summary>
        /// 上传Log图标
        /// </summary>
        private void button5_Click(object sender, EventArgs e)
        {
            // 打开文件对话框
            OpenFileDialog openFile = new OpenFileDialog();
            openFile.Title = "请选择文件:";
            openFile.Filter = "图片文件(*.jpg;*.bmp;*.gif)|*.jpg;*.bmp;*.gif";
            if (openFile.ShowDialog() == DialogResult.OK)
            {
                string fileName = openFile.FileName;        // 获取选中文件的全路径名字
                Bitmap bitmap = new Bitmap(fileName);       // 生成位图
                Bitmap newBmp = new Bitmap(bitmap, 40, 40); // 压缩位图
                //pictureBox1.Image = newBmp;
                bmpLog = newBmp;
                MessageBox.Show("Log图标上传成功!");
            }
        }

        /// <summary>
        /// 解析二维码
        /// </summary>
        private void button6_Click(object sender, EventArgs e)
        {
            // 获取二维码图像
            Image image = pictureBox1.Image;

            QRCodeDecoder qrDecoder = new QRCodeDecoder();
            QRCodeImage qrImage = new QRCodeBitmapImage(new Bitmap(image));
            string result = qrDecoder.decode(qrImage);  // 解析出二维码中保存的信息
            textBox2.Text = result;
            MessageBox.Show(result);
        }
    }
}


二维码生成结果:


条形码生成结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值