代码之家  ›  专栏  ›  技术社区  ›  Fogmeister

将cgpoint从uiview转换为avcapturevideopreviewlayer

  •  1
  • Fogmeister  · 技术社区  · 15 年前

    我正在尝试在我的iPhone应用程序中实现tap to focus和tap to exposure。

    我正在使用AvFoundation相机接口,在两个协同作战系统之间移动时遇到问题。

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

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

    我看过avcamdemo,但它似乎没有做任何转换,一分钟你有uiview坐标,下一分钟你有av坐标。

    感谢您的帮助!

    谢谢

    奥利弗

    2 回复  |  直到 11 年前
        1
  •  2
  •   Fogmeister    15 年前

    好吧,我知道发生了什么事。我正在家里写应用程序,所以白天无法更新:(

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

    关注点的坐标系是(0,0)到(1,1)(在横向-右模式中从左上到右下)。

    为了使tap聚焦,需要将avCaptureVideoPreviewLayer嵌入到uiView的子类中。(我假设视图显示在整个屏幕上)。

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

    获取tap cgpoint(例如tappoint)。

    然后使用…

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

    可能有一些代码可以为您做这件事,但在那之前,这就足够了。

        2
  •  0
  •   FlySoFast    11 年前

    我知道这是一个古老的问题,但是在avcamdemo中有一个函数可以进行转换 videoGravity 案例(您的代码仅在 视频重力 videoPreviewLayer AVLayerVideoGravityResize )