我在viewController中嵌入了一个ZBarReaderView,我想将扫描区域限制在视图中间的正方形。我已将相机的分辨率设置为1280x720。假设设备处于纵向模式,我只使用cameraViewBounds计算标准化坐标,这是readerView的边界,而overlayViewFrame是橙色框的框架,如此截图所示 - http://i.imgur.com/xzUDHIh.png。以下是我到目前为止的情况:
self.cameraView.session.sessionPreset = AVCaptureSessionPreset1280x720;
//Set CameraView's Frame to fit the SideController's Width
CGPoint origin = self.cameraView.frame.origin;
float cameraWidth = self.view.frame.size.width;
self.cameraView.frame = CGRectMake(origin.x, origin.y, cameraWidth, cameraWidth);
//Set CameraView's Cropped Scanning Rect
CGFloat x,y,width,height;
CGRect cameraViewBounds = self.cameraView.bounds;
CGRect overlayViewFrame = self.overlay.frame;
y = overlayViewFrame.origin.y / cameraViewBounds.size.height;
x = overlayViewFrame.origin.x / cameraViewBounds.size.width;
height = overlayViewFrame.size.height / cameraViewBounds.size.height;
width = overlayViewFrame.size.width / cameraViewBounds.size.width;
self.cameraView.scanCrop = CGRectMake(x, y, width, height);
NSLog(@"\n\nScan Crop:\n%@", NSStringFromCGRect(self.cameraView.scanCrop));
正如您在屏幕截图中看到的那样,蓝色框是scanCrop rect,我想要做的是让蓝色框与橙色框匹配。在计算scanCrop的标准化值时,是否需要考虑图像的分辨率或图像大小?
我无法弄清楚spadix在sourceforge的评论中解释了什么: “因此,假设您的样本矩形表示纵向的屏幕点并使用默认的640x480相机分辨率,您的scanCrop矩形将是{75 / w,38/320。,128 / w,244/320。},其中w = 480 /(320 * 640。)是屏幕点中图像的主要尺寸。“和这里: “假设您的坐标是指纵向方向的点,使用默认摄像机图像大小,位于默认位置并考虑到摄像机图像旋转: scanCrop = CGRectMake(50/426。,1-(20 + 250)/ 320。,150/426。,250/320。)“
他使用我假设与图像大小有关的值426和320但是在他的一条评论中他提到分辨率是640x480。如何计算图像大小以计算scanCrop的正确矩形?