У меня есть время кошмара, пытаясь исправить фотографию, сделанную с AVFoundation
captureStillImageAsynchronouslyFromConnection
, чтобы размер и ориентация точно отображались на экране.AVFoundation размер и поворот фото
Я показываю AVCaptureVideoPreviewLayer
с этим кодом, чтобы убедиться, что он отображает правильный путь на всех поворотах:
previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:self.captureSession];
[previewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
previewLayer.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height);
if ([[previewLayer connection] isVideoOrientationSupported])
{
[[previewLayer connection] setVideoOrientation:(AVCaptureVideoOrientation)[UIApplication sharedApplication].statusBarOrientation];
}
[self.view.layer insertSublayer:previewLayer atIndex:0];
Теперь, когда у меня есть возвращенное изображение он нуждается в обрезке это гораздо больше, чем то, что отображалось. Я знаю, что есть примеры UIImage
обрезки, но первое препятствие, которое у меня похоже, это найти правильный CGRect
. Когда я просто обрезаю до self.view.frame
, изображение обрезается в неправильном месте.
Предварительный просмотр использует AVLayerVideoGravityResizeAspectFill
и у меня есть мой UIImageView
также установлен AspectFill
Так как я могу получить правильный кадр, который AVFoundation
отображает на экране из предварительного просмотра слоя?
EDIT ----
Вот пример проблемы я столкнулся. Используя переднюю камеру iPad Mini, камера использует разрешение 720x1280, но дисплей имеет размер 768x0124. В представлении отображается это (см облицовочных рельс в верхней части изображения:
Тогда, когда я беру изображение и отобразить его, это выглядит следующим образом:
Очевидно изображение камеры было сосредоточено в представлении, но обрезанное изображение взято из верхней (ни одной видимой) части фотографии.
Ричард, я просто потратил 2 дня, пытаясь решить эту же проблему, снимая фото с слой предварительного просмотра, который занимает верхние 50% экрана, а затем обрезает точную часть изображения, которая была видна в предварительном просмотре. Пройдя каждую нить обрезки на SO, ваша единственная, которая работает отлично. СПАСИБО. – user3117509
Одна вещь, хотя по какой-то причине мои «cropRect.origin.y» и «cropRect.origin.x» продолжают получать 0 значений, но что странно, если я их NSLog они печатают со значением 714, поэтому мне пришлось вручную введите этот номер в окончательный CGRectMake. Помимо этого, ваш код работает отлично. – user3117509
Прохладный! Рад был помочь. Этот фрагмент кода был тем, что я написал «на лету», чтобы продемонстрировать технику, поэтому я не удивлен, если у вас есть какие-то сумасшедшие результаты. Рад, что тебе удалось обойти его! –