我正在使用适用于 iPhone 的 ZBar SDK 来扫描条形码。我希望读者只扫描一个特定的矩形而不是整个视图,为此需要将阅读器的 scanCrop 属性设置为所需的矩形。
我很难理解必须设置的矩形参数。
有人可以告诉我,如果在纵向视图上它的坐标是:我应该给出什么矩形作为参数:CGRectMake( A, B, C, D )
?
我正在使用适用于 iPhone 的 ZBar SDK 来扫描条形码。我希望读者只扫描一个特定的矩形而不是整个视图,为此需要将阅读器的 scanCrop 属性设置为所需的矩形。
我很难理解必须设置的矩形参数。
有人可以告诉我,如果在纵向视图上它的坐标是:我应该给出什么矩形作为参数:CGRectMake( A, B, C, D )
?
来自 zbar 的ZBarReaderView 类文档:
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);
这个对我有用。希望有帮助。
您可以通过这样做使用扫描裁剪区域。
reader.scanCrop = CGRectMake(x,y,width,height);
例如。
reader.scanCrop = CGRectMake(.25,0.25,0.5,0.45);
我使用了它,它为我工作。
来吧!!!这是调整裁剪区域的正确方法;
我在这上面浪费了很多时间;
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);
}