二维码项目实例为二维码添加logo


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;
using ThoughtWorks.QRCode.Codec.Data;
using ThoughtWorks.QRCode.Codec.Util;
using System.IO;

namespace QRCode
{
    public partial class FMain : Form
    {
        public FMain()
        {
            InitializeComponent();
            string[] cbversion = new string[41];
            for (int i = 0; i <= 40; i++)
            {
                cbversion[i] = i.ToString();
            }
            cbVersion.DataSource = cbversion;
            cbVersion.Text = "7";
            cbEncoding.Text = "Byte";
            cbCorrectionLevel.Text = "M";

        }

        private void btnEncode_Click(object sender, EventArgs e)
        {
            string encoding = cbEncoding.Text;
            string correctionLever = cbCorrectionLevel.Text;
            int version = Convert.ToInt32(cbVersion.Text);
            int scale;
            if (!int.TryParse(txtScale.Text.Trim(), out scale))
            {
                MessageBox.Show("Scale必须为数字");
                return;
            }
            string data = txtData.Text.Trim();
            if (data == string.Empty)
            {
                MessageBox.Show("数据不能为空,请输入数据哦!");
                return;
            }
            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();//创建一个对象
            switch (encoding)//设置编码模式
            {
                case "Byte":
                    qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
                    break;

                case "AlphaNumeric":
                    qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.ALPHA_NUMERIC;
                    break;

                case "Numeric":
                    qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.NUMERIC;
                    break;
            }
            //设置编码测量度
            qrCodeEncoder.QRCodeScale = scale;
            //设置编码版本
            qrCodeEncoder.QRCodeVersion = version;
            if (correctionLever == "L")//设置编码错误纠正
            {
                qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L;
            }
            else if (correctionLever == "M")
            {
                qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
            }
            else if (correctionLever == "Q")
            {
                qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.Q;
            }
            else if (correctionLever == "H")
            {
                qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;
            }
            qrCodeEncoder.QRCodeForegroundColor = btnQRCodeForegroundColor.BackColor;//设置二维码前景色
            qrCodeEncoder.QRCodeBackgroundColor = btnQRCodeBackgroundColor.BackColor;//设置二维码背景色
            Image image = qrCodeEncoder.Encode(data,Encoding.UTF8);//生成二维码图片

            if (txtLogo.Text.Trim() != string.Empty)//如果有logo的话则添加logo
            {
                Bitmap btm = new Bitmap(txtLogo.Text);
                Bitmap copyImage = new Bitmap(btm,image.Width/5,image.Height/5);
                Graphics g = Graphics.FromImage(image);
                int x = image.Width / 2 - copyImage.Width / 2;
                int y = image.Height / 2 - copyImage.Height / 2;
                g.DrawImage(copyImage,x,y);
            }
            picEncode.Image = image;
        }

        private void btnDecode_Click(object sender, EventArgs e)
        {
            try
            {
                string decodedString = new QRCodeDecoder().decode(new QRCodeBitmapImage(new Bitmap(picEncode.Image)),Encoding.UTF8);
                txtData.Text = decodedString;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btnSave_Click(object sender, EventArgs e)//保存二维码到磁盘
        {
            SaveFileDialog sfd = new SaveFileDialog();
            sfd.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif|PNG Image|*.png";
            sfd.Title = "保存二维码";
            sfd.FileName = string.Empty;
            if (picEncode.Image != null)
            {
                if (sfd.ShowDialog() == DialogResult.OK && sfd.FileName != "")
                {
                    using (FileStream fs = (FileStream)sfd.OpenFile())
                    {
                        switch (sfd.FilterIndex)
                        {
                            case 1:
                                picEncode.Image.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);
                                break;
                            case 2:
                                picEncode.Image.Save(fs, System.Drawing.Imaging.ImageFormat.Bmp);
                                break;
                            case 3:
                                picEncode.Image.Save(fs, System.Drawing.Imaging.ImageFormat.Gif);
                                break;
                            case 4:
                                picEncode.Image.Save(fs, System.Drawing.Imaging.ImageFormat.Png);
                                break;
                        }
                    }
                    MessageBox.Show("恭喜,保存成功!");
                }
            }
            else
            {
                MessageBox.Show("抱歉,没有要保存的图片哦!");
            }
        }

        private void btnPrint_Click(object sender, EventArgs e)
        {

        }

        private void btnOpen_Click(object sender, EventArgs e)//打开要选的logo文件
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif|PNG Image|*.png";
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                String fileName = ofd.FileName;
                picEncode.Image = new Bitmap(fileName);

            }
        }

        private void btnChooseLogo_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif|PNG Image|*.png";
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                txtLogo.Text = ofd.FileName;
            }
        }

        private void btnQRCodeForegroundColor_Click(object sender, EventArgs e)
        {
            ColorDialog cd = new ColorDialog();
            if (cd.ShowDialog() == DialogResult.OK)
            {
                btnQRCodeForegroundColor.BackColor = cd.Color;
            }
        }

        private void btnQRCodeBackgroundColor_Click(object sender, EventArgs e)
        {
            ColorDialog cd = new ColorDialog();
            if (cd.ShowDialog() == DialogResult.OK)
            {
                btnQRCodeBackgroundColor.BackColor = cd.Color;
            }
        }
    }
}

