2011-08-07 18 views
8

我使用iPhone的ZBar SDK來掃描條形碼。我希望讀者只掃描特定的矩形而不是整個視圖,因爲需要將讀取器的scanCrop屬性設置爲所需的矩形。如何使用ZBar閱讀器的scanCrop屬性?

我很難理解必須設置的矩形參數。

有人可以告訴我,如果在縱向視圖上它的座標應該是什麼,我應該給出什麼樣的結果:CGRectMake(A, B, C, D)

回答

23

從zbar和的ZBarReaderView Class documentation

的CGRect scanCrop

將被掃描的視頻圖像的區域,在歸一化圖像座標。請注意,視頻圖像處於橫向模式(默認{{0,0},{1,1}})

所有參數的座標都在標準化的float中,該值爲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

我希望我能給予好評你兩次,謝謝! – chourobin

+1

如果您的讀者將在縱向而不是風景,請參閱[本文](http://stackoverflow.com/a/11732752/542400) – AMayes

3

這樣做可以使用掃描裁剪區域。 reader.scanCrop = CGRectMake(x,y,width,height); 例如。 reader.scanCrop = CGRectMake(.25,0.25,0.5,0.45); 我用這個和它爲我工作。

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); }