Wzywam metodę delegowania AVFoundation do obsługi przechwytywania zdjęć, ale mam trudności z konwersją AVCapturePhoto, które generuje w UIImage z prawidłową orientacją. Chociaż poniższa procedura kończy się sukcesem, zawsze otrzymuję zorientowaną na prawo UIImage (UIImage.imageOrientation = 3). Nie mogę zapewnić orientacji podczas korzystania z UIImage (data: image) i próba pierwszego użycia funkcji photo.cgImageRepresentation()? TakeRetainedValue() również nie pomaga. Proszę o pomoc.Jak wygenerować UIImage z AVCapturePhoto z prawidłową orientacją?
Orientacja obrazu ma tu kluczowe znaczenie, ponieważ wynikowy obraz jest przesyłany do przepływu pracy Vision Framework.
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
// capture image finished
print("Image captured.")
if let imageData = photo.fileDataRepresentation() {
if let uiImage = UIImage(data: imageData){
// do stuff to UIImage
}
}
}
UPDATE 1: Reading Apple Photo Capture Programming Guide (z datą iOS11), udało mi się znaleźć jedną rzecz robiłem źle:
- Na każde wezwanie wychwytu (self.capturePhotoOutput .capturePhoto) należy skonfigurować połączenie z obiektem PhotoOutput i zaktualizować jego orientację, aby dopasować orientację urządzenia w momencie robienia zdjęcia. W tym celu utworzyłem rozszerzenie UIDeviceOrientation i użyłem go w funkcji snapPhoto(), którą stworzyłem, aby wywołać procedurę przechwytywania i czekać na wykonanie metody delegowania didFinishProcessingPhoto. Dodałem migawkę kodów, ponieważ ograniczniki próbek kodu nie wydają się wyświetlać ich poprawnie.
Aktualizacja 2 Link do pełnego projektu na GitHub: https://github.com/agu3rra/Out-Loud
ciekawe, i ewentualnie [błąd w pliku] (http://bugreport.apple.com). Czy zdaje się ignorować orientację, jeśli zapisujesz te dane do pliku i używa inicjalizatora UIImage? – rickster
Po dodaniu wywołania połączenia w procedurze snapPhoto() (UPDATE 1), nie ignoruje ona już orientacji, ale zwraca mi nieprawidłowe wartości orientacji w tworzonej przeze mnie UIImage. –
Informacje o Twoim rozszerzeniu orientacji. Apple wydało aktualizację AVCam. Istnieje podobne rozszerzenie. 'extension UIDeviceOrientation { var videoOrientacja: AVCaptureVideoOrientation? { przełącznik siebie { przypadek .portrait: powrót .portrait przypadek .portraitUpsideDown: powrót .portraitUpsideDown case .landscapeLeft: powrót .landscapeRight case .landscapeRight: powrót .landscapeLeft default: powrót nil } } } ' –