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

来源:互联网 发布:大英百科全书数据库 编辑:程序博客网 时间:2024/06/07 20:23

条形码参考资料: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);        }    }}

二维码生成结果:


条形码生成结果:


0 0
原创粉丝点击