我目前正处于完成条形码扫描应用程序的最后阶段,该应用程序使用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,如果之前存在错误的话)。
答案 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/询问 - 我们的回复时间非常快。