2

iPadのフロントカメラから写真をキャプチャするアプリを開発しています。写真は非常に暗くなります。誰かがこの問題を解決する方法についてアイデアを持っていますか?

ここに私のコードといくつかの説明があります:

1) キャプチャ セッションを初期化します

-(void)viewDidAppear:(BOOL)animated{

    captureSession = [[AVCaptureSession alloc] init];
    NSArray *devices = [AVCaptureDevice devices];
    AVCaptureDevice *frontCamera;
    for (AVCaptureDevice *device in devices){
        if ([device position] == AVCaptureDevicePositionFront) {
            frontCamera = device;
        }
    }

    if ([frontCamera isExposureModeSupported:AVCaptureExposureModeContinuousAutoExposure]){
        NSError *error=nil;
        if ([frontCamera lockForConfiguration:&error]){
            frontCamera.exposureMode = AVCaptureExposureModeContinuousAutoExposure;
            frontCamera.focusMode=AVCaptureFocusModeAutoFocus;
            [frontCamera unlockForConfiguration];
        }
    }

    NSError *error = nil;
    AVCaptureDeviceInput *frontFacingCameraDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:frontCamera error:&error];
    [captureSession addInput:frontFacingCameraDeviceInput];
    [captureSession setSessionPreset:AVCaptureSessionPresetHigh];
    captureVideoOutput = [[AVCaptureVideoDataOutput alloc] init];
    captureImageOutput =[[AVCaptureStillImageOutput alloc] init];
    [captureSession addOutput:captureVideoOutput];
    [captureSession addOutput:captureImageOutput];

}

2) ユーザーが録画ボタンを押すと、タイマーが開始され、カメラのコンテンツがプレビュー レイヤーにプレビューされます。

- (IBAction)but_record:(UIButton *)sender {

    MainInt = 4;
    timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(countup) userInfo:nil repeats:YES];
    previewLayer = [[AVCaptureVideoPreviewLayer alloc]initWithSession:captureSession];
    previewLayer.connection.videoOrientation = AVCaptureVideoOrientationPortrait;
    CGRect rect = CGRectMake(0, 0, self.aView.bounds.size.width, self.aView.bounds.size.height);
    previewLayer.frame = rect;
    [self.aView.layer addSublayer:previewLayer];
    [captureSession startRunning];

}

3) タイマーが終了すると、写真が撮影されて保存されます

- (void)countup {
    MainInt -=1;
    if (MainInt == 0)  {      
        [timer invalidate];
        timer = nil;

        [captureSession stopRunning];
        AVCaptureConnection *videoConnection = nil;
        for (AVCaptureConnection *connection in captureImageOutput.connections)
        {
            for (AVCaptureInputPort *port in [connection inputPorts])
            {
                if ([[port mediaType] isEqual:AVMediaTypeVideo] )
                {
                    videoConnection = connection;
                    break;
                }
            }
            if (videoConnection) { break; }
        }

        [captureImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler: ^(CMSampleBufferRef imageSampleBuffer, NSError *error)
        {
            CFDictionaryRef exifAttachments = CMGetAttachment( imageSampleBuffer, kCGImagePropertyExifDictionary, NULL);
            NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer];
            stillImage = [[UIImage alloc] initWithData:imageData];
        }];

        [captureSession startRunning];
        [captureSession stopRunning];
    }  
}

4) 最後に、ユーザーが保存ボタンを押すと、画像が特定のアルバムに記録されます

- (IBAction)but_save:(UIButton *)sender {
    UIImage *img = stillImage;
    [self.library saveImage:img toAlbum:@"mySpecificAlbum" withCompletionBlock:^(NSError *error)];  
}

実際、すべてのコードは適切に機能しますが、結果の画像は非常に暗いです...

4

2 に答える 2