Как использовать свойство scanCrop считывателя ZBar?

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

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

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

3 ответов


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

CGRect scanCrop

область видеоизображения, которое будет сканироваться, в нормализованные координаты изображения. Обратите внимание, что видео изображение в ландшафтном режиме (по умолчанию {{0, 0}, {1, 1}})

координаты для всех аргументов находятся в нормализованном float, который находится от 0-1. Итак, в нормализованном значении,theView.width 1.0, а theView.height is 1.0. Таким образом по умолчанию rect {{0,0},{1,1}}.

так, например, если у меня есть прозрачный UIView имени scanView как область сканирования для my 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); для EG. 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); }