C#使用ZXing.Net实现识别二维码和条码

 更新时间:2024年01月02日 08:36:56   作者:rjcql  
ZXing用Java实现的多种格式的一维二维条码图像处理库,而ZXing.Net是其.Net版本的实现,本文主要为大家详细介绍了如何使用ZXing.Net实现识别二维码和条码,需要的可以参考下

写在前面

上一篇写了 C# 使用ZXing.Net生成二维码和条码

使用ZXing.Net解码非常简单,事实上就只用一行代码就好了,这么简单那为什么还要贴在这里呢,原因是开始时,在网上看资料看到一篇文章,稀里哗啦写了一堆代码,然后拿来运行一下,竟然还得不到预期的结果;看了下用了最复杂的方式,调用了参数最多的重载函数,问题却没有解决,所以在网上查找资料,鉴别成本有时候是很高的;大部分的代码拷来拷去,完全不做验证,实在是浪费时间;最简单有效的办法还是尽量往信息的源头去追溯,比如官网文档、GitHub上的源码介绍、业内大牛的文章等。最好还是自己把代码跑一遍,不仅可以确认也能加深印象,下次碰到同类问题或许拿来就用了,效率就是这么提升的。

官网: GitHub - micjahn/ZXing.Net: .Net port of the original java-based barcode reader and generator library zxing 

代码实现

    var reader = new BarcodeReader();
    var result = reader.Decode((Bitmap)pictureBox1.Image);
    if (result != null)
    {
        lblMessage.Text = result.Text;
    }
    else
    {
        lblMessage.Text = "None";
    }

反面教材原代码如下:

// create a barcode reader instance
IBarcodeReader reader = new BarcodeReader();  
// 加载图片文件
Bitmap image = new Bitmap("D:\\PrideJoy\\Zxing.Demo\\Zxing.demo\\bin\\Debug\\net7.0\\qr-image.jpg");
 
// 获取rawRGB数据
Rectangle rect = new Rectangle(0, 0, image.Width, image.Height);
System.Drawing.Imaging.BitmapData bmpData = image.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, image.PixelFormat);
IntPtr ptr = bmpData.Scan0;
int bytes = Math.Abs(bmpData.Stride) * image.Height;
byte[] rawRGB = new byte[bytes];
System.Runtime.InteropServices.Marshal.Copy(ptr, rawRGB, 0, bytes);
image.UnlockBits(bmpData);
 
// 获取格式(format)
RGBLuminanceSource.BitmapFormat format;
switch (image.PixelFormat)
{
    case System.Drawing.Imaging.PixelFormat.Format8bppIndexed:
        format = RGBLuminanceSource.BitmapFormat.Gray8;
        break;
    case System.Drawing.Imaging.PixelFormat.Format16bppGrayScale:
        format = RGBLuminanceSource.BitmapFormat.Gray16;
        break;
    case System.Drawing.Imaging.PixelFormat.Format24bppRgb:
        format = RGBLuminanceSource.BitmapFormat.RGB24;
        break;
    case System.Drawing.Imaging.PixelFormat.Format32bppRgb:
        format = RGBLuminanceSource.BitmapFormat.RGB32;
        break;
    case System.Drawing.Imaging.PixelFormat.Format32bppArgb:
        format = RGBLuminanceSource.BitmapFormat.ARGB32;
        break;
    // 其他格式的处理
    default:
        format = RGBLuminanceSource.BitmapFormat.Unknown;
        break;
}
 
// 获取宽度(width)和高度(height)
int width = image.Width;
int height = image.Height;
var result = reader.Decode(rawRGB,width,height, format);
// do something with the result
if (result != null)
{
    Console.WriteLine("内容为:"+result.Text);
}

调用示例

到此这篇关于C#使用ZXing.Net实现识别二维码和条码的文章就介绍到这了,更多相关C#识别二维码和条码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C# 使用鼠标点击对Chart控件实现数据提示效果

    C# 使用鼠标点击对Chart控件实现数据提示效果

    这篇文章主要介绍了C# 使用鼠标点击对Chart控件实现数据提示效果,文章给予上一篇的详细内容做延伸介绍,需要的小伙伴可任意参考一下
    2022-08-08
  • 基于C#实现Windows服务的方法详解

    基于C#实现Windows服务的方法详解

    在实际应用过程中,有时候我们希望开发的程序,不需要界面,直接开机就可以长时间运行,这时候,我们可以考虑做成一个Windows服务。这篇文章跟大家介绍一下,如何基于C#实现Windows服务的创建、安装、启动、停止和卸载,需要的可以参考一下
    2022-09-09
  • 详解C#设计模式编程中的模板方法模式使用

    详解C#设计模式编程中的模板方法模式使用

    这篇文章主要介绍了C#设计模式编程中的模板方法模式,模板方法模式比较好理解,即设定好算法骨架以后进行代码的反复利用,需要的朋友可以参考下
    2016-02-02
  • C# 操作 access 数据库的实例代码

    C# 操作 access 数据库的实例代码

    这篇文章主要介绍了C# 操作 access 数据库的实例代码,需要的朋友可以参考下
    2018-03-03
  • C#实现treeview绑定的方法

    C#实现treeview绑定的方法

    这篇文章主要介绍了C#实现treeview绑定的方法,包括datatable的获取与节点的操作,具有一定的参考价值,需要的朋友可以参考下
    2014-12-12
  • c#判断数据库服务器是否已经启动的方法

    c#判断数据库服务器是否已经启动的方法

    这篇文章主要介绍了使用c#判断数据库服务器是否已经启动的方法,大家参考使用吧
    2014-01-01
  • c# 用Dictionary实现日志数据批量插入

    c# 用Dictionary实现日志数据批量插入

    这篇文章主要介绍了c# 用Dictionary实现日志数据批量插入的步骤,帮助大家更好的理解和使用c#中的Dictionary类,感兴趣的朋友可以了解下
    2021-02-02
  • C# Console利用mspaint打开图像并保存的方法

    C# Console利用mspaint打开图像并保存的方法

    这篇文章主要介绍了C# Console利用mspaint打开图像并保存的方法,涉及C#调用画图板操作图片的相关技巧,需要的朋友可以参考下
    2016-01-01
  • C#实现策略模式

    C#实现策略模式

    这篇文章介绍了C#实现策略模式的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • C#实现对文件进行加密保护的示例代码

    C#实现对文件进行加密保护的示例代码

    这篇文章主要为大家详细介绍了如何利用C#实现对文件进行加密保护的功能,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
    2022-12-12

最新评论