C#二维码生成与解码

【窗体效果图】

【程序源代码】

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 com.google.zxing;
using COMMON = com.google.zxing.common;

namespace Qcode
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(this.textBox1.Text.Trim()))
            {
                MessageBox.Show("请输入需要转换的信息!");
            }
            else
            {
                string content = this.textBox1.Text;//待编码数据
                try
                {
                    int QSize = Int32.Parse(textBox2.Text);//二维码大小
                    string s = hScrollBar1.Value.ToString("X");//二维码透明度
                    string q = hScrollBar2.Value.ToString("X");//背景透明度
                    string Scolor = "0x" + s + textBox3.Text;//二维码颜色
                    string Qcolor = "0x" + q + textBox4.Text;//背景颜色
                    COMMON.ByteMatrix byteMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, QSize, QSize);
                    Bitmap bt = toBitmap(byteMatrix, Scolor, Qcolor);
                    pictureBox1.Image = bt;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }

        public static Bitmap toBitmap(COMMON.ByteMatrix matrix,string scolor,string qcolor)
        {
            int width = matrix.Width;
            int height = matrix.Height;
            Bitmap bmap = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            for (int x = 0; x < width; x++)
            {
                for (int y = 0; y < height; y++)
                {
                    bmap.SetPixel(x, y, matrix.get_Renamed(x, y) != -1 ? ColorTranslator.FromHtml(scolor) : ColorTranslator.FromHtml(qcolor));
                }
            }

            return bmap;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            Image img = pictureBox1.Image;
            if (img != null)
            {
                SaveFileDialog sFD = new SaveFileDialog();
                sFD.Filter = "*.png|*.png";
                if (sFD.ShowDialog() == DialogResult.OK)
                {
                    Bitmap bmap = new Bitmap(img, img.Width, img.Height);
                    bmap.Save(sFD.FileName);
                    MessageBox.Show("保存成功!");
                }
            }
            else
            {
                MessageBox.Show("您还没有生成二维码!");
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (this.openFileDialog1.ShowDialog() != DialogResult.OK)
            {
                return;
            }
            Bitmap bmap;
            try
            {
                Image img = Image.FromFile(this.openFileDialog1.FileName);
                bmap = new Bitmap(img);
                if (bmap == null)
                {
                    MessageBox.Show("解码错误,请确保二维码图片已打开!");
                    return;
                }
            }
            catch
            {
                MessageBox.Show("解码错误,请确保图片格式正确!");
                return;
            }

            LuminanceSource source = new RGBLuminanceSource(bmap, bmap.Width, bmap.Height);
            com.google.zxing.BinaryBitmap bitmap = new com.google.zxing.BinaryBitmap(new COMMON.HybridBinarizer(source));
            Result result;
            try
            {
                result = new MultiFormatReader().decode(bitmap);
            }
            catch
            {
                string str = "解码失败,失败原因可能是:"+"\n";
                str += "1.您打开的图片非二维码图片!" + "\n";
                str += "2.您打开的二维码图片背景色太深!" + "\n";
                str += "3.您打开的二维码图片二维码和背景色太接近!" + "\n";
                MessageBox.Show(str);
                return;
            }
            textBox1.Text = result.Text;
        }

    }
}

【引用dll文件】
http://pan.baidu.com/s/1ntNr79v

【关注我的博客】

posted @ 2014-07-08 16:34  徐航  阅读(9533)  评论(1编辑  收藏  举报