Как определить IOS Ориентация устройства при использовании камеры - PullRequest
0 голосов
/ 20 января 2020

Итак - у меня есть приложение, делающее снимок с помощью AVCaptureSession. У меня есть фото AVCapturePhoto - в итоге я хочу получить uiImage в правильной ориентации, что кажется удивительно трудным сделать. В портретной ориентации в настоящее время я делаю следующее, чтобы исправить ориентацию:

    UIImage toImage( AVCapturePhoto photo )
    {
        return new UIImage(photo.CGImageRepresentation, 1, UIImageOrientation.Right);
    }

, которая прекрасно работает, однако я не могу найти способ определить, находится ли телефон в горизонтальном положении. Предположим, например, что у вас есть привязка ориентации к портрету - все, что я запрашиваю, например, камера, текущая ориентация устройства - общая статусная ориентация приложения UIApplication или что-то еще - возвращает портрет - но ясно, что изображение фактически превращается в пейзажное изображение. Я посмотрел на другие ответы, которые говорят, что использовать «UIdevce.current.orientation» - но это всегда оказывается «неизвестным» для меня.

в любом случае есть знание ориентации камера, независимо от блокировки ориентации, или иным образом с UIImage, который всегда имеет правильную ориентацию - ie соответствует реальному миру?

1 Ответ

0 голосов
/ 21 января 2020

хорошо - так что я нашел хакерский способ сделать это - чтение акселерометра - кажется, это работает:

UIAccelerometer.SharedAccelerometer.Acceleration += SharedAccelerometer_Acceleration;

...


private void SharedAccelerometer_Acceleration(object sender, UIAccelerometerEventArgs e)
{
    var roundedX = Math.Round(e.Acceleration.X);
    var roundedY = Math.Round(e.Acceleration.Y);
    UIImageOrientation orientation;
    if (Math.Abs(roundedX) < Math.Abs(roundedY))
        orientation = (roundedY == -1) ? UIImageOrientation.Right : UIImageOrientation.Left;
    else
        orientation = (roundedX == -1) ? UIImageOrientation.Down : UIImageOrientation.Up ;
    _currentOrientation = orientation;
}

...

return new UIImage(photo.CGImageRepresentation, 1, _currentOrientation);

Однако это не может быть "правильным" способом - меня действительно удивляет, что это сложно - кажется, что 100% времени люди хотят, чтобы все, что выходит из камеры, соответствовало тому, что есть в реальном мире? Все равно любил бы кого-нибудь сказать мне правильный способ сделать это!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...