[zbar-commits] push rev [270]: fix simulated camera image orientation/scaling
Status: Beta
Brought to you by:
spadix
|
From: <sp...@us...> - 2010-11-24 21:44:02
|
changeset: 270:0c715cdd469f user: sp...@us... date: Wed Nov 24 12:33:47 2010 -0800 details: http://zbar.hg.sourceforge.net:8000/hgroot/zbar/zbarzbar/rev/0c715cdd469f description: fix simulated camera image orientation/scaling diffstat: iphone/ChangeLog | 1 + iphone/ZBarReaderView.m | 14 ++++++++++---- iphone/ZBarReaderViewImpl_Capture.m | 14 +++----------- iphone/ZBarReaderViewImpl_Simulator.m | 35 ++++++++++++++++++++--------------- 4 files changed, 34 insertions(+), 30 deletions(-) diffs (149 lines): diff -r db63ec1d27f9 -r 0c715cdd469f iphone/ChangeLog --- a/iphone/ChangeLog Wed Nov 24 10:19:00 2010 -0800 +++ b/iphone/ChangeLog Wed Nov 24 12:33:47 2010 -0800 @@ -1,4 +1,5 @@ current: + * fix simulated camera image orientation/scaling * cleanup and expose ZBarHelpController * expose enable for reader capture processing * workaround iOS 4.2 hang diff -r db63ec1d27f9 -r 0c715cdd469f iphone/ZBarReaderView.m --- a/iphone/ZBarReaderView.m Wed Nov 24 10:19:00 2010 -0800 +++ b/iphone/ZBarReaderView.m Wed Nov 24 12:33:47 2010 -0800 @@ -88,6 +88,8 @@ fpsLabel.font = [UIFont systemFontOfSize: 18]; fpsLabel.textAlignment = UITextAlignmentRight; [fpsView addSubview: fpsLabel]; + + self.zoom = 1.25; } - (id) initWithImageScanner: (ZBarImageScanner*) scanner @@ -113,7 +115,6 @@ action: @selector(handlePinch)]; [self addGestureRecognizer: pinch]; - self.zoom = 1.25; return(self); } @@ -171,15 +172,20 @@ - (void) setImageSize: (CGSize) size { CGSize psize = preview.bounds.size; - CGFloat scalex = size.width / psize.width; - CGFloat scaley = size.height / psize.height; + CGFloat scalex = size.width / psize.height; + CGFloat scaley = size.height / psize.width; imageScale = (scalex > scaley) ? scalex : scaley; + // match overlay to preview image + overlay.bounds = CGRectMake(0, 0, size.width, size.height); + CGFloat scale = 1 / imageScale; + CATransform3D xform = CATransform3DMakeRotation(M_PI / 2, 0, 0, 1); + overlay.transform = CATransform3DScale(xform, scale, scale, 1); tracking.borderWidth = imageScale / zoom; zlog(@"scaling: layer=%@ image=%@ scale=%g %c %g = 1/%g", NSStringFromCGSize(psize), NSStringFromCGSize(size), - scalex, (scalex > scaley) ? '>' : '<', scaley, 1 / imageScale); + scalex, (scalex > scaley) ? '>' : '<', scaley, scale); [self resetTracking]; } diff -r db63ec1d27f9 -r 0c715cdd469f iphone/ZBarReaderViewImpl_Capture.m --- a/iphone/ZBarReaderViewImpl_Capture.m Wed Nov 24 10:19:00 2010 -0800 +++ b/iphone/ZBarReaderViewImpl_Capture.m Wed Nov 24 12:33:47 2010 -0800 @@ -304,17 +304,9 @@ context: (void*) ctx { if(obj == captureReader && - [path isEqualToString: @"size"]) { - // adjust tracking overlay to match image size - CGSize size = captureReader.size; - overlay.bounds = CGRectMake(0, 0, size.width, size.height); - - CGSize rsize = CGSizeMake(size.height, size.width); - [self setImageSize: rsize]; - CGFloat scale = 1 / imageScale; - CATransform3D xform = CATransform3DMakeRotation(M_PI / 2, 0, 0, 1); - overlay.transform = CATransform3DScale(xform, scale, scale, 1); - } + [path isEqualToString: @"size"]) + // adjust preview to match image size + [self setImageSize: captureReader.size]; else if(obj == captureReader && [path isEqualToString: @"framesPerSecond"]) fpsLabel.text = [NSString stringWithFormat: @"%.2ffps ", diff -r db63ec1d27f9 -r 0c715cdd469f iphone/ZBarReaderViewImpl_Simulator.m --- a/iphone/ZBarReaderViewImpl_Simulator.m Wed Nov 24 10:19:00 2010 -0800 +++ b/iphone/ZBarReaderViewImpl_Simulator.m Wed Nov 24 12:33:47 2010 -0800 @@ -91,6 +91,7 @@ { ZBarImageScanner *scanner; UIImage *scanImage; + CALayer *previewImage; BOOL enableCache; } @end @@ -130,6 +131,10 @@ preview.frame = self.bounds; [self.layer addSublayer: preview]; + previewImage = [CALayer new]; + previewImage.frame = self.bounds; + [preview addSublayer: previewImage]; + [super initSubviews]; } @@ -137,6 +142,8 @@ { [scanner release]; scanner = nil; + [previewImage release]; + previewImage = nil; [super dealloc]; } @@ -165,27 +172,25 @@ scale: 1.0 orientation: UIImageOrientationUp]; - CGSize size = image.size; - overlay.bounds = CGRectMake(0, 0, size.width, size.height); - [self setImageSize: size]; + [self setImageSize: image.size]; - preview.contentsScale = imageScale; - preview.contentsGravity = kCAGravityCenter; - preview.contents = (id)cgimage; - - // match overlay to image - CGFloat scale = 1 / imageScale; - overlay.transform = CATransform3DMakeScale(scale, scale, 1); + [CATransaction begin]; + [CATransaction setDisableActions: YES]; + previewImage.contentsScale = imageScale; + previewImage.contentsGravity = kCAGravityCenter; + previewImage.transform = CATransform3DMakeRotation(M_PI_2, 0, 0, 1); + previewImage.contents = (id)cgimage; + [CATransaction commit]; ZBarImage *zimg = [[ZBarImage alloc] initWithCGImage: cgimage]; - size = zimg.size; - zimg.crop = CGRectMake(zoomCrop.origin.y * size.width, - zoomCrop.origin.x * size.height, - zoomCrop.size.height * size.width, - zoomCrop.size.width * size.height); + CGSize size = zimg.size; + zimg.crop = CGRectMake(zoomCrop.origin.x * size.width, + zoomCrop.origin.y * size.height, + zoomCrop.size.width * size.width, + zoomCrop.size.height * size.height); int nsyms = [scanner scanImage: zimg]; zlog(@"scan image: %@ crop=%@ nsyms=%d", |