示例程序显示条形码受参数'quiet_zone'的影响。 该示例程序给出了如何为参数选择适当的值。
create_bar_code_model ([], [], BarCodeHandle)
set_bar_code_param (BarCodeHandle, 'persistence', 1)
PART I 读取条形码,无需空白区验证
QuietZone := 'false'
set_bar_code_param (BarCodeHandle, 'quiet_zone', QuietZone)
* 将meas_thresh设置得非常低,以强制进行错误读取
set_bar_code_param (BarCodeHandle, 'meas_thresh', 0.03)
* 自动识别条码类型,并且返回目标条码区域与解码字符串。
find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedData)
* 默认情况下,‘quiet_zone’设置为‘false’。
* 在这种情况下,不验证条形码候选周围的空白区是否干净。结果,在另一个标签内可以检测到错误的条形码。在这里,标签 '2/5 Interleaved' 被错误识别为 'Codabar' 码。
* 显示条码的空白区
gen_quiet_zone_region (CodabarRegion, CodabarRegion, CodabarQZones, DecodedTypes[1], 10)
* 条形码标签标准规定了每个印刷标签的两侧的空白区。这里,检测到的'Codabar'条码的空白区不可用。这表明序列可能无效。通过强制验证空白区,可以抑制条形码被错误的检测。
* 空白区的大小在描述不同条码标签的标准中指定。
* 对于大多数条码类型, 需要大小为 10 * X 的空白区, 这也是 'Codabar' 的情况。X 表示条形序列中最窄条形的宽度。
PART II 使能条码空白区验证
QuietZone := 'true'
set_bar_code_param (BarCodeHandle, 'quiet_zone', QuietZone)
set_bar_code_param (BarCodeHandle, 'meas_thresh', 0.25)
* 已启用空白区验证。这将强制条码读取器拒绝在标签中检测到'Codabar'序列。然后, 读取器尝试使用其他条码类型, 直到最终检测到该标签的正确类型: 2/5 Interleavedsdf
* 显示绘制目标区域的空白区
* '2/5 Interleaved' 条码已成功解码, 因为在其任何空白区中没有检测到条形图 (即使有一个单独的边缘)。不幸的是, 现在'Code 39'不能被解码了, 因为在它的一个安静区域中检测到一个柱线。要解决此问题, 用户可以自定义空白区的大小。
* 存在一个干扰空白区的条码(Code 39)
* 仅检测到边缘对中可容忍的单个边缘(2/5 Interleaved)
PART III 启用 tolerant 空白区验证
* 启用符合标准的空白区, 但允许轻微干扰
* 空白区验证设置为'tolerant'。这样, 两个条码都被检测到, 尽管存在小的干扰。
QuietZone := 'tolerant'
set_bar_code_param (BarCodeHandle, 'quiet_zone', QuietZone)
PART IV 使用用户定义的空白区大小进行空白区验证
* 选择一个用户自定义的空白区可以调整空白区的验证行为:
* - 抑制错误检测
* - 容忍标签附近的干扰
* 通常在2和5之间的值会适用于两个目标。
QuietZone := 4
set_bar_code_param (BarCodeHandle, 'quiet_zone', QuietZone)