如何在具有叠加层的自定义大小的ZBarReaderView上使用scanCrop属性

时间:2014-06-07 00:18:53

标签: ios objective-c zbar

我在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的正确矩形?

0 个答案:

没有答案