2

我有一个应用程序可以从 AVCaptureDevice 样本缓冲区委托中找到 QR finder 标记。现在我正在尝试在屏幕上放置框以覆盖 QR 标记。但是,我无法在 1280x720 像素分辨率和 cameraView 大小之间进行转换。

我正在尝试编写一个基于这些参数转换 CGRect 的方法(以及视图坐标系颠倒的事实),但它不起作用。它也可能与相机设备的方向有关。这是我的转换方法代码:

-(CGRect) convertRect:(CGRect) oldRect From90DegreeRotatedCameraSize1280x720ToUIViewSize:(CGSize) viewSize
{
//remember that we are using a gravity of resize aspect fill

double xScale = viewSize.width / 720;
double yScale = viewSize.height / 1280;

if (xScale < yScale)
    return CGRectMake(oldRect.origin.x * xScale, viewSize.height - oldRect.origin.y * xScale, oldRect.size.height * xScale, oldRect.size.width * xScale);
else
    return CGRectMake(oldRect.origin.x * yScale, viewSize.height - oldRect.origin.y * yScale, oldRect.size.height * yScale, oldRect.size.width * yScale);
}

有人能优雅地解决这个相对简单的空间坐标问题吗?

编辑 -

我做了一个连接视频方向的 NSLog,结果它永远不会从 1 改变(我认为它被枚举为纵向方向。)从这里,应该更容易找到解决方案,因为坐标不会改变不同的方向。

任何想法,编码器社区?

4

1 回答 1

0

弄清楚了:

当 iOS 填充一个视图时,它会居中,这样两边就被切断了。为了在视图坐标之间转换,您需要缩放并在被切断的方向上平移:

            return CGRectMake(oldRect.origin.x * xScale, oldRect.origin.y * xScale - (1280 * xScale - viewSize.height) / 2, oldRect.size.height * xScale, oldRect.size.width * yScale);
于 2013-03-30T06:17:44.760 回答