RedLaser SetActiveRegion iPhone

时间:2012-02-13 21:44:05

标签: iphone objective-c ios barcode barcode-scanner

我目前正处于完成条形码扫描应用程序的最后阶段,该应用程序使用RedLaser API。有一个挑战,因为我无法在图像中设置区域以确定条形码的位置。它从完整图像中识别条形码,而不是我设置的ActiveRegion。

我没有确切的代码在我面前,但它实际上是这个source的副本:

(void) setPortraitLayout
{
    // Set portrait
    self.parentPicker.orientation = UIImageOrientationUp;

    // Set the active scanning region for portrait mode
    [self.parentPicker setActiveRegion:CGRectMake(0, 100, 320, 250)];

    // Animate the UI changes
    CGAffineTransform transform = CGAffineTransformMakeRotation(0);

    [UIView beginAnimations:@"rotateToPortrait" context:nil]; // Tell UIView we're ready to start animations.
    [UIView setAnimationDelegate:self];
    [UIView setAnimationCurve: UIViewAnimationCurveLinear ];
    [UIView setAnimationDuration: 0.5];

    redlaserLogo.transform = transform;

    //A visible frame to aim with
    [self setActiveRegionFrame];

    [UIView commitAnimations]; // Animate!
}

(void) setActiveRegionFrame
{
    //this just draws up a visible rectangle slightly smaller than supposed ActiveRegion
    [_rectLayer setFrame:CGRectMake(self.parentPicker.activeRegion.origin.x - 50, self.parentPicker.activeRegion.origin.y - 50, self.parentPicker.activeRegion.size.width - 50, self.parentPicker.activeRegion.size.height - 50)];
    CGPathRef path = [self newRectPathInRect:_rectLayer.bounds];
    [_rectLayer setPath:path];
    CGPathRelease(path);
    [_rectLayer needsLayout];
}

任何人都有使用手动ActiveRegion设置RedLaser的经验吗?我正在使用3.1.0 iPhone库(也尝试使用最新的3.2.4,如果之前存在错误的话)。

1 个答案:

答案 0 :(得分:1)

我为RedLaser工作,所以我可以提供帮助。我还建议您参考SDK zip中的“使用RedLaser SDK”文件。

简短回答:ActiveRegions已被弃用。请改用BarcodeResult类。指令的第6-9页

更长的答案:BarcodeResult类包括扫描的所有条形码的位置(NSValues的NSArray)。您可以告诉您的应用忽略返回值不在您所需区域的所有结果。

PDF中的相关文字:

  

最后,每个条形码都有一个NSValues的NSArray,其中每个NSValue都是一个CGPoint,指示我们在哪里找到条形码。点的坐标将与BarcodePickerController的边界位于同一坐标系中。数组中的第一个点将是条形码的左上角,第二个点将是条形码的右上角。请注意,如果条形码被“上下颠倒”识别,则在屏幕上查看时,这些点将位于右下角和左下角。此外,由于在使用设备的前置摄像头进行识别时会对镜像进行镜像,因此这些点也不一定按顺时针顺序排列。该数组通常包含4个点,但它可能包含更多或更少。

     

从这些点产生的路径可能无法覆盖整个条形码,并且可能只有一个像素高或宽。条形码位置仅在实际识别条形码的帧上更新,因此自mostRecentScanTime以来的时间越长,条形码在相机预览中仍处于该位置的可能性就越小。通过部分识别方法识别的条形码(用于一些长条形码,允许用户将相机指向条形码的每个部分并将整个代码拼凑在一起)将仅具有关于要扫描的条形码的最新部分的识别信息

如果您还有其他问题,请通过http://support.redlaser.com/询问 - 我们的回复时间非常快。