Skip to content

Complete ZXIReaderOptions in iOS Wrapper #692

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Dec 20, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions wrappers/ios/Sources/Wrapper/Reader/ZXIBarcodeReader.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@ NS_ASSUME_NONNULL_BEGIN
-(instancetype)initWithOptions:(ZXIReaderOptions*)options;

-(nullable NSArray<ZXIResult *> *)readCIImage:(nonnull CIImage *)image
error:(NSError *__autoreleasing _Nullable *)error;
error:(NSError *__autoreleasing _Nullable *)error;

-(nullable NSArray<ZXIResult *> *)readCGImage:(nonnull CGImageRef)image
error:(NSError *__autoreleasing _Nullable *)error;
error:(NSError *__autoreleasing _Nullable *)error;

-(nullable NSArray<ZXIResult *> *)readCVPixelBuffer:(nonnull CVPixelBufferRef)pixelBuffer
error:(NSError *__autoreleasing _Nullable *)error;
error:(NSError *__autoreleasing _Nullable *)error;

@end

Expand Down
3 changes: 1 addition & 2 deletions wrappers/ios/Sources/Wrapper/Reader/ZXIBarcodeReader.mm
Original file line number Diff line number Diff line change
Expand Up @@ -98,8 +98,7 @@ - (instancetype)initWithOptions:(ZXIReaderOptions*)options{
NSMutableData *data = [NSMutableData dataWithLength: cols * rows];


CGContextRef contextRef = CGBitmapContextCreate(
data.mutableBytes,// Pointer to backing data
CGContextRef contextRef = CGBitmapContextCreate(data.mutableBytes,// Pointer to backing data
cols, // Width of bitmap
rows, // Height of bitmap
8, // Bits per component
Expand Down
61 changes: 48 additions & 13 deletions wrappers/ios/Sources/Wrapper/Reader/ZXIReaderOptions.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,31 +6,66 @@

NS_ASSUME_NONNULL_BEGIN

typedef NS_ENUM(NSInteger, ZXIBinarizer) {
ZXIBinarizerLocalAverage,
ZXIBinarizerGlobalHistogram,
ZXIBinarizerFixedThreshold,
ZXIBinarizerBoolCast
};

typedef NS_ENUM(NSInteger, ZXIEanAddOnSymbol) {
ZXIEanAddOnSymbolIgnore,
ZXIEanAddOnSymbolRead,
ZXIEanAddOnSymbolRequire
};

typedef NS_ENUM(NSInteger, ZXITextMode) {
ZXITextModePlain,
ZXITextModeECI,
ZXITextModeHRI,
ZXITextModeHex,
ZXITextModeEscaped
};

@interface ZXIReaderOptions : NSObject
/// An array of ZXIFormat
@property(nonatomic, strong) NSArray<NSNumber*> *formats;
@property(nonatomic) BOOL tryHarder;
@property(nonatomic) BOOL tryRotate;
@property(nonatomic) BOOL tryInvert;
@property(nonatomic) BOOL tryDownscale;
@property(nonatomic) BOOL isPure;
@property(nonatomic) ZXIBinarizer binarizer;
@property(nonatomic) NSInteger downscaleFactor;
@property(nonatomic) NSInteger downscaleThreshold;
@property(nonatomic) NSInteger minLineCount;
@property(nonatomic) NSInteger maxNumberOfSymbols;
@property(nonatomic) BOOL tryCode39ExtendedMode;
@property(nonatomic) BOOL validateCode39CheckSum;
@property(nonatomic) BOOL validateITFCheckSum;
@property(nonatomic) uint8_t downscaleFactor;
@property(nonatomic) uint16_t downscaleThreshold;
@property(nonatomic) NSInteger maxNumberOfSymbols;
@property(nonatomic) BOOL returnCodabarStartEnd;
@property(nonatomic) BOOL returnErrors;
@property(nonatomic) ZXIEanAddOnSymbol eanAddOnSymbol;
@property(nonatomic) ZXITextMode textMode;

- (instancetype)initWithFormats:(NSArray<NSNumber*>*)formats
tryHarder:(BOOL)tryHarder
tryRotate:(BOOL)tryRotate
tryInvert:(BOOL)tryInvert
tryDownscale:(BOOL)tryDownscale
tryCode39ExtendedMode:(BOOL)tryCode39ExtendedMode
validateCode39CheckSum:(BOOL)validateCode39CheckSum
validateITFCheckSum:(BOOL)validateITFCheckSum
downscaleFactor:(uint8_t)downscaleFactor
downscaleThreshold:(uint16_t)downscaleThreshold
maxNumberOfSymbols:(NSInteger)maxNumberOfSymbols;
tryHarder:(BOOL)tryHarder
tryRotate:(BOOL)tryRotate
tryInvert:(BOOL)tryInvert
tryDownscale:(BOOL)tryDownscale
isPure:(BOOL)isPure
binarizer:(ZXIBinarizer)binarizer
downscaleFactor:(NSInteger)downscaleFactor
downscaleThreshold:(NSInteger)downscaleThreshold
minLineCount:(NSInteger)minLineCount
maxNumberOfSymbols:(NSInteger)maxNumberOfSymbols
tryCode39ExtendedMode:(BOOL)tryCode39ExtendedMode
validateCode39CheckSum:(BOOL)validateCode39CheckSum
validateITFCheckSum:(BOOL)validateITFCheckSum
returnCodabarStartEnd:(BOOL)returnCodabarStartEnd
returnErrors:(BOOL)returnErrors
eanAddOnSymbol:(ZXIEanAddOnSymbol)eanAddOnSymbol
textMode:(ZXITextMode)textMode;
@end

NS_ASSUME_NONNULL_END
220 changes: 181 additions & 39 deletions wrappers/ios/Sources/Wrapper/Reader/ZXIReaderOptions.mm
Original file line number Diff line number Diff line change
Expand Up @@ -18,110 +18,252 @@ -(instancetype)init {
}

- (instancetype)initWithFormats:(NSArray<NSNumber*>*)formats
tryHarder:(BOOL)tryHarder
tryRotate:(BOOL)tryRotate
tryInvert:(BOOL)tryInvert
tryDownscale:(BOOL)tryDownscale
tryCode39ExtendedMode:(BOOL)tryCode39ExtendedMode
validateCode39CheckSum:(BOOL)validateCode39CheckSum
validateITFCheckSum:(BOOL)validateITFCheckSum
downscaleFactor:(uint8_t)downscaleFactor
downscaleThreshold:(uint16_t)downscaleThreshold
maxNumberOfSymbols:(NSInteger)maxNumberOfSymbols {
tryHarder:(BOOL)tryHarder
tryRotate:(BOOL)tryRotate
tryInvert:(BOOL)tryInvert
tryDownscale:(BOOL)tryDownscale
isPure:(BOOL)isPure
binarizer:(ZXIBinarizer)binarizer
downscaleFactor:(NSInteger)downscaleFactor
downscaleThreshold:(NSInteger)downscaleThreshold
minLineCount:(NSInteger)minLineCount
maxNumberOfSymbols:(NSInteger)maxNumberOfSymbols
tryCode39ExtendedMode:(BOOL)tryCode39ExtendedMode
validateCode39CheckSum:(BOOL)validateCode39CheckSum
validateITFCheckSum:(BOOL)validateITFCheckSum
returnCodabarStartEnd:(BOOL)returnCodabarStartEnd
returnErrors:(BOOL)returnErrors
eanAddOnSymbol:(ZXIEanAddOnSymbol)eanAddOnSymbol
textMode:(ZXITextMode)textMode {
self = [super init];
self.cppOpts = ZXing::ReaderOptions();
self.formats = formats;
self.tryHarder = tryHarder;
self.tryRotate = tryRotate;
self.tryInvert = tryInvert;
self.tryDownscale = tryDownscale;
self.tryCode39ExtendedMode = tryCode39ExtendedMode;
self.validateCode39CheckSum = validateCode39CheckSum;
self.validateITFCheckSum = validateITFCheckSum;
self.isPure = isPure;
self.binarizer = binarizer;
self.downscaleFactor = downscaleFactor;
self.downscaleThreshold = downscaleThreshold;
self.minLineCount = minLineCount;
self.maxNumberOfSymbols = maxNumberOfSymbols;
self.formats = formats;
self.tryCode39ExtendedMode = tryCode39ExtendedMode;
self.validateCode39CheckSum = validateCode39CheckSum;
self.validateITFCheckSum = validateITFCheckSum;
self.returnCodabarStartEnd = returnCodabarStartEnd;
self.returnErrors = returnErrors;
self.eanAddOnSymbol = eanAddOnSymbol;
self.textMode = textMode;
return self;
}

-(BOOL)tryHarder {
return self.cppOpts.tryHarder();
}

-(void)setTryHarder:(BOOL)tryHarder {
self.cppOpts.setTryHarder(tryHarder);
}

-(BOOL)tryRotate {
return self.cppOpts.tryRotate();
}

-(void)setTryRotate:(BOOL)tryRotate {
self.cppOpts.setTryRotate(tryRotate);
}

-(BOOL)tryInvert {
return self.cppOpts.tryInvert();
}

-(void)setTryInvert:(BOOL)tryInvert {
self.cppOpts.setTryInvert(tryInvert);
}

-(BOOL)tryDownscale {
return self.cppOpts.tryDownscale();
}

-(void)setTryDownscale:(BOOL)tryDownscale {
self.cppOpts.setTryDownscale(tryDownscale);
}

-(void)setTryCode39ExtendedMode:(BOOL)tryCode39ExtendedMode {
self.cppOpts.setTryCode39ExtendedMode(tryCode39ExtendedMode);
-(BOOL)isPure {
return self.cppOpts.isPure();
}

-(void)setValidateCode39CheckSum:(BOOL)validateCode39CheckSum {
self.cppOpts.setValidateCode39CheckSum(validateCode39CheckSum);
-(void)setIsPure:(BOOL)isPure {
self.cppOpts.setIsPure(isPure);
}

-(void)setValidateITFCheckSum:(BOOL)validateITFCheckSum {
self.cppOpts.setValidateITFCheckSum(validateITFCheckSum);
-(ZXIBinarizer)binarizer {
switch (self.cppOpts.binarizer()) {
default:
case ZXing::Binarizer::LocalAverage:
return ZXIBinarizer::ZXIBinarizerLocalAverage;
case ZXing::Binarizer::GlobalHistogram:
return ZXIBinarizer::ZXIBinarizerGlobalHistogram;
case ZXing::Binarizer::FixedThreshold:
return ZXIBinarizer::ZXIBinarizerFixedThreshold;
case ZXing::Binarizer::BoolCast:
return ZXIBinarizer::ZXIBinarizerBoolCast;
}
}

ZXing::Binarizer toNativeBinarizer(ZXIBinarizer binarizer) {
switch (binarizer) {
default:
case ZXIBinarizerLocalAverage:
return ZXing::Binarizer::LocalAverage;
case ZXIBinarizerGlobalHistogram:
return ZXing::Binarizer::GlobalHistogram;
case ZXIBinarizerFixedThreshold:
return ZXing::Binarizer::FixedThreshold;
case ZXIBinarizerBoolCast:
return ZXing::Binarizer::BoolCast;
}
}

-(void)setDownscaleFactor:(uint8_t)downscaleFactor {
-(void)setBinarizer:(ZXIBinarizer)binarizer {
self.cppOpts.setBinarizer(toNativeBinarizer(binarizer));
}

-(NSInteger)downscaleFactor {
return self.cppOpts.downscaleFactor();
}

-(void)setDownscaleFactor:(NSInteger)downscaleFactor {
self.cppOpts.setDownscaleFactor(downscaleFactor);
}

-(void)setDownscaleThreshold:(uint16_t)downscaleThreshold {
self.cppOpts.setDownscaleThreshold(downscaleThreshold);
-(NSInteger)downscaleThreshold {
return self.cppOpts.downscaleThreshold();
}

-(void)setMaxNumberOfSymbols:(NSInteger)maxNumberOfSymbols {
self.cppOpts.setMaxNumberOfSymbols(maxNumberOfSymbols);
-(void)setDownscaleThreshold:(NSInteger)downscaleThreshold {
self.cppOpts.setDownscaleThreshold(downscaleThreshold);
}

-(BOOL)tryHarder {
return self.cppOpts.tryHarder();
-(NSInteger)minLineCount {
return self.cppOpts.minLineCount();
}

-(BOOL)tryRotate {
return self.cppOpts.tryRotate();
-(void)setMinLineCount:(NSInteger)minLineCount {
self.cppOpts.setMinLineCount(minLineCount);
}

-(BOOL)tryInvert {
return self.cppOpts.tryInvert();
- (NSInteger)maxNumberOfSymbols {
return self.cppOpts.maxNumberOfSymbols();
}

-(BOOL)tryDownscale {
return self.cppOpts.tryDownscale();
-(void)setMaxNumberOfSymbols:(NSInteger)maxNumberOfSymbols {
self.cppOpts.setMaxNumberOfSymbols(maxNumberOfSymbols);
}

-(BOOL)tryCode39ExtendedMode {
return self.cppOpts.tryCode39ExtendedMode();
}

-(void)setTryCode39ExtendedMode:(BOOL)tryCode39ExtendedMode {
self.cppOpts.setTryCode39ExtendedMode(tryCode39ExtendedMode);
}

-(BOOL)validateCode39CheckSum {
return self.cppOpts.validateCode39CheckSum();
}

-(void)setValidateCode39CheckSum:(BOOL)validateCode39CheckSum {
self.cppOpts.setValidateCode39CheckSum(validateCode39CheckSum);
}

-(BOOL)validateITFCheckSum {
return self.cppOpts.validateITFCheckSum();
}

-(uint8_t)downscaleFactor {
return self.cppOpts.downscaleFactor();
-(void)setValidateITFCheckSum:(BOOL)validateITFCheckSum {
self.cppOpts.setValidateITFCheckSum(validateITFCheckSum);
}

-(uint16_t)downscaleThreshold {
return self.cppOpts.downscaleThreshold();
-(BOOL)returnCodabarStartEnd {
return self.cppOpts.returnCodabarStartEnd();
}

- (NSInteger)maxNumberOfSymbols {
return self.cppOpts.maxNumberOfSymbols();
-(void)setReturnCodabarStartEnd:(BOOL)returnCodabarStartEnd {
self.cppOpts.setReturnCodabarStartEnd(returnCodabarStartEnd);
}

-(BOOL)returnErrors {
return self.cppOpts.returnErrors();
}

-(void)setReturnErrors:(BOOL)returnErrors {
self.cppOpts.setReturnErrors(returnErrors);
}

-(ZXIEanAddOnSymbol)eanAddOnSymbol {
switch (self.cppOpts.eanAddOnSymbol()) {
default:
case ZXing::EanAddOnSymbol::Ignore:
return ZXIEanAddOnSymbol::ZXIEanAddOnSymbolIgnore;
case ZXing::EanAddOnSymbol::Read:
return ZXIEanAddOnSymbol::ZXIEanAddOnSymbolRead;
case ZXing::EanAddOnSymbol::Require:
return ZXIEanAddOnSymbol::ZXIEanAddOnSymbolRequire;
}
}

ZXing::EanAddOnSymbol toNativeEanAddOnSymbol(ZXIEanAddOnSymbol eanAddOnSymbol) {
switch (eanAddOnSymbol) {
default:
case ZXIEanAddOnSymbolIgnore:
return ZXing::EanAddOnSymbol::Ignore;
case ZXIEanAddOnSymbolRead:
return ZXing::EanAddOnSymbol::Read;
case ZXIEanAddOnSymbolRequire:
return ZXing::EanAddOnSymbol::Require;
}
}

-(void)setEanAddOnSymbol:(ZXIEanAddOnSymbol)eanAddOnSymbol {
self.cppOpts.setEanAddOnSymbol(toNativeEanAddOnSymbol(eanAddOnSymbol));
}

-(ZXITextMode)textMode {
switch (self.cppOpts.textMode()) {
default:
case ZXing::TextMode::Plain:
return ZXITextMode::ZXITextModePlain;
case ZXing::TextMode::ECI:
return ZXITextMode::ZXITextModeECI;
case ZXing::TextMode::HRI:
return ZXITextMode::ZXITextModeHRI;
case ZXing::TextMode::Hex:
return ZXITextMode::ZXITextModeHex;
case ZXing::TextMode::Escaped:
return ZXITextMode::ZXITextModeEscaped;
}
}

ZXing::TextMode toNativeTextMode(ZXITextMode mode) {
switch (mode) {
default:
case ZXITextModePlain:
return ZXing::TextMode::Plain;
case ZXITextModeECI:
return ZXing::TextMode::ECI;
case ZXITextModeHRI:
return ZXing::TextMode::HRI;
case ZXITextModeHex:
return ZXing::TextMode::Hex;
case ZXITextModeEscaped:
return ZXing::TextMode::Escaped;
}
}

-(void)setTextMode:(ZXITextMode)textMode {
self.cppOpts.setTextMode(toNativeTextMode(textMode));
}

@end