Неправильная ориентация изображения после вызова displayTransform - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь получить изображение из текущего ARFrame, используя:

if let imageBuffer = sceneView.session.currentFrame?.capturedImage {
    let orientation = UIApplication.shared.statusBarOrientation
    let viewportSize = sceneView.bounds.size
    let transformation = sceneView.session.currentFrame?.displayTransform(for: orientation, viewportSize: viewportSize)

    let ciImage = CIImage(cvPixelBuffer: imageBuffer).transformed(by: transformation)
}    



Для пейзажа это прекрасно работает.Для портрета я получаю изображение под неправильным углом (повернуто на 180).Есть идеи почему?

Вывод:

output

Ожидаемый:

expected

1 Ответ

0 голосов
/ 27 февраля 2019

Сначала я должен сказать, что это определенно неприятная ошибка .

Проблема заключается в том, что при преобразовании изображения Portrait в ARFrame, чтобы CIImage или CGImage, он теряет свою ориентацию и поворачивает его на 180 градусов против часовой стрелки.Эта проблема касается только Portrait изображений.На Landscape это никак не влияет.

Это происходит потому, что Portrait изображение не имеет информации о его ориентации на этапе преобразования, и, таким образом, изображение в портретном режиме остается в портретном режиме, даже если онопреобразован в CIImage или CGImage.

Чтобы это исправить, вы должны сравнить "стандартный" пейзаж width / height с "нестандартным" портретом width / height, и, если эти значения отличаются, поверните изображение на 180 градусов по часовой стрелке (или примените ориентационный регистр .portraitUpsideDown ).

Надеюсь, что этопомогает.

...