如何使用ZBar阅读器的scanCrop属性?

时间:2011-08-07 02:33:29

标签: objective-c iphone ios4 barcode-scanner scanning

我正在使用ZBar SDK for iPhone来扫描条形码。我希望读者只扫描一个特定的矩形而不是整个视图,为此需要将阅读器的scanCrop属性设置为所需的矩形。

我很难理解必须设置的矩形参数。

有人可以告诉我,如果在纵向视图中它的坐标是:CGRectMake( A, B, C, D ),我应该给出什么样的参数?

3 个答案:

答案 0 :(得分:23)

来自zbar的ZBarReaderView Class documentation

  

CGRect scanCrop

     

将以标准化图像坐标扫描的视频图像区域。请注意,视频图像处于横向模式(默认为{{0,0},{1,1}})

所有参数的坐标都在标准化浮点数中,从0到1.因此,在标准化值中,theView.width为1.0,theView.height为1.0。因此,默认矩形为{{0,0},{1,1}}。

例如,如果我有一个透明的UIView名为scanView作为readerView的扫描区域。而不是:

readerView.scanCrop = scanView.frame;

我们应该这样做,首先规范每个参数:

CGFloat x,y,width,height;  
x = scanView.frame.origin.x / readerView.bounds.size.width;
y = scanView.frame.origin.y / readerView.bounds.size.height;
width = scanView.frame.size.width / readerView.bounds.size.width;
height = scanView.frame.size.height / readerView.bounds.size.height;

readerView.scanCrop = CGRectMake(x, y, width, height);

它对我有用。希望有所帮助。

答案 1 :(得分:3)

您可以通过执行此操作来使用扫描裁剪区域。 reader.scanCrop = CGRectMake(x,y,width,height); 例如。 reader.scanCrop = CGRectMake(.25,0.25,0.5,0.45); 我用它并且它为我工作。

答案 2 :(得分:1)

来吧!!!这是调整作物面积的正确方法;

我浪费了大量的时间;

readerView.scanCrop = [self getScanCrop:cropRect readerViewBounds:contentView.bounds]; - (CGRect)getScanCrop:(CGRect)rect readerViewBounds:(CGRect)rvBounds{ CGFloat x,y,width,height; x = rect.origin.y / rvBounds.size.height; y = 1 - (rect.origin.x + rect.size.width) / rvBounds.size.width; width = rect.size.height / rvBounds.size.height; height = rect.size.width / rvBounds.size.width; return CGRectMake(x, y, width, height); }