How to Set a Barcode Crop Region in C#

如何在 C# 中定义条码裁剪区域以加快读取速度

This article was translated from English: Does it need improvement?
Translated
View the article in English

使用 IronSoftware.Drawing.Rectangle 定义裁剪区域,将 IronBarcode 的扫描范围限制在特定图像区域内,通过仅关注相关区域,显著提升条码读取性能并减少错误。

IronBarcode 最重要的功能之一是指定 裁剪区域。 此功能使 IronBarcode 能够通过 IronSoftware.Drawing.Rectangle 对象,仅读取图像中由 CropRegion 指定的特定 BarCode 或区域。 使用这一功能不仅能减少阅读错误,还能提高阅读效果。 在处理多页文档或条形码位置可预测的高分辨率图像时,这种技术尤其有价值。

在处理具有多个条形码或复杂背景的图像时,定义裁剪区域对于优化条形码读取速度至关重要。 通过限制扫描区域,可以实现比扫描整个图像快 5 倍的处理速度,同时还能减少非条形码元素带来的误报。

快速入门:定义和应用裁剪区域以更快地读取条形码

只需几秒钟即可创建裁剪矩形并将其导入 IronBarcode——无需额外设置,操作便捷。 了解如何使用 BarcodeReaderOptions 轻松将扫描范围限定在特定图像区域。

  1. 使用 NuGet 包管理器安装 https://www.nuget.org/packages/BarCode

    PM > Install-Package BarCode
  2. 复制并运行这段代码。

    var results = IronBarCode.BarcodeReader.Read("image.png", new IronBarCode.BarcodeReaderOptions { CropArea = new IronSoftware.Drawing.Rectangle(x: 50, y: 100, width: 300, height: 150) });
  3. 部署到您的生产环境中进行测试

    通过免费试用立即在您的项目中开始使用IronBarcode

    arrow pointer

如何查找图像中的裁剪区域坐标和尺寸?

有很多方法可以找到图像中某一点的坐标。 一种方法是使用计算机上的 "画图 "应用程序加载图片。 要获取裁剪区域的第一个坐标,请将光标移至首选的起始位置(即 Rectangle 的左上角),并记录屏幕左下角由应用程序显示的 x、y 坐标。 然后,定位第二个点,即 Rectangle 的右下角。 请参考下图以便更清楚地理解。

对于更高级的情况,您还可以考虑使用 GIMP 或 Photoshop 等图像编辑软件,它们提供了精确的像素坐标和测量工具。 有些开发人员喜欢使用在线坐标查找工具或创建简单的 HTML/JavaScript 实用程序,在图像悬停时显示鼠标坐标。

Crop region diagram showing rectangular area with corner coordinates (x1,y1) and (x2,y2) and dimension calculations

我可以使用哪些工具来确定坐标?

随后,这些坐标值可作为 Rectangle 对象的属性使用。 该对象的 width 可定义为 x2 - x1,而 height 可定义为 y2 - y1。 在处理条形码图像时,必须了解坐标是从左上角(0,0)开始,并随着向右(x 轴)和向下(y 轴)移动而增加。

确定坐标的几种方法包括

  • 内置操作系统工具:Windows 画图,macOS 预览版
  • 浏览器开发工具:检查网络图像上的元素
  • 专业软件:Adobe Photoshop、GIMP
  • 自定义实用程序:简单坐标查看器应用程序
  • IronBarcode的调试功能:导出带坐标叠加的已处理图像

如何根据坐标计算矩形尺寸?

有了两个角点后,计算尺寸就变得简单了。 矩形需要四个参数:x 坐标、y 坐标、宽度和高度。 以下是如何正确实例化作物区域:

:path=/static-assets/barcode/content-code-examples/how-to/set-crop-region-instantiate-CropRegion.cs
using IronBarCode;

int x1 = 62;
int y1 = 29;
int x2 = 345;
int y2 = 522;

