我正在使用ZBar SDK for iPhone来扫描条形码。我希望读者只扫描一个特定的矩形而不是整个视图,为此需要将阅读器的scanCrop属性设置为所需的矩形。
我很难理解必须设置的矩形参数。
有人可以告诉我,如果在纵向视图中它的坐标是:CGRectMake( A, B, C, D )
,我应该给出什么样的参数?
答案 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);
}