将CGPoint从UIView转换为AVCaptureVideoPreviewLayer

时间:2010-09-10 07:46:05

标签: iphone avfoundation coordinate-systems

我正试图在我的iPhone应用程序中实现点按以对焦并点按曝光。

我正在使用AVFoundation相机界面,我在2个协同系统之间移动时遇到了麻烦。

UIView使用的系统从左上角(0,0)(纵向模式)到右下角(320,480)。

然而,AVCaptureSession使用的系统从右上角的(0,0)到左下角的(1,1)。

我已经看过AVCamDemo,但它似乎没有做任何事情来转换这些,一分钟你有UIView坐标,下一个你有AV坐标。

感谢任何帮助!

由于

奥利弗

2 个答案:

答案 0 :(得分:2)

好的,我弄清楚发生了什么。我正在家里写这个应用程序虽然因此无法在白天更新:(

无论如何,触摸的坐标系统是从(0,0)到(320,480)(在纵向模式下从左上到右下)。

感兴趣的焦点的坐标系是(0,0)到(1,1)(在横向右侧模式中从左上到右下)。

为了让焦点集中,你需要一个嵌入到UIView子类中的AVCaptureVideoPreviewLayer。 (我假设在整个屏幕上显示视图)。

要从水龙头到焦点,请执行以下操作。

获取点击CGPoint(例如tapPoint)。

然后使用......

CGPoint focalPoint = CGPointMake(tapPoint.y/480, (320 - tapPoint.x)/320);

可能会有一些代码为您执行此操作,但在此之前就足够了。

答案 1 :(得分:0)

我知道这是一个老问题,但AVCamDemo中有一个函数可以在所有videoGravity个案例中进行转换(只有当videoGravity的{​​{1}}为{时,您的代码才有效{1}})