I am using the ZBar SDK for iPhone in order to scan a barcode. I want the reader to scan only a specific rectangle instead of the whole view, for doing that it is needed to set the scanCrop property of the reader to the desired rectangle.
I'm having hard time with understanding the rectangle parameter that has to be set.
Can someone please tell me what rect should I give as an argument if on portrait view its coordinates would be: CGRectMake( A, B, C, D )
?
come on!!! this is the right way to adjust the crop area;
I had wasted tons of time on it;
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); }
From the zbar's ZBarReaderView Class documentation :
The coordinates for all of the arguments is in a normalized float, which is from 0 - 1. So, in normalized value,
theView.width
is 1.0, andtheView.height
is 1.0. Therefore, the default rect is {{0,0},{1,1}}.So for example, if I have a transparent
UIView
namedscanView
as a scanning region for myreaderView
. Rather than do :We should do this, normalizing every arguments first :
It works for me. Hope that helps.
You can use scan crop area by doing this.
reader.scanCrop = CGRectMake(x,y,width,height);
for eg.reader.scanCrop = CGRectMake(.25,0.25,0.5,0.45);
I used this and its working for me.