9

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

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

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

4

3 回答 3

24

来自 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);

这个对我有用。希望有帮助。

于 2011-09-10T12:36:08.537 回答
3

您可以通过这样做使用扫描裁剪区域。 reader.scanCrop = CGRectMake(x,y,width,height); 例如。 reader.scanCrop = CGRectMake(.25,0.25,0.5,0.45); 我使用了它,它为我工作。

于 2013-12-30T14:25:33.940 回答
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); }

于 2016-09-20T10:55:57.523 回答