Как мне использовать свойство scanCrop ридера ZBar? - PullRequest
8 голосов
/ 07 августа 2011

Я использую ZBar SDK для iPhone для сканирования штрих-кода.Я хочу, чтобы читатель сканировал только определенный прямоугольник, а не весь вид, для этого необходимо установить для свойства scanCrop считывателя нужный прямоугольник.

Мне трудно разобраться вПараметр прямоугольника, который должен быть установлен.

Может кто-нибудь сказать мне, какой прямоугольник я должен дать в качестве аргумента, если в портретном режиме его координаты будут: CGRectMake( A, B, C, D )?

Ответы [ 3 ]

23 голосов
/ 10 сентября 2011

Из документации * ZBarReaderView класса zbar :

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

Это работает для меня.Надеюсь, это поможет.

3 голосов
/ 30 декабря 2013

При этом вы можете использовать область сканирования.reader.scanCrop = CGRectMake(x,y,width,height); напримерreader.scanCrop = CGRectMake(.25,0.25,0.5,0.45); Я использовал это, и это работает для меня.

1 голос
/ 20 сентября 2016

давай !!!это правильный способ настройки площади посева;

Я потратил на это много времени;

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

...