c# 二维码生成器(ZXing.Net)实现
安装组件

Code
using Sunny.UI;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;
using ZXing;
using ZXing.Common;
using ZXing.QrCode.Internal;
namespace WindowsFormsApp1
{
public partial class Form1 : UIForm
{
public Form1()
{
InitializeComponent();
}
#region 生成二维码方法
private Bitmap GetQRCodeByZXingNet(string strMessage, Int32 width, Int32 height) {
Bitmap bitmap = null;
try {
BarcodeWriter barcodeWriter = new BarcodeWriter();
barcodeWriter.Format = BarcodeFormat.QR_CODE;
barcodeWriter.Options.Hints.Add(EncodeHintType.CHARACTER_SET,"UTF-8");
barcodeWriter.Options.Hints.Add(EncodeHintType.ERROR_CORRECTION,ZXing.QrCode.Internal.ErrorCorrectionLevel.H);
barcodeWriter.Options.Height = height;
barcodeWriter.Options.Width = width;
barcodeWriter.Options.Margin = 0;
ZXing.Common.BitMatrix bm = barcodeWriter.Encode(strMessage);
bitmap = barcodeWriter.Write(bm);
}
catch(Exception ex) {
MessageBox.Show("生成二维码错误!"+ex.Message);
}
return bitmap;
}
public Bitmap GetQRCodeByZXingNet(string strMessage, Image middleImg, int width, int height) {
if (string.IsNullOrEmpty(strMessage)){
return null;
}
if(middleImg == null) {
return GetQRCodeByZXingNet(strMessage, width, height);
}
MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
Dictionary<EncodeHintType, object> hint = new Dictionary<EncodeHintType, object>();
hint.Add(EncodeHintType.CHARACTER_SET,"UTF-8");
hint.Add(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
BitMatrix bm = multiFormatWriter.encode(strMessage, BarcodeFormat.QR_CODE, width, height, hint);
BarcodeWriter barcodeWriter = new BarcodeWriter();
Bitmap bitmap=barcodeWriter.Write(bm);
int[] rectangle=bm.getEnclosingRectangle();
int middleImgW = Math.Min((int)(rectangle[2]/3.5),middleImg.Width);
int middleImgH = Math.Min((int)(rectangle[3]/3.5),middleImg.Height);
int middleImgL = (bitmap.Width - middleImgW) / 2;
int middleImgT = (bitmap.Height - middleImgH) / 2;
Bitmap bmpimg=new Bitmap(width, height,System.Drawing.Imaging.PixelFormat.Format32bppArgb);
using (Graphics g = Graphics.FromImage(bmpimg))
{
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g.DrawImage(bitmap, 0, 0);
}
Graphics myGraphic = Graphics.FromImage(bmpimg);
myGraphic.FillRectangle(Brushes.White, middleImgL, middleImgT, middleImgW, middleImgH);
myGraphic.DrawImage(middleImg,middleImgL,middleImgT, middleImgW,middleImgH);
return bmpimg;
}
#endregion
private void Form1_Load(object sender, EventArgs e)
{
}
private void chkPicture_CheckedChanged(object sender, EventArgs e)
{
if (chkPicture.Checked)
{
uiGroupBox2.Visible = true;
}
else
{
uiGroupBox2.Visible = false;
}
}
private void btnGeneralBarCode_Click(object sender, EventArgs e)
{
Bitmap qrCode;
if (chkPicture.Checked)
{
qrCode = GetQRCodeByZXingNet(txtContents.Text, pictureBox2.Image, Convert.ToInt32(txtWidth.Text), Convert.ToInt32(txtHeight.Text));
}
else
{
qrCode = GetQRCodeByZXingNet(txtContents.Text, Convert.ToInt32(txtWidth.Text), Convert.ToInt32(txtHeight.Text));
}
qrCode.Save("qr.png",ImageFormat.Png);
pictureBox1.Image = qrCode;
}
private void btnSelectLogo_Click(object sender, EventArgs e)
{
OpenFileDialog openFile = new OpenFileDialog();
openFile.Filter = "图片文件|*.jpg;*.jpeg;*.png;*.bmp";
if (openFile.ShowDialog() == DialogResult.OK)
{
pictureBox2.Image = Image.FromFile(openFile.FileName);
}
}
}
}
运行效果

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2023-06-01 Dev cxDBGrid 增加操作按钮