1

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

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

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

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

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

ZBarReaderViewController和的扫描机制有什么区别ZBarReaderView?我能做些什么来抑制错误的结果?

谢谢

这里有一些相关的代码片段。

在.h

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

在他们中

@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];
}
4

1 回答 1

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];

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

于 2013-01-25T21:19:47.043 回答