IronSoftware.Drawing.Rectangle crop1 = new IronSoftware.Drawing.Rectangle(x: x1, y: y1, width: x2-x1, height: y2-y1);
Imports IronBarCode

Private x1 As Integer = 62
Private y1 As Integer = 29
Private x2 As Integer = 345
Private y2 As Integer = 522

Private crop1 As New IronSoftware.Drawing.Rectangle(x:= x1, y:= y1, width:= x2-x1, height:= y2-y1)
$vbLabelText   $csharpLabel

该坐标系统可与 IronBarcode 的 图像校正功能无缝配合,让您仅对图像的特定区域应用滤镜。

如何应用 CropRegion 和读取 BarCode?

在定义好 IronBarcode 需要读取的 CropRegions 位置后,您可以将该对象作为属性之一,与其他设置一起应用到 BarcodeReaderOptions 中。 随后可将其用作 BarcodeReader.Read() 方法的参数。 以下代码片段展示了这一过程:

BarcodeReaderOptions 接受哪些参数?

BarcodeReaderOptions 类提供了对 BarCode 读取过程的全面控制。 除作物区域外,您还可以配置:

  • 速度优化:使用速度设置在准确性和性能之间取得平衡
  • 条形码类型:指定要搜索的准确格式(支持的格式)
  • 图像过滤器:对倾斜或损坏的 BarCode 进行修正
  • 多线程:启用并行处理以提高性能
  • 旋转处理:自动检测旋转的 BarCode

如何处理来自裁剪区域的多个条形码结果?

在扫描包含多个条码的裁剪区域时,IronBarcode 会返回一个结果集合。 每个结果都包含有价值的元数据,包括作物区域内的确切位置、条形码类型和解码值。 以下是如何实现全面的作物区域处理:

:path=/static-assets/barcode/content-code-examples/how-to/set-crop-region-apply-CropRegion.cs
using IronBarCode;
using System;

int x1 = 62;
int y1 = 29;
int x2 = 345;
int y2 = 522;

IronSoftware.Drawing.Rectangle crop1 = new IronSoftware.Drawing.Rectangle(x: x1, y: y1, width: x2 - x1, height: y2 - y1);

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    CropArea = crop1
};

var result = BarcodeReader.Read("sample.png", options);
foreach (var item in result)
{
    Console.WriteLine(item.Value);
}
Imports IronBarCode
Imports System

Private x1 As Integer = 62
Private y1 As Integer = 29
Private x2 As Integer = 345
Private y2 As Integer = 522

Private crop1 As New IronSoftware.Drawing.Rectangle(x:= x1, y:= y1, width:= x2 - x1, height:= y2 - y1)

Private options As New BarcodeReaderOptions() With {.CropArea = crop1}

Private result = BarcodeReader.Read("sample.png", options)
For Each item In result
	Console.WriteLine(item.Value)
Next item
$vbLabelText   $csharpLabel

在上方的代码片段中,我们使用了 Rectangle 对象中实例化的 BarcodeReaderOptions 作为 CropArea 属性。 随后,我们将此 BarcodeReaderOptions 对象作为 BarcodeReader.Read() 方法的参数,对图像应用 CropArea 操作并读取其中的 BARCODE。

高级作物区域技术

对于生产应用,可以考虑这些高级策略:

1.动态裁剪区域:根据文档模板或 OCR 结果计算裁剪区域 2.多个区域:在单个图像中处理多个裁剪区域,实现复杂布局 3.性能优化:将裁剪区域与 async 处理相结合,实现最大吞吐量 4.错误处理:在预期区域未找到条形码时实施后备策略

在处理 PDF 文档时,您可以对特定页面应用裁剪区域,从而大幅缩短大文件的处理时间。 这对于发票、运输标签或条形码位置标准化的表格尤其有用。

作物区域定义的最佳实践

