При использовании avfoundation – отображает видимую часть захваченного изображения, представленного на уровне дисплея

Я использую библиотеку PBJVision для захвата изображений.

Под капотом используется AVFoundation.

Я установил камеру для использования следующих параметров

PBJVision *camera = [[PBJVision alloc] init]; self.camera = camera; self.camera.delegate = self; [self.camera setCameraMode:PBJCameraModePhoto]; [self.camera setCameraDevice:PBJCameraDeviceFront]; [self.camera setCameraOrientation:PBJCameraOrientationPortrait]; [self.camera setFocusMode:PBJFocusModeAutoFocus]; [self.camera setPresentationFrame:self.previewView.frame]; [self.camera previewLayer].frame = self.previewView.bounds; [self.camera previewLayer].videoGravity = AVLayerVideoGravityResizeAspectFill; [self.previewView.layer addSublayer:[self.camera previewLayer]]; 

потому что гравитация уровня предварительного просмотра задается как AVLayerVideoGravityResizeAspectFill захваченное изображение не идентично предварительно просмотренному изображению.

Как я могу обрезать его в соответствии с гравитацией видео?

One Solution collect form web for “При использовании avfoundation – отображает видимую часть захваченного изображения, представленного на уровне дисплея”

Основываясь на превосходной Поваренной книге Эрика Садун, добавление кода ниже в ваш контроллер просмотра позволит вам сделать
UIImage *newImage = [self.applyAspectFillImage: image InRect: self.previewView.bounds];

Максимальный размер изображения можно получить с помощью меньшего края (ширины или высоты) исходного фотоизображения для размера прямоугольника назначения.

 CGFloat scaleW = image.size.width / previewView.bounds.size.width; CGRect destRect = CGRectMake(0, 0, image.size.width, preview.bounds.size.height * scaleW); UIImage *newImage = [self.applyAspectFillImage: image InRect: destRect]; 

Код:

 CGRect CGRectCenteredInRect(CGRect rect, CGRect mainRect) { CGFloat xOffset = CGRectGetMidX(mainRect)-CGRectGetMidX(rect); CGFloat yOffset = CGRectGetMidY(mainRect)-CGRectGetMidY(rect); return CGRectOffset(rect, xOffset, yOffset); } // Calculate the destination scale for filling CGFloat CGAspectScaleFill(CGSize sourceSize, CGRect destRect) { CGSize destSize = destRect.size; CGFloat scaleW = destSize.width / sourceSize.width; CGFloat scaleH = destSize.height / sourceSize.height; return MAX(scaleW, scaleH); } CGRect CGRectAspectFillRect(CGSize sourceSize, CGRect destRect) { CGSize destSize = destRect.size; CGFloat destScale = CGAspectScaleFill(sourceSize, destRect); CGFloat newWidth = sourceSize.width * destScale; CGFloat newHeight = sourceSize.height * destScale; CGFloat dWidth = ((destSize.width - newWidth) / 2.0f); CGFloat dHeight = ((destSize.height - newHeight) / 2.0f); CGRect rect = CGRectMake (dWidth, dHeight, newWidth, newHeight); return rect; } - (UIImage *) applyAspectFillImage: (UIImage *) image InRect: (CGRect) bounds { CGRect destRect; UIGraphicsBeginImageContext(bounds.size); CGRect rect = CGRectAspectFillRect(image.size, bounds); destRect = CGRectCenteredInRect(rect, bounds); [image drawInRect: destRect]; UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return newImage; } 
  • `` возвращает NO с перерывами. Могу ли я узнать, почему?
  • Захват текущего изображения камеры с помощью AVFoundation
  • Экранная запись с использованием AvCaptureSession
  • проблема при фотосъемке со вспышкой При использовании AVCapturePhotoOutput
  • В AVFoundation, как синхронизировать запись и воспроизведение
  • Как обрезать обнаруженный прямоугольник в изображении с помощью CIDetector и Swift
  • Как я могу сделать снимок с помощью AVCaptureSession
  • AVCaptureMovieFileOutput NSInvalidArgumentException отсутствие активных / активных соединений
  • Изменение AVCaptureDeviceInput приводит к AVAssetWriterStatusFailed
  • Получать уведомления, когда пользователь делает выбор для разрешения доступа к Camera in iOS
  • Возьмите владение памятью из CVImageBufferRef
  • Interesting Posts

    Включение действий 3D-касания для неподдерживаемых устройств с длинным нажатием

    Невозможно загрузить файл XIV UIViewController в раскадровке в Swift

    Уведомления iOS Push с помощью NodeJS – учетные данные

    Строковое шифрование в RubyMotion

    Как проверить, что IOS In-App покупает квитанции навалом?

    Импорт документа с UIDocumentPickerViewController предупреждает, что «файл-плагин был недействителен»

    Не использовать методы делегата TabBar

    iOS MDM – Как закрыть или остановить соединение после того, как устройство вернется с действительным ответом

    Как загрузить UIImage на S3 с помощью AWS iOS SDK v2

    Не удалось реализовать CitrusPay SDK для iOS в быстром приложении

    Регулярные / регулярные ограничения размера для всех iPad, включая iPad?

    Настройка высоты панели навигации iOS 11

    Мое приложение iPhone архивируется как «Архив приложений Mac», а не «архив приложений для iOS»,

    Как программно «нравится» страница Facebook в приложении iOS?

    iPhone: что такое использование Airplay SDK?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.