Перевести CGPoint из UIView в AVCaptureVideoPreviewLayer - PullRequest
1 голос
/ 10 сентября 2010

Я пытаюсь реализовать касание для фокусировки и касание экспозиции в своем приложении для iPhone.

Я использую интерфейс камеры AVFoundation и у меня возникают проблемы при перемещении между двумя системами координат.

UIView использует систему, которая переходит от (0,0) в левом верхнем углу (в портретном режиме) к (320,480) в правом нижнем углу.

Однако AVCaptureSession использует систему, которая работаетот (0,0) в верхнем правом углу до (1,1) в нижнем левом.

Я посмотрел на AVCamDemo, но, похоже, ничего не сделал для их преобразования, одинВ ту минуту, когда у вас есть координаты UIView, а затем у вас есть AV-координаты.

Любая помощь приветствуется!

Спасибо

Оливер

Ответы [ 2 ]

2 голосов
/ 10 сентября 2010

ОК, я понял, что происходит.Я пишу приложение дома, хотя и не могу обновлять его в течение дня: (

В любом случае, система координат для касания от (0,0) до (320,480) (сверху вниз, слева направо)в портретном режиме).

Система координат для интересующей точки фокусировки составляет от (0,0) до (1,1) (слева направо и снизу вправо в режиме альбомной ориентации вправо).

Чтобы сфокусировать кран, вам понадобится AVCaptureVideoPreviewLayer, встроенный в подкласс UIView. (Я предполагаю, что представление отображается по всему экрану).

Чтобы получить из кранаДля фокусировки выполните следующие действия.

Получите сигнал CGPoint (например, tapPoint).

Затем используйте ...

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

Возможно, есть немного кодаэто делает это для вас, но до этого этого будет достаточно.

0 голосов
/ 31 октября 2014

Я знаю, что это старый вопрос, но в AVCamDemo была функция для преобразования во всех videoGravity случаях (ваш код работает, только если videoGravity из videoPreviewLayer равно AVLayerVideoGravityResize)

...