• C#如何实现二维码和条形码功能?
  • 发布于 1天前
  • 21 热度
    0 评论

一.前言

在这个万物互联的时代,条码如同数字世界的莫尔斯电码,将纷繁信息凝练成黑白方寸间的几何密语。从超市货架上跃动的商品条纹,到移动支付时悄然绽放的像素之花,一维码与二维码早已成为连接物理与数字空间的隐形纽带。本文将带领您走进zxing(Zebra Crossing)的奇妙世界,这款跨平台的开源库犹如一位代码诗人,用简洁的API在C#中挥洒创意。无论是物流系统的批量生成,还是移动端即时扫码的轻量化实现,这里都有优雅的解决方案。我们还将揭开像素级精度控制的奥秘,探索如何在.NET生态中平衡生成效率与图像质量,让每一道黑白线条都成为精准传递信息的数字信使。


二.效果

先看效果图:

1.条形码效果

2.二维码效果

三.基础准备

在实现二维码和条形码的功能之前,我们需要下载zxing.dll库,并在系统中引入这个库。zxing.dll是一个与 ZXing 库相关的动态链接库文件,ZXing(Zebra Crossing)是一个开源的、多格式的 1D/2D 条形码图像处理库,最初用 Java 实现,后来被移植到 .NET 环境中,成为 ZXing.Net。zxing.dll支持多种条码格式,包括但不限于 QR 码、条形码等,提供生成和识别这些条码的功能。网上有很多下载资源,大家可以自行百度下载。

zxing.dll文件主要功能:
1、二维码生成:zxing.dll支持通过BarcodeWriter类生成指定内容的二维码图像。
2、二维码识别:利用BarcodeReader类,zxing.dll能从图像中识别二维码并提取信息。
3、多格式条码支持:zxing.dll支持QR码、条形码等多种条码格式,处理灵活。
4、图像自定义:在生成二维码时,可添加Logo图像,提升视觉效果和品牌认知。
5、应用稳定性:zxing.dll对条码处理应用至关重要,损坏或丢失可能导致应用无法正常工作。

四.代码实现:

#region 引用程序集
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 com.google.zxing.qrcode;
using com.google.zxing;
using com.google.zxing.common;
using ByteMatrix = com.google.zxing.common.ByteMatrix;
using EAN13Writer = com.google.zxing.oned.EAN13Writer;
using EAN8Writer = com.google.zxing.oned.EAN8Writer;
using MultiFormatWriter = com.google.zxing.MultiFormatWriter;
namespace qr
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            // 初始化组件
            InitializeComponent();
        }
    //  public static void writeToFile(ByteMatrix matrix, System.Drawing.Imaging.ImageFormat format, string file)  
    //{  
    //    Bitmap bmap = toBitmap(matrix);  
    //    bmap.Save(file, format);  
    //}  
    /// <summary>  
    /// 绘制一维码、二维码位图  
    /// </summary>  
    /// <param name="matrix"></param>  
    /// <returns></returns>  
    public static Bitmap toBitmap(ByteMatrix matrix)     
    {  
        // 定义位图的款和高  
        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("0xFF000000") : ColorTranslator.FromHtml("0xFFFFFFFF"));     
            }     
        }     
        return bmap;                 
    }  

    private void button1_Click_1(object sender, EventArgs e)  
    {  
        string content = textBox1.Text;  
        int codeWidth = Convert.ToInt16(txtWidth.Text.Trim().ToString());  
        int codeHeight = Convert.ToInt16(txtHeight.Text.Trim().ToString());  
        // 生成二维码  
        ByteMatrix byteMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, codeWidth, codeHeight);  
        Bitmap bitmap = toBitmap(byteMatrix);  
        pictureBox1.Image = bitmap;  
        //writeToFile(byteMatrix, System.Drawing.Imaging.ImageFormat.Png, sFD.FileName);  
        //SaveFileDialog sFD = new SaveFileDialog();  
        //sFD.DefaultExt = "*.png|*.png";  
        //sFD.AddExtension = true;  
        //try  
        //{  
        //    if (sFD.ShowDialog() == DialogResult.OK)  
        //    {  

        //    }  
        //}  
        //catch (Exception ex)  
        //{  
        //    MessageBox.Show(ex.Message);  
        //}  
    }  
    private void button2_Click(object sender, EventArgs e)  
    {  
        string content = textBox1.Text;  
        // 生成一维码  
        ByteMatrix byteMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.EAN_8, 200, 100);  
        Bitmap bitmap = toBitmap(byteMatrix);  
        pictureBox1.Image = bitmap;  
        //Bitmap twobitmap = new Bitmap(bitmap.Width ,bitmap.Height);  
        //Graphics g = Graphics.FromImage(bitmap);  
        //g.DrawString(content, Font, Brushes.Black, pictureBox1.);  
        //pictureBox1.Image = bitmap;  

    }   
}  
}

总结:

条形码和二维码可以说是我们现在日常生活中最常见的信息交流方式。超市,商场的商品条形码,付款时的二维码,可以说条形码,二维码已经构成了我们信息世界的基本载体。本文主要介绍了如何使用zxing.dll库实现条形码和二维码功能,更多具体的例子大家可以查询官方网站的文档说明。感谢阅读!

用户评论