最大限度地提高作物区域的效率:

  • 添加衬垫:在预期条形码位置周围加入 10-20 个像素,以考虑到细微的差异
  • 彻底测试:验证裁剪区域在整个文档集中的工作情况
  • 文档坐标:为您的应用程序维护一份常见作物区域参考表
  • 考虑缩放:考虑不同的图像分辨率或 DPI 设置
  • 监控性能:跟踪处理时间以验证作物区域的有效性

对于需要容错的应用程序,应采用两步法:首先扫描裁剪区域,如果在预期区域内未发现条形码,则退回到全图扫描。

结论

定义裁剪区域是优化 .NET 应用程序中条形码读取性能的一项强大技术。 通过将扫描区域限制在特定区域,可以显著提高速度,同时减少误报。 无论您是处理 单个图像还是批量操作,裁剪区域都能提供生产环境所需的精度和性能。

常见问题解答

什么是 BarCode 裁剪区域,为什么要使用它?

条码裁剪区域是 IronBarcode 在图像中集中扫描的特定区域。通过使用 IronSoftware.Drawing.Rectangle 定义裁剪区域,您可以将条码读取速度提高 5 倍,同时通过将扫描限制在图像的相关区域来减少错误。

如何为条形码读取定义裁剪区域?

您可以在 IronBarcode 中定义裁剪区域,方法是创建一个具有特定坐标(x、y)和尺寸(宽、高)的 IronSoftware.Drawing.Rectangle 对象,然后在调用读取方法时将其传递给 BarcodeReaderOptions.CropArea 属性。

使用裁剪区域能带来哪些性能提升?

与扫描整个图像相比,IronBarcode 的裁剪区域功能可将条码读取性能提高 5 倍。这在处理多页文档或条码位置可预测的高分辨率图像时尤为有益。

如何找到我所在作物区域的正确坐标?

您可以使用 Microsoft Paint、GIMP 或 Photoshop 等图像编辑软件查找裁剪区域坐标。只需打开图像,将光标移动到所需区域的左上角,记下 x、y 坐标,然后找到右下角坐标,即可确定 IronBarcode 中矩形的宽度和高度。

何时使用作物区域特别有益?

IronBarcode 中的裁剪区域在处理具有多个条码的图像、复杂背景、多页文档或条码位置一致且可预测的高分辨率图像时尤为重要。

在条形码操作中使用IronBarcode的好处是什么?

IronBarcode提供了易于集成、对多种条形码格式的支持、高质量的图像生成和强大的读取能力等好处,使其成为C#条形码操作的综合工具。

IronBarcode是否提供支持自定义条形码外观的功能?

是的,IronBarcode为条形码外观提供广泛的自定义选项,包括颜色、大小和文本注释,允许运您将条形码设计成符合您特定的设计要求。

IronBarcode如何帮助提高业务流程的效率?

IronBarcode通过快速准确的条码生成和读取提高了业务流程效率,减少了手动数据输入错误,并改善了库存和资产跟踪。

在项目中实现IronBarcode需要哪些编程技能?

了解C#编程的基础知识就足以在项目中实现IronBarcode,因为它提供了简单的方法和全面的文档来指导开发人员。

IronBarcode适合小项目和大型企业应用吗?

IronBarcode被设计为可扩展且多功能,适合需要强大条码解决方案的小项目和大型企业应用。

Hairil Hasyimi Bin Omar
软件工程师
如所有伟大的工程师一般,Hairil 是个热心的学习者。他正在提高对 C#、Python 和 Java 的知识,并利用这些知识为 Iron Software 团队成员增值。Hairil 从马来西亚的玛拉工业大学加入 Iron Software 团队,获得化学与工艺工程学士学位。
准备开始了吗?
Nuget 下载 2,240,258 | 版本: 2026.5 just released
Still Scrolling Icon

还在滚动吗?

想快速获得证据? PM > Install-Package BarCode
运行示例 观看您的字符串变成 BarCode。