Предустановка различных сессий камеры для ввода и вывода - PullRequest
0 голосов
/ 21 сентября 2018

Я создаю пользовательский вид камеры и пытаюсь увидеть, есть ли способ задать другой предустановленный сеанс для ввода и вывода.Я хочу показывать пользователю высокое разрешение, но снимать с низким разрешением

var captureSession: AVCaptureSession!
var stillImageOutput: AVCapturePhotoOutput!
var videoPreviewLayer: AVCaptureVideoPreviewLayer!
@interface CameraViewController ()
@property (nonatomic) AVCaptureSession *session;
@property (nonatomic) AVCapturePhotoOutput *stillImageOutput;
@property (nonatomic) AVCaptureVideoPreviewLayer *videoPreviewLayer;
@end

captureSession = AVCaptureSession()
captureSession.sessionPreset = .high // <--show high resolution but capture at low

stillImageOutput = AVCapturePhotoOutput()

if captureSession.canAddInput(input) && 
captureSession.canAddOutput(stillImageOutput) {
    captureSession.addInput(input)
    captureSession.addOutput(stillImageOutput)
    setupLivePreview()
}

func setupLivePreview() {

    videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession)

    videoPreviewLayer.videoGravity = .resizeAspect
    videoPreviewLayer.connection?.videoOrientation = .portrait
    previewView.layer.addSublayer(videoPreviewLayer)
}

1 Ответ

0 голосов
/ 21 сентября 2018

Может быть, вы можете изменить размер захваченного изображения в два раза.Сначала уменьшите размер изображения, затем увеличьте его до того же размера.Разрешение уменьшится.

Пример функции;

func resizeImage(image: UIImage, targetSize: CGSize) -> UIImage {
    let size = image.size

    let widthRatio  = targetSize.width  / size.width
    let heightRatio = targetSize.height / size.height

    // Figure out what our orientation is, and use that to form the rectangle
    var newSize: CGSize
    if(widthRatio > heightRatio) {
        newSize = CGSize(width: size.width * heightRatio, height: size.height * heightRatio)
    } else {
        newSize = CGSize(width: size.width * widthRatio,  height: size.height * widthRatio)
    }

    // This is the rect that we've calculated out and this is what is actually used below
    let rect = CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height)

    // Actually do the resizing to the rect using the ImageContext stuff
    UIGraphicsBeginImageContextWithOptions(newSize, false, 1.0)
    image.draw(in: rect)
    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return newImage!
}
...