Swift iOS, интересно, кто-нибудь может объяснить, почему вывод повернут в нужную степень?

Я перехожу по этой ссылке здесь. Как применить фильтр к видео в реальном времени, используя Swift, и по какой-либо причине UIImageOrientation поворачивается влево на 90 градусов. Я пытался исправить это, установив ориентацию на Вверх, но она все еще выглядит так же. У кого-нибудь есть идеи, почему это так? Я не уверен, что это изображение, предварительный просмотр или просмотр изображения, который вызывает это

Вот код:

import UIKit
import AVFoundation
import CoreMedia



     let noirFilter = CIFilter(name: "CIPhotoEffectNoir")!

     let sepiaFilter = CIFilter(name: "CISepiaTone")!

     let vignetteEffect = CIFilter(name: "CIVignetteEffect")!



     let Filters = [noirFilter,sepiaFilter,vignetteEffect]




    class TestViewController:UIViewController,AVCaptureVideoDataOutputSampleBufferDelegate {

        @IBOutlet weak var imageView: UIImageView!
        @IBOutlet weak var Photo: UIButton!
        var sessionQueue: dispatch_queue_t!
        var stillImageOutput: AVCaptureStillImageOutput?
        var videoDeviceInput: AVCaptureDeviceInput?

        var buttonTapped = false

        override func viewDidLoad() {
            super.viewDidLoad()




           sessionQueue = dispatch_queue_create("com.bradleymackey.Backchat.sessionQueue",DISPATCH_QUEUE_SERIAL)


            let captureSession = AVCaptureSession()
            captureSession.sessionPreset = AVCaptureSessionPresetPhoto

            let backCamera = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
            var videoDeviceInput: AVCaptureVideoDeviceInput?

            do
            {
                let input = try AVCaptureDeviceInput(device: backCamera)

                captureSession.addInput(input)
                 self.videoDeviceInput = videoDeviceInput
            }
            catch
            {
                print("can't access camera")
                return
            }



            // although we don't use this, it's required to get captureOutput invoked
            let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)







            view.layer.addSublayer(previewLayer)

             imageView.contentMode = UIViewContentMode.ScaleAspectFill

            let videoOutput = AVCaptureVideoDataOutput()

            videoOutput.setSampleBufferDelegate(self, queue: dispatch_queue_create("sample buffer delegate", DISPATCH_QUEUE_SERIAL))
            if captureSession.canAddOutput(videoOutput)
            {
                captureSession.addOutput(videoOutput)
            }




            captureSession.startRunning()

            let stillImageOutput: AVCaptureStillImageOutput = AVCaptureStillImageOutput()
            if captureSession.canAddOutput(stillImageOutput) {
                stillImageOutput.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG]
                captureSession.addOutput(stillImageOutput)

                self.stillImageOutput = stillImageOutput



        }
        }

        override func viewWillLayoutSubviews() {




        }




        func captureOutput(captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!)
        {
             let filter = Filters[1]



            let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)
            let cameraImage = CIImage(CVPixelBuffer: pixelBuffer!)

            filter.setValue(cameraImage, forKey: kCIInputImageKey)

            let filteredImage = UIImage(CIImage: filter.valueForKey(kCIOutputImageKey) as! CIImage!)

            var newImage = UIImage(CIImage: filter.valueForKey(kCIOutputImageKey) as! CIImage!, scale:1.0, orientation: .Up)

            dispatch_async(dispatch_get_main_queue())
            {
                self.imageView.image = newImage
            }

        }

        @IBAction func snapStill(sender: UIButton) {
            print("snapStillImage")



            let previewController = PreviewViewController(nibName: "PreviewViewController", bundle: nil)
                        previewController.media = Media.Photo(image: imageView.image!)
                        previewController.isFrontCamera = false 

                        self.presentViewController(previewController, animated: true, completion: nil)

        }


        override func viewDidLayoutSubviews()
        {




        }


        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    }

0 ответов

Причина этого заключается в том, что ориентация не установлена. Вам нужно установить ориентацию в captureOutput()

func captureOutput(captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!) 
{
connection.videoOrientation = .portrait
...

Это должно решить вашу проблему.

Другие вопросы по тегам