Как использовать свойство 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);
}