代码之家  ›  专栏  ›  技术社区  ›  olha

AVCaptureSessionPreset:如果最大预设值为1088x1920,为什么标准iPhone相机可以节省2448×3264?

  •  1
  • olha  · 技术社区  · 8 年前

    我正在编写使用相机的小型iOS应用程序。我使用 AVFoundation 框架API,并考虑 AVCaptureSessionPreset 。在我的具体设备上,这些是:
    CaptureQualityPhoto = (640 852)
    CaptureQualityHigh = (1088 1920)
    CaptureQualityMedium = (368 480)
    CaptureQuality1280x720 = (720 1280)
    CaptureQuality640x480 = (480 640)
    CaptureQualityiFrame960x540 = (540 960)

    标准相机应用程序保存具有分辨率的照片 2448 × 3264 .
    假设我想以相同的分辨率保存照片,但我能达到的最高质量是 1088 x 1920 .
    当然,我可以调整大小 UIImage ,但这是最好的方法吗?
    标准应用程序是否可以访问更高的分辨率,或者只使用一些缩放和插值?

    编辑 : 现在,我的2248x3264照片预设工作代码如下:

    -(void) initCapturingDevice
    {
        [self releaseCapturingDevice];
    
        self.capture_session = [[AVCaptureSession alloc] init];
        [self.capture_session beginConfiguration];
    
        self.video_data_output = [[AVCaptureVideoDataOutput alloc] init];
        self.video_data_output.videoSettings = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:kCVPixelFormatType_32BGRA] forKey:(id)kCVPixelBufferPixelFormatTypeKey];
        [self.video_data_output setSampleBufferDelegate:self queue:dispatch_get_main_queue()];
        [self.capture_session addOutput:self.video_data_output];
    
        self.capture_session.sessionPreset = AVCaptureSessionPresetPhoto; 
        // some code here ...  
    }
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   Gordon Childs    8 年前

    您可以使用 AVCaptureSessionPresetPhoto AVCaptureStillImageOutput :

    let captureDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
    let input = try! AVCaptureDeviceInput(device: captureDevice)
    
    captureSession.addInput(input)
    captureSession.sessionPreset = AVCaptureSessionPresetPhoto
    
    let stillImageOutput = AVCaptureStillImageOutput()
    captureSession.addOutput(stillImageOutput)
    
    captureSession.startRunning()
    
    let connection = stillImageOutput.connectionWithMediaType(AVMediaTypeVideo)
    stillImageOutput.captureStillImageAsynchronouslyFromConnection(connection) { (sampleBuffer, error) in
        print("maximum quality photo: \(sampleBuffer)\n")
    }