您的位置:首页 > 编程语言 > C#

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

2016-07-05 13:25 309 查看
条形码参考资料: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();

// 设置二维码背景颜色

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



二维码生成结果:



条形码生成结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: