2013-10-17 5 views

답변

7

직접 프로그래밍 이미지를 캡처 전에를 카메라 해상도를 얻을 아마 할 수있는 방법이 없습니다.

애플은 다양한 장치와 사전 설정을위한 테이블을 제공

:

여기 Capturing Still Images

+0

이것은 매우 슬픈 일입니다! 좋아, iOS8은 8MP 장치에서만 지원됩니다. 하지만 여전히 하드 코딩 된 값을 의미합니다. 그리고 다음 장치가 더 높은 카메라 해상도를 가지고 있다면, 앱은 새로운 하드 코딩 된 값으로 즉석 업데이트가 필요합니다 : ( – ecth

+0

@ecth 입력과 출력을 추가하기 전이라도 캡처가 시작되기 전에 프로그래밍 방식으로'activeFormat'의 해상도를 얻을 수 있습니다. – Crashalot

87

는이 장치에 대한 모든 테스트 카메라 sessionPreset`s의 테이블을 지원하는 아이폰 OS 9

+-----------------------+--------------+---------------------------------+---------------+ 
|  Device   | Camera |  AVCaptureSessionPreset  | Resolution | 
+-----------------------+--------------+---------------------------------+---------------+ 
| iPhone 4S    | FRONT  |         |    | 
|      |    | AVCaptureSessionPresetPhoto  | 640x480  | 
|      |    | AVCaptureSessionPresetHigh  | 640x480  | 
|      |    | AVCaptureSessionPresetMedium | 480x360  | 
|      |    | AVCaptureSessionPresetLow  | 192x144  | 
|      |    | AVCaptureSessionPreset640x480 | 640x480  | 
|      |    | AVCaptureSessionPreset1280x720 | not supported | 
|      |    | AVCaptureSessionPreset1920x1080 | not supported | 
|      | BACK   |         |    | 
|      |    | AVCaptureSessionPresetPhoto  | 3264x2448  | 
|      |    | AVCaptureSessionPresetHigh  | 1920x1080  | 
|      |    | AVCaptureSessionPresetMedium | 480x360  | 
|      |    | AVCaptureSessionPresetLow  | 192x144  | 
|      |    | AVCaptureSessionPreset640x480 | 640x480  | 
|      |    | AVCaptureSessionPreset1280x720 | 1280x720  | 
|      |    | AVCaptureSessionPreset1920x1080 | 1920x1080  | 
+-----------------------+--------------+---------------------------------+---------------+ 
| iPhone 5/5C/5S/6/6+ |    |         |    | 
|      | FRONT  |         |    | 
|      |    | AVCaptureSessionPresetPhoto  | 1280x960  | 
|      |    | AVCaptureSessionPresetHigh  | 1280x720  | 
|      |    | AVCaptureSessionPresetMedium | 480x360  | 
|      |    | AVCaptureSessionPresetLow  | 192x144  | 
|      |    | AVCaptureSessionPreset640x480 | 640x480  | 
|      |    | AVCaptureSessionPreset1280x720 | 1280x720  | 
|      |    | AVCaptureSessionPreset1920x1080 | not supported | 
|      | BACK   |         |    | 
|      |    | AVCaptureSessionPresetPhoto  | 3264x2448  | 
|      |    | AVCaptureSessionPresetHigh  | 1920x1080  | 
|      |    | AVCaptureSessionPresetMedium | 480x360  | 
|      |    | AVCaptureSessionPresetLow  | 192x144  | 
|      |    | AVCaptureSessionPreset640x480 | 640x480  | 
|      |    | AVCaptureSessionPreset1280x720 | 1280x720  | 
|      |    | AVCaptureSessionPreset1920x1080 | 1920x1080  | 
+-----------------------+--------------+---------------------------------+---------------+ 
| iPhone 6S/6S   |    |         |    | 
|      | FRONT camera |         |    | 
|      |    | AVCaptureSessionPresetPhoto  | 1280x960  | 
|      |    | AVCaptureSessionPresetHigh  | 1280x720  | 
|      |    | AVCaptureSessionPresetMedium | 480x360  | 
|      |    | AVCaptureSessionPresetLow  | 192x144  | 
|      |    | AVCaptureSessionPreset640x480 | 640x480  | 
|      |    | AVCaptureSessionPreset1280x720 | 1280x720  | 
|      |    | AVCaptureSessionPreset1920x1080 | not supported | 
|      | BACK camera |         |    | 
|      |    | AVCaptureSessionPresetPhoto  | 4032x3024  | 
|      |    | AVCaptureSessionPresetHigh  | 1920x1080  | 
|      |    | AVCaptureSessionPresetMedium | 480x360  | 
|      |    | AVCaptureSessionPresetLow  | 192x144  | 
|      |    | AVCaptureSessionPreset640x480 | 640x480  | 
|      |    | AVCaptureSessionPreset1280x720 | 1280x720  | 
|      |    | AVCaptureSessionPreset1920x1080 | 1920x1080  | 
+-----------------------+--------------+---------------------------------+---------------+ 
| iPad 2    |    |         |    | 
|      | FRONT  |         |    | 
|      |    | AVCaptureSessionPresetPhoto  | 640x480  | 
|      |    | AVCaptureSessionPresetHigh  | 640x480  | 
|      |    | AVCaptureSessionPresetMedium | 480x360  | 
|      |    | AVCaptureSessionPresetLow  | 192x144  | 
|      |    | AVCaptureSessionPreset640x480 | 640x480  | 
|      |    | AVCaptureSessionPreset1280x720 | not supported | 
|      |    | AVCaptureSessionPreset1920x1080 | not supported | 
|      | BACK   |         |    | 
|      |    | AVCaptureSessionPresetPhoto  | 960x720  | 
|      |    | AVCaptureSessionPresetHigh  | 1280x720  | 
|      |    | AVCaptureSessionPresetMedium | 480x360  | 
|      |    | AVCaptureSessionPresetLow  | 192x144  | 
|      |    | AVCaptureSessionPreset640x480 | 640x480  | 
|      |    | AVCaptureSessionPreset1280x720 | 1280x720  | 
|      |    | AVCaptureSessionPreset1920x1080 | not supported | 
+-----------------------+--------------+---------------------------------+---------------+ 
| iPad 3    |    |         |    | 
|      | FRONT  |         |    | 
|      |    | AVCaptureSessionPresetPhoto  | 640x480  | 
|      |    | AVCaptureSessionPresetHigh  | 640x480  | 
|      |    | AVCaptureSessionPresetMedium | 480x360  | 
|      |    | AVCaptureSessionPresetLow  | 192x144  | 
|      |    | AVCaptureSessionPreset640x480 | 640x480  | 
|      |    | AVCaptureSessionPreset1280x720 | not supported | 
|      |    | AVCaptureSessionPreset1920x1080 | not supported | 
|      | BACK   |         |    | 
|      |    | AVCaptureSessionPresetPhoto  | 2592x1936  | 
|      |    | AVCaptureSessionPresetHigh  | 1920x1080  | 
|      |    | AVCaptureSessionPresetMedium | 480x360  | 
|      |    | AVCaptureSessionPresetLow  | 192x144  | 
|      |    | AVCaptureSessionPreset640x480 | 640x480  | 
|      |    | AVCaptureSessionPreset1280x720 | 1280x720  | 
|      |    | AVCaptureSessionPreset1920x1080 | 1920x1080  | 
+-----------------------+--------------+---------------------------------+---------------+ 
| iPad 4/Air   |    |         |    | 
| iPad Mini 1/2/3  |    |         |    | 
| iPod 5G    |    |         |    | 
|      | FRONT  |         |    | 
|      |    | AVCaptureSessionPresetPhoto  | 1280x960  | 
|      |    | AVCaptureSessionPresetHigh  | 1280x720  | 
|      |    | AVCaptureSessionPresetMedium | 480x360  | 
|      |    | AVCaptureSessionPresetLow  | 192x144  | 
|      |    | AVCaptureSessionPreset640x480 | 640x480  | 
|      |    | AVCaptureSessionPreset1280x720 | 1280x720  | 
|      |    | AVCaptureSessionPreset1920x1080 | not supported | 
|      | BACK   |         |    | 
|      |    | AVCaptureSessionPresetPhoto  | 2592x1936  | 
|      |    | AVCaptureSessionPresetHigh  | 1920x1080  | 
|      |    | AVCaptureSessionPresetMedium | 480x360  | 
|      |    | AVCaptureSessionPresetLow  | 192x144  | 
|      |    | AVCaptureSessionPreset640x480 | 640x480  | 
|      |    | AVCaptureSessionPreset1280x720 | 1280x720  | 
|      |    | AVCaptureSessionPreset1920x1080 | 1920x1080  | 
+-----------------------+--------------+---------------------------------+---------------+ 
| iPad Air 2   |    |         |    | 
| iPad Mini 4   |    |         |    | 
| iPad Pro    |    |         |    | 
|      | FRONT  |         |    | 
|      |    | AVCaptureSessionPresetPhoto  | 1280x960  | 
|      |    | AVCaptureSessionPresetHigh  | 1280x720  | 
|      |    | AVCaptureSessionPresetMedium | 480x360  | 
|      |    | AVCaptureSessionPresetLow  | 192x144  | 
|      |    | AVCaptureSessionPreset640x480 | 640x480  | 
|      |    | AVCaptureSessionPreset1280x720 | 1280x720  | 
|      |    | AVCaptureSessionPreset1920x1080 | not supported | 
|      | BACK   |         |    | 
|      |    | AVCaptureSessionPresetPhoto  | 3264x2448  | 
|      |    | AVCaptureSessionPresetHigh  | 1920x1080  | 
|      |    | AVCaptureSessionPresetMedium | 480x360  | 
|      |    | AVCaptureSessionPresetLow  | 192x144  | 
|      |    | AVCaptureSessionPreset640x480 | 640x480  | 
|      |    | AVCaptureSessionPreset1280x720 | 1280x720  | 
|      |    | AVCaptureSessionPreset1920x1080 | 1920x1080  | 
+-----------------------+--------------+---------------------------------+---------------+ 
| iPod Touch 5   |    |         |    | 
|      | FRONT  |         |    | 
|      |    | AVCaptureSessionPresetPhoto  | 1280x960  | 
|      |    | AVCaptureSessionPresetHigh  | 1280x720  | 
|      |    | AVCaptureSessionPresetMedium | 480x360  | 
|      |    | AVCaptureSessionPresetLow  | 192x144  | 
|      |    | AVCaptureSessionPreset640x480 | 640x480  | 
|      |    | AVCaptureSessionPreset1280x720 | 1280x720  | 
|      |    | AVCaptureSessionPreset1920x1080 | not supported | 
|      | BACK   |         |    | 
|      |    | AVCaptureSessionPresetPhoto  | 2592x1936  | 
|      |    | AVCaptureSessionPresetHigh  | 1920x1080  | 
|      |    | AVCaptureSessionPresetMedium | 480x360  | 
|      |    | AVCaptureSessionPresetLow  | 192x144  | 
|      |    | AVCaptureSessionPreset640x480 | 640x480  | 
|      |    | AVCaptureSessionPreset1280x720 | 1280x720  | 
|      |    | AVCaptureSessionPreset1920x1080 | 1920x1080  | 
+-----------------------+--------------+---------------------------------+---------------+ 
| iPod Touch 6   |    |         |    | 
|      | FRONT  |         |    | 
|      |    | AVCaptureSessionPresetPhoto  | 1280x960  | 
|      |    | AVCaptureSessionPresetHigh  | 1280x720  | 
|      |    | AVCaptureSessionPresetMedium | 480x360  | 
|      |    | AVCaptureSessionPresetLow  | 192x144  | 
|      |    | AVCaptureSessionPreset640x480 | 640x480  | 
|      |    | AVCaptureSessionPreset1280x720 | 1280x720  | 
|      |    | AVCaptureSessionPreset1920x1080 | not supported | 
|      | BACK   |         |    | 
|      |    | AVCaptureSessionPresetPhoto  | 3264x2448  | 
|      |    | AVCaptureSessionPresetHigh  | 1920x1080  | 
|      |    | AVCaptureSessionPresetMedium | 480x360  | 
|      |    | AVCaptureSessionPresetLow  | 192x144  | 
|      |    | AVCaptureSessionPreset640x480 | 640x480  | 
|      |    | AVCaptureSessionPreset1280x720 | 1280x720  | 
|      |    | AVCaptureSessionPreset1920x1080 | 1920x1080  | 
+-----------------------+--------------+---------------------------------+---------------+ 

입니다 코드

+ (NSDictionary*) cameraResolutions { 
    NSString* deviceModel = [self deviceModel]; 

    // iPhone 4S 
    if ([deviceModel isEqualToString:@"iPhone4,1"]) { 

     NSString* lFrontCam = @"640x480,480x360,192x144"; 
     NSString* lBackCam = @"3264x2448,1920x1080,1280x720,640x480,480x360,192x144"; 
     NSDictionary* lCamResolutions = @{@"front":lFrontCam, 
              @"back":lBackCam}; 
     return lCamResolutions; 
    } 
    // iPhone 5/5C/5S/6/6+/iPod 6 
    else if ([deviceModel isEqualToString:@"iPhone5,1"] 
      || [deviceModel isEqualToString:@"iPhone5,2"] 
      || [deviceModel isEqualToString:@"iPhone5,3"] 
      || [deviceModel isEqualToString:@"iPhone5,4"] 
      || [deviceModel isEqualToString:@"iPhone6,1"] 
      || [deviceModel isEqualToString:@"iPhone6,2"] 
      || [deviceModel isEqualToString:@"iPhone7,1"] 
      || [deviceModel isEqualToString:@"iPhone7,2"] 
      || [deviceModel isEqualToString:@"iPod7,1"]) { 

     NSString* lFrontCam = @"1280x960,1280x720,640x480,480x360,192x144"; 
     NSString* lBackCam = @"3264x2448,1920x1080,1280x720,640x480,480x360,192x144"; 
     NSDictionary* lCamResolutions = @{@"front":lFrontCam, 
              @"back":lBackCam}; 
     return lCamResolutions; 
    } 
    // iPhone 6S/6S+ 
    else if ([deviceModel isEqualToString:@"iPhone8,1"] 
      || [deviceModel isEqualToString:@"iPhone8,2"]) { 
     NSString* lFrontCam = @"1280x960,1280x720,640x480,480x360,192x144"; 
     NSString* lBackCam = @"4032x3024,1920x1080,1280x720,640x480,480x360,192x144"; 
     NSDictionary* lCamResolutions = @{@"front":lFrontCam, 
              @"back":lBackCam}; 
     return lCamResolutions; 
    } 
    // iPad 2 
    else if ([deviceModel isEqualToString:@"iPad2,1"] 
      || [deviceModel isEqualToString:@"iPad2,2"] 
      || [deviceModel isEqualToString:@"iPad2,3"] 
      || [deviceModel isEqualToString:@"iPad2,4"]) { 


     NSString* lFrontCam = @"640x480,480x360,192x144"; 
     NSString* lBackCam = @"1280x720,960x720,480x360,192x144,640x480"; 
     NSDictionary* lCamResolutions = @{@"front":lFrontCam, 
              @"back":lBackCam}; 
     return lCamResolutions; 
    } 
    // iPad 3 
    else if ([deviceModel isEqualToString:@"iPad3,1"] 
      || [deviceModel isEqualToString:@"iPad3,2"] 
      || [deviceModel isEqualToString:@"iPad3,3"]) { 


     NSString* lFrontCam = @"640x480,480x360,192x144"; 
     NSString* lBackCam = @"2592x1936,1920x1080,1280x720,640x480,480x360,192x144"; 
     NSDictionary* lCamResolutions = @{@"front":lFrontCam, 
              @"back":lBackCam}; 
     return lCamResolutions; 
    } 
    // iPad 4/Air/Mini/Mini 2/Mini 3/iPod 5G 
    else if ([deviceModel isEqualToString:@"iPad3,4"] 
      || [deviceModel isEqualToString:@"iPad3,5"] 
      || [deviceModel isEqualToString:@"iPad3,6"] 
      || [deviceModel isEqualToString:@"iPad4,1"] 
      || [deviceModel isEqualToString:@"iPad4,2"] 
      || [deviceModel isEqualToString:@"iPad4,3"] 
      || [deviceModel isEqualToString:@"iPad4,4"] 
      || [deviceModel isEqualToString:@"iPad4,5"] 
      || [deviceModel isEqualToString:@"iPad4,6"] 
      || [deviceModel isEqualToString:@"iPad4,7"] 
      || [deviceModel isEqualToString:@"iPad4,8"] 
      || [deviceModel isEqualToString:@"iPod5,1"]) { 

     NSString* lFrontCam = @"1280x960,1280x720,640x480,480x360,192x144"; 
     NSString* lBackCam = @"2592x1936,1920x1080,1280x720,640x480,480x360,192x144"; 
     NSDictionary* lCamResolutions = @{@"front":lFrontCam, 
              @"back":lBackCam}; 
     return lCamResolutions; 
    } 
    // iPad Air 2/Mini 4/Pro 
    else if ([deviceModel isEqualToString:@"iPad5,3"] 
      || [deviceModel isEqualToString:@"iPad5,4"]) { 
     NSString* lFrontCam = @"1280x960,1280x720,640x480,480x360,192x144"; 
     NSString* lBackCam = @"3264x2448,1920x1080,1280x720,640x480,480x360,192x144"; 
     NSDictionary* lCamResolutions = @{@"front":lFrontCam, 
              @"back":lBackCam}; 
     return lCamResolutions; 
    } 
    return nil; 
} 
+6

노력에 감사드립니다.) – CouchDeveloper

+0

@RomanSlyepko You rock !!! – onmyway133

1

이 방법으로 수행 할 수 있습니다 캡처가 시작되기 전에

아래의 기능으로
/* Callback that is called when you activate the capture session. */ 
- (void) avCaptureInputPortFormatDescriptionDidChangeNotification:(NSNotification *)notification { 
     CMFormatDescriptionRef formatDescription = nil; 
     NSArray *ports = [deviceInput ports]; 
     AVCaptureInputPort *usePort = nil; 

     for (AVCaptureInputPort *port in ports) { 
       if (usePort == nil || [port.mediaType isEqualToString:AVMediaTypeVideo]) { 
         usePort = port; 
         break; 
       } 
     } 

     if (usePort != nil) 
       formatDescription = usePort.formatDescription; 
     if (formatDescription != nil) { 
       /*------------>>>>>>> THIS IS YOUR RESOLUTION */ 
       CMVideoDimensions dimensions = CMVideoFormatDescriptionGetDimensions(formatDescription); 
       self.frameSize = CGSizeMake(dimensions.width, dimensions.height); 
       [[NSNotificationCenter defaultCenter] removeObserver:self]; 
       NSLog(@"Capturing with %dx%d", (int)self.frameSize.width, (int)self.frameSize.height); 
     } else { 
       NSLog(@"Failed to detect resolution, using default one."); 
       self.frameSize = CGSizeMake(640.0f, 480.0f); 
     } 
} 

- (id) init { 
     if ((self = [super init])) { 
       /* Default framesize. */ 
       self.frameSize = CGSizeMake(640.0f, 480.0f); 

       AVCaptureSession *capSession = [[AVCaptureSession alloc] init]; 
       /* -------->>>>>>> REQUESTED RESOLUTION, CAN BE SOMTHING ELSE */ 
       [capSession setSessionPreset:AVCaptureSessionPresetHigh]; 

//    if (([modelName rangeOfString:@"iPhone 5"].length != 0) || ([modelName rangeOfString:@"iPhone 6"].length != 0)) { 
//      [capSession setSessionPreset:AVCaptureSessionPresetHigh]; 
//    } else { 
//      [capSession setSessionPreset:AVCaptureSessionPreset640x480]; 
//    } 
//     
       self.captureSession = capSession; 

       [[NSNotificationCenter defaultCenter] addObserver:self 
                 selector:@selector(avCaptureInputPortFormatDescriptionDidChangeNotification:) 
                  name:AVCaptureInputPortFormatDescriptionDidChangeNotification object:nil]; 
     } 
     return self; 
} 

- (void) dealloc 
{ 
     [[NSNotificationCenter defaultCenter] removeObserver:self]; 
     if (self.captureSession.isRunning) 
       [self.captureSession stopRunning]; 
     self.captureSession = nil; 
} 

- (void) addRawViewOutput 
{ 
    /* We setup the output */ 
    AVCaptureVideoDataOutput *captureOutput = [[AVCaptureVideoDataOutput alloc] init]; 

     /* While a frame is processes in -captureOutput:didOutputSampleBuffer:fromConnection: delegate methods 
      no other frames are added in the queue. 
     If you don't want this behaviour set the property to NO */ 
    captureOutput.alwaysDiscardsLateVideoFrames = YES; 

     /*We specify a minimum duration for each frame (play with this settings to avoid having too many frames waiting 
    in the queue because it can cause memory issues). It is similar to the inverse of the maximum framerate. 
    In this example we set a min frame duration of 1/10 seconds so a maximum framerate of 10fps. We say that 
    we are not able to process more than 10 frames per second.*/ 
    //captureOutput.minFrameDuration = CMTimeMake(1, 10); 

    /*We create a serial queue to handle the processing of our frames*/ 
    dispatch_queue_t queue; 
    queue = dispatch_queue_create("com.YourApp.cameraQueue", NULL); 
    [captureOutput setSampleBufferDelegate:self queue:queue]; 
// dispatch_release(queue); 

    // Set the video output to store frame in BGRA (It is supposed to be faster) 
    NSString *key = (NSString*)kCVPixelBufferPixelFormatTypeKey; 
    NSNumber *value = [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA]; 
    NSDictionary *videoSettings = [NSDictionary dictionaryWithObject:value forKey:key]; 
    [captureOutput setVideoSettings:videoSettings]; 

     // Register an output 
    [self.captureSession addOutput:captureOutput]; 
} 

- (bool) startWithDevicePosition:(AVCaptureDevicePosition)devicePosition 
{ 
     AVCaptureDevice *videoDevice = [self cameraWithPosition:devicePosition]; 

     if (!videoDevice) 
       return FALSE; 

     NSError *error; 

     AVCaptureDeviceInput *videoIn = [AVCaptureDeviceInput deviceInputWithDevice:videoDevice error:&error]; 
     self.deviceInput = videoIn; 

     if (!error) 
     { 
       if ([[self captureSession] canAddInput:videoIn]) 
       { 
         [[self captureSession] addInput:videoIn]; 
       } 
       else 
       { 
         NSLog(@"Couldn't add video input"); 
         return FALSE; 
       } 
     } 
     else 
     { 
       NSLog(@"Couldn't create video input"); 
       return FALSE; 
     } 

     [self addRawViewOutput]; 
     [self resume]; 
     return TRUE; 
} 

-(void) pause 
{ 
     self.paused = YES; 
     if (self.captureSession.isRunning) 
       [captureSession stopRunning]; 
} 

-(void) resume 
{ 
     if (!self.captureSession.isRunning) 
       [captureSession startRunning]; 
     self.paused = NO; 
} 

#pragma mark - 
#pragma mark AVCaptureSession delegate 
- (void)captureOutput:(AVCaptureOutput *)captureOutput 
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer 
     fromConnection:(AVCaptureConnection *)connection 
{ 
     CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); 

     /* Lock the image buffer */ 
     CVPixelBufferLockBaseAddress(imageBuffer,0); 

     /* Get information about the image */ 
     uint8_t *baseAddress = (uint8_t *)CVPixelBufferGetBaseAddress(imageBuffer); 
     size_t width = CVPixelBufferGetWidth(imageBuffer); 
     size_t height = CVPixelBufferGetHeight(imageBuffer); 
     size_t stride = CVPixelBufferGetBytesPerRow(imageBuffer); 
     size_t size = CVPixelBufferGetDataSize(imageBuffer); 

     BGRAVideoFrame frame = {(int)width, (int)height, (int)stride, (int)size, baseAddress}; 
     [delegate frameReady:frame]; 

     /* We unlock the image buffer */ 
     CVPixelBufferUnlockBaseAddress(imageBuffer,0); 
} 
8

는, 프로그래밍, activeFormat에서 해상도를 얻을 수 있습니다 아니지만 입력과 출력을 추가하기 전에 : https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVCaptureDevice_Class/index.html#//apple_ref/occ/instp/AVCaptureDevice/activeFormat

private func getCaptureResolution() -> CGSize { 
    // Define default resolution 
    var resolution = CGSize(width: 0, height: 0) 

    // Get cur video device 
    let curVideoDevice = useBackCamera ? backCameraDevice : frontCameraDevice 

    // Set if video portrait orientation 
    let portraitOrientation = orientation == .Portrait || orientation == .PortraitUpsideDown 

    // Get video dimensions 
    if let formatDescription = curVideoDevice?.activeFormat.formatDescription { 
     let dimensions = CMVideoFormatDescriptionGetDimensions(formatDescription) 
     resolution = CGSize(width: CGFloat(dimensions.width), height: CGFloat(dimensions.height)) 
     if (portraitOrientation) { 
      resolution = CGSize(width: resolution.height, height: resolution.width) 
     } 
    } 

    // Return resolution 
    return resolution 
} 
+0

그것은 훌륭합니다! – Zapko

+0

https://github.com/nateemma/FilterCam/blob/f3961a955b237441bb75403091776c1402eb08aa/FilterCam/Models/CameraManager.swift –

1

을 장치 카메라의 최대 이미지 해상도를 얻으려면이 코드를 사용해보십시오.

- (CMVideoDimensions) getCameraMaxStillImageResolution:(AVCaptureDevicePosition) cameraPosition { 

    CMVideoDimensions max_resolution; 
    max_resolution.width = 0; 
    max_resolution.height = 0; 

    AVCaptureDevice *captureDevice = nil; 

    NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; 
    for (AVCaptureDevice *device in devices) { 
     if ([device position] == cameraPosition) { 
      captureDevice = device; 
      break; 
     } 
    } 
    if (captureDevice == nil) { 
     return max_resolution; 
    } 

    NSArray* availFormats=captureDevice.formats; 

    for (AVCaptureDeviceFormat* format in availFormats) { 
     CMVideoDimensions resolution = format.highResolutionStillImageDimensions; 
     int w = resolution.width; 
     int h = resolution.height; 
     if ((w * h) > (max_resolution.width * max_resolution.height)) { 
      max_resolution.width = w; 
      max_resolution.height = h; 
     } 
    } 

    return max_resolution; 
} 

- (void) printCamerasInfo { 
    CMVideoDimensions res; 
    res = [self getCameraMaxStillImageResolution:AVCaptureDevicePositionBack]; 
    NSLog(@" Back Camera max Image resolution: %d x %d", res.width, res.height); 
    res = [self getCameraMaxStillImageResolution:AVCaptureDevicePositionFront]; 
    NSLog(@" Front Camera max Image resolution: %d x %d", res.width, res.height); 
} 
+0

[동일 답변] (http://stackoverflow.com/a/38907603)을 [multiple 질문] (http://stackoverflow.com/a/38907612). 하나의 좋은 대답을 올린 다음 다른 질문을 중복으로 닫으려면 vote/flag를 사용하십시오. 질문이 중복되지 않으면 * 질문에 대한 답변을 작성하십시오. * –

관련 문제