原文地址:https://www.cnblogs.com/xiaowie/p/8693621.html

时间: 2024-10-09 01:18:14

二维码项目实例为二维码添加logo的相关文章

C# winform通过ThoughtWorks.QRCode生成二维码解码可以添加logo

首先要下载ThoughtWorks.QRCode.dll文件,添加引用. 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.Win

Android zxing 解析二维码,生成二维码极简demo

zxing 官方的代码很多,看起来很费劲,此demo只抽取了有用的部分,实现了相机预览解码,解析本地二维码,生成二维码三个功能. 简化后的结构如下: 废话少说直接上代码: BaseDecodeHandler: package com.song.zxing.decode; import android.graphics.Bitmap; import android.os.Bundle; import com.google.zxing.BarcodeFormat; import com.google

[开源]C#二维码生成解析工具,可添加自定义Logo (转)

二维码又称 QR Code,QR 全称 Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的 Bar Code 条形码能存更多的信息,也能表示更多的数据类型:比如:字符,数字,中文等等.今天就来跟大家分享一下我的二维码生成解析工具,主要功能就是生成二维码,并且可以添加自定义的Logo.当然,网络上面生成二维码的工具多如牛毛,生成二维码早已不再新鲜.这个工具的一个亮点就是可以识别二维码,下面就来具体看看吧,不过首先要补充一点二维码的知识. 一.二维码基础知识 一.

[开源]C#二维码生成解析工具,可添加自定义Logo

二维码又称 QR Code,QR 全称 Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的 Bar Code 条形码能存更多的信息,也能表示更多的数据类型:比如:字符,数字,中文等等.今天就来跟大家分享一下我的二维码生成解析工具,主要功能就是生成二维码,并且可以添加自定义的Logo.当然,网络上面生成二维码的工具多如牛毛,生成二维码早已不再新鲜.这个工具的一个亮点就是可以识别二维码,下面就来具体看看吧,不过首先要补充一点二维码的知识.  一.二维码基础知识 一

asp.net(C#)利用QRCode生成二维码(续)-在二维码图片中心加Logo或图像 .

<%@ WebHandler Language="C#" Class="GetQRCode" %> using System; using System.Web; using ThoughtWorks.QRCode.Codec; using ThoughtWorks.QRCode.Codec.Data; using ThoughtWorks.QRCode.Codec.Util; using System.IO; using System.Text; us

安卓实现二维码生成和扫描功能,扫描支持直接拍照扫码和相册图片扫码,还加了照明功能

最近在做二维码的生成和扫描,生成二维码相对而言较为简单,扫描相对复杂,遇到的问题较多,但是在实现二维码的生成和扫描之前最重要的一步 就是讲Zxing包导入,后面的内容大部分是使用包中的内容, 那我就从二维码的生成讲起吧! 二维码生成: 直接贴代码了 1 //要转换的地址或字符串,可以是中文,输入内容生成二维码 2 public Bitmap createQRImage(String string) { 3 try { 4 Hashtable<EncodeHintType, String> hi

C# ZXing.Net生成二维码、识别二维码、生成带Logo的二维码(一)

一.ZXing.Net 源代码地址:http://zxingnet.codeplex.com/ 也可以使用Nuget包管理,添加如图: 说明:ZXing是一个开源Java类库用于解析多种格式的1D/2D条形码.目标是能够对QR编码.Data Matrix.UPC的1D条形码进行解码. 其提供了多种平台下的客户端包括:J2ME.J2SE和Android.现在也有了对应的.Net版本 二.生成二维码 将字符编码时可以指定字符格式:默认为ISO-8859-1英文字符集,但一般移动设备常用UTF-8字符

扫码时代,二维码能否替代纸质说明书?

最近,二维码云服务网站--草料二维码,正在尝试推出它的新产品:帮助企业快速制作二维码说明书.  从产品经理角度看,纸质说明书的用户体验是非常差的.大多数时候,我们需要查阅说明书时,说明书并不在手边,甚至可能找不到.此外,信息的及时性,消费者和生产商之间的互动性也基本无法实现.这给我们带来思考:既然电子阅读在侵蚀传统图书出版业,那么说明书为什么不能电子化?其实不仅是说明书,还包括各类家电和电子产品包装箱附带的用户注册卡.保修卡.意见反馈卡等.我们会发现,这些卡基本没人使用,生产商却还在坚持不懈地把

Android实例-实现扫描二维码并生成二维码(XE8+小米5)

相关资料: 第三方资料太大没法写在博文上,请下载CSDN的程序包. 程序包下载: 过几天,刚上传的包,都没有办法显示. 注意事项: 如果只加了Lib,然没有改AndroidManifest.xml,App在呼叫BarCode时会ANR没反应.开始可能没有官方的classes.dex,但如果发现编译出错后,请再检查一下.TMessageManager须加System.Messaging单元. 使用DelphiXE7加入JavaLibrary后,呼叫Zxing相机1.新建一个DelphiXE工程,双