我有一个应用程序,可以从AVCaptureDevice样本缓冲区委托中找到QR查找器标记。现在我试图在屏幕上放置框以覆盖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改变(我认为它是纵向的纵向)。从这里,它应该更容易找到解决方案因为坐标不会在不同的方向上发生变化。
任何想法,编码社区?
答案 0 :(得分: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);