Сохраните то, что пользователь видит в AVCaptureVideoPreviewLayer

Я пытаюсь разработать приложение с пользовательской камерой, где пользователь может добавлять фильтры или наклейки (как в приложении TextCamera) и делиться в социальной ленте.
Но я нашел свою первую проблему.

Я показываю предварительный просмотр пользователю с помощью AVCaptureVideoPreviewLayer, беру фотографию и передаю ее другому контроллеру вида в UiImageView, но второй снимок больше первого.

Я попытался изменить размер изображения с помощью этой функции:

    func resize(image: UIImage) -> UIImage {
       let size = image.size
       let newWidth = CGFloat(size.width)
       let newHeight = CGFloat(size.height - blackBottomTab.bounds.size.height)

       let newSize = CGSizeMake(newWidth,newHeight)
       let rect = CGRectMake(0, 0, newSize.width, newSize.height)

       UIGraphicsBeginImageContextWithOptions(newSize, false, 1.0)
       image.drawInRect(rect)
       let newImage = UIGraphicsGetImageFromCurrentImageContext()
       UIGraphicsEndImageContext()

       return newImage
}

В этой функции я вычитаю высоту черного вида (под кнопкой) из высоты изображения. Но результат у меня другой (см. прилагаемую фотографию).

Это мой предварительный просмотр с черным видом под кнопкой

Это фотография, сделанная больше, чем предварительный просмотр

Я также попытался использовать Aspect Fit в виде раскадровки изображения второго контроллера вида, но результат тот же.

Где моя ошибка? Спасибо всем, кто мне помогает!

1 ответ

  1. Я думаю, что AVCaptureVideoPreviewLayerрамка такая же, как рамка экрана (UIScreen.mainScreen().bounds), и вы добавили «Shoot Photo» черный вид поверх него. Вместо этого следует изменить кадрAVCaptureVideoPreviewLayer.

    Ваш случай (что я думаю):

    Введите описание изображения здесь

    Предполагая, что зеленый прямоугольник является AVCaptureVideoPreviewLayerрамкой, а красный-черной рамкой вида. Таким образом, он покрывает (сверху) зеленый прямоугольник.

    Сделайте их похожими на это:

    Введите описание изображения здесь

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