/*
|
* Copyright 2013 ZXing authors
|
*
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
* you may not use this file except in compliance with the License.
|
* You may obtain a copy of the License at
|
*
|
* http://www.apache.org/licenses/LICENSE-2.0
|
*
|
* Unless required by applicable law or agreed to in writing, software
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* See the License for the specific language governing permissions and
|
* limitations under the License.
|
*/
|
|
#import "ZXPDF417BoundingBox.h"
|
#import "ZXPDF417Codeword.h"
|
#import "ZXPDF417DetectionResultColumn.h"
|
|
const int ZX_PDF417_MAX_NEARBY_DISTANCE = 5;
|
|
@implementation ZXPDF417DetectionResultColumn
|
|
- (id)initWithBoundingBox:(ZXPDF417BoundingBox *)boundingBox {
|
self = [super init];
|
if (self) {
|
_boundingBox = [[ZXPDF417BoundingBox alloc] initWithBoundingBox:boundingBox];
|
_codewords = [NSMutableArray array];
|
for (int i = 0; i < boundingBox.maxY - boundingBox.minY + 1; i++) {
|
[_codewords addObject:[NSNull null]];
|
}
|
}
|
|
return self;
|
}
|
|
- (ZXPDF417Codeword *)codewordNearby:(int)imageRow {
|
ZXPDF417Codeword *codeword = [self codeword:imageRow];
|
if (codeword) {
|
return codeword;
|
}
|
for (int i = 1; i < ZX_PDF417_MAX_NEARBY_DISTANCE; i++) {
|
int nearImageRow = [self imageRowToCodewordIndex:imageRow] - i;
|
if (nearImageRow >= 0) {
|
codeword = self.codewords[nearImageRow];
|
if ((id)codeword != [NSNull null]) {
|
return codeword;
|
}
|
}
|
nearImageRow = [self imageRowToCodewordIndex:imageRow] + i;
|
if (nearImageRow < [self.codewords count]) {
|
codeword = self.codewords[nearImageRow];
|
if ((id)codeword != [NSNull null]) {
|
return codeword;
|
}
|
}
|
}
|
return nil;
|
}
|
|
- (int)imageRowToCodewordIndex:(int)imageRow {
|
return imageRow - self.boundingBox.minY;
|
}
|
|
- (void)setCodeword:(int)imageRow codeword:(ZXPDF417Codeword *)codeword {
|
_codewords[[self imageRowToCodewordIndex:imageRow]] = codeword;
|
}
|
|
- (ZXPDF417Codeword *)codeword:(int)imageRow {
|
NSUInteger index = [self imageRowToCodewordIndex:imageRow];
|
if (_codewords[index] == [NSNull null]) {
|
return nil;
|
}
|
return _codewords[index];
|
}
|
|
- (NSString *)description {
|
NSMutableString *result = [NSMutableString string];
|
int row = 0;
|
for (ZXPDF417Codeword *codeword in self.codewords) {
|
if ((id)codeword == [NSNull null]) {
|
[result appendFormat:@"%3d: | \n", row++];
|
continue;
|
}
|
[result appendFormat:@"%3d: %3d|%3d\n", row++, codeword.rowNumber, codeword.value];
|
}
|
return [NSString stringWithString:result];
|
}
|
|
@end
|