RedLaser SetActiveRegion iPhone - PullRequest
       11

RedLaser SetActiveRegion iPhone

0 голосов
/ 14 февраля 2012

В настоящее время я нахожусь на завершающей стадии завершения приложения для сканирования штрих-кода, использующего API RedLaser. Однако есть одна проблема в том, что я не могу установить область на изображении, где он должен идентифицировать штрих-коды. Он идентифицирует штрих-код на полном изображении, а не на ActiveRegion, который я установил.

У меня нет точного кода передо мной, но это практически точная копия этого источника :

(void) setPortraitLayout
{
    // Set portrait
    self.parentPicker.orientation = UIImageOrientationUp;

    // Set the active scanning region for portrait mode
    [self.parentPicker setActiveRegion:CGRectMake(0, 100, 320, 250)];

    // Animate the UI changes
    CGAffineTransform transform = CGAffineTransformMakeRotation(0);

    [UIView beginAnimations:@"rotateToPortrait" context:nil]; // Tell UIView we're ready to start animations.
    [UIView setAnimationDelegate:self];
    [UIView setAnimationCurve: UIViewAnimationCurveLinear ];
    [UIView setAnimationDuration: 0.5];

    redlaserLogo.transform = transform;

    //A visible frame to aim with
    [self setActiveRegionFrame];

    [UIView commitAnimations]; // Animate!
}

(void) setActiveRegionFrame
{
    //this just draws up a visible rectangle slightly smaller than supposed ActiveRegion
    [_rectLayer setFrame:CGRectMake(self.parentPicker.activeRegion.origin.x - 50, self.parentPicker.activeRegion.origin.y - 50, self.parentPicker.activeRegion.size.width - 50, self.parentPicker.activeRegion.size.height - 50)];
    CGPathRef path = [self newRectPathInRect:_rectLayer.bounds];
    [_rectLayer setPath:path];
    CGPathRelease(path);
    [_rectLayer needsLayout];
}

У кого-нибудь есть опыт установки RedLaser с ручным ActiveRegion? Я использую библиотеку iPhone 3.1.0 (также пробовал с последней версией 3.2.4 на случай, если раньше была ошибка).

1 Ответ

1 голос
/ 14 февраля 2012

Я работаю на RedLaser, поэтому могу помочь. Я также рекомендую вам обратиться к файлу «Использование RedLaser SDK» в нашем ZIP-архиве SDK.

Краткий ответ: ActiveRegions устарела. Вместо этого используйте класс BarcodeResult. Страницы 6-9 инструкции

Более длинный ответ: класс BarcodeResult включает в себя местоположение всех отсканированных штрих-кодов (NSArray из NSValues). Вы можете указать своему приложению игнорировать все результаты, для которых возвращаемые значения не находятся в желаемой области.

Соответствующий текст из PDF:

Наконец, каждый штрих-код будет иметь NSArray из NSValues, где каждый NSValue является CGPoint, указывая, где мы расположили штрих-код. Координаты точек будут находиться в той же системе координат, что и границы BarcodePickerController. Первая точка в массиве будет находиться в верхнем левом углу штрих-кода, а вторая - в верхнем правом углу штрих-кода. Обратите внимание, что если штрих-код распознается «вверх ногами», эти точки будут находиться в правом нижнем и левом нижнем углу при просмотре на экране. Кроме того, поскольку предварительный просмотр зеркально отражается при использовании передней камеры устройства для распознавания, точки также не обязательно располагаются по часовой стрелке. Массив обычно содержит 4 точки, но может содержать больше или меньше.

Путь, полученный из этих точек, может не охватывать весь штрих-код, а может быть только один пиксель в высоту или в ширину. Местоположение штрих-кода обновляется только в тех кадрах, где штрих-код фактически распознан, поэтому чем дольше он проходит с момента MostRecentScanTime, тем меньше вероятность того, что штрих-код все еще находится в этой позиции в предварительном просмотре камеры. Штрих-коды, распознаваемые методом частичного распознавания (используется для некоторых длинных штрих-кодов, позволяющих пользователю навести камеру на каждую часть штрих-кода и соединить полный код вместе), будут иметь информацию о распознавании только на самой последней части штрих-кода, который будет сканироваться .

Если у вас есть другие вопросы, пожалуйста, задавайте по http://support.redlaser.com/ - наше время ответа довольно быстрое.

...