【问题标题】:Wrong decoding of barcodes also in ZBAR SDK exampleZBAR SDK 示例中的条码解码错误
【发布时间】:2025-12-31 13:20:17
【问题描述】:

我正在将 ZBarSDK 与 iPhone 项目一起使用。

我使用 ZBar 作为嵌入式阅读器。基本上在 Interface Builder 中连接一个 UIView。将类更改为ZBarReaderView 并实现委托方法-(void)readerView: (ZBarReaderView*) view didReadSymbols: (ZBarSymbolSet*) syms fromImage: (UIImage*) img

这在大多数情况下都可以正常工作。然而,有些条码显然无法正确扫描。第一个块被解释错误。下次我得到7001814... 时,我得到类似5008914... 的东西,然后我得到正确的4001954...

我回到 SDK 中的“EmbedReader”示例,查看是否可以找到任何可能需要进行的调整,并发现它也产生了相同的错误。如果我查看示例“ReaderSample”,则不会发生错误,但是它使用了ZBarReaderViewController 的实例。

然后我尝试在我的viewWillAppear 方法中将ZBAR_CFG_X_DENSITYZBAR_CFG_Y_DENSITY 都更改为3,但这没有任何影响。

ZBarReaderViewControllerZBarReaderView的扫描机制有什么区别?我可以做些什么来抑制错误的结果?

谢谢

这里有一些相关的代码sn-ps。

在.h

@interface ScanVC:UIViewController<ZBarReaderViewDelegate>
{
    IBOutlet ZBarReaderView *readerView;
    ...
}
...
@property (nonatomic, retain) IBOutlet ZBarReaderView *readerView;
...

在.m中

@synthesize readerView;
...
-(void) viewDidAppear: (BOOL) animated
{
    [[readerView scanner] setSymbology:0 config:ZBAR_CFG_X_DENSITY to: 3];
    [[readerView scanner] setSymbology:0 config:ZBAR_CFG_Y_DENSITY to: 3];
    [[readerView scanner] setSymbology:ZBAR_I25 config:ZBAR_CFG_ENABLE to:0];
    [readerView start];
}
...
- (void) readerView: (ZBarReaderView*) view didReadSymbols: (ZBarSymbolSet*) syms fromImage: (UIImage*) img
{
    for(ZBarSymbol *sym in syms) {
    ...
    }
    ...
}
...
-(void)viewDidLoad
{
    [readerView setDelegate: self];
}

【问题讨论】:

    标签: objective-c ios6 zbar-sdk zbar


    【解决方案1】:

    我注意到您正在禁用 Interleaved 2 of 5 代码。您是否知道您将扫描哪种类型,或者您实际上会扫描除 I25 之外的所有类型?如果是这样,您可能想尝试只启用一种符号类型——例如,只启用 Code 39:

    [[readerView scanner] setSymbology:0 config:ZBAR_CFG_ENABLE to:0];
    [[readerView scanner] setSymbology:ZBAR_CODE39 config:ZBAR_CFG_ENABLE to:1];
    

    我发现这样做可以获得更准确的结果(也更快)。

    【讨论】: