Jak zrobić zdjęcie automatycznie przy ustawianiu ostrości w iPhone SDK?

Tworzę aplikację, w której użytkownik robi zdjęcie obrazu z tekstem i przesyła na serwer. używałemAVCaptureSession aby otworzyć kamerę i umieścić przycisk paska, który przechwytuje najnowszą ramkę i przesyła ją na serwer. W tej aplikacji użytkownik może wysyłać wiele obrazów na serwer, klikając przycisk paska.

Zastanawiałem się, czy możliwe, że użytkownik nie musi naciskać przycisku, aby przechwycić ramkę. Czy to możliwe, że bieżąca ramka jest przechwytywana automatycznie z automatyczną regulacją ostrości? Podobnie jak użytkownik umieszcza aparat na sekundę na obrazie, a gdy obraz jest dobrze zogniskowany, jest automatycznie przechwytywany, dzięki czemu użytkownik może przejść do następnego obrazu bez konieczności naciskania jakiegokolwiek przycisku?

Mój kod do przechwytywania ramki jest następujący:

- (void)initCapture {

    AVCaptureDeviceInput *captureInput = [AVCaptureDeviceInput 
                                          deviceInputWithDevice:[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo] 
                                          error:nil];

    AVCaptureVideoDataOutput *captureOutput = [[AVCaptureVideoDataOutput alloc] init];

    captureOutput.alwaysDiscardsLateVideoFrames = YES; 







    /*We create a serial queue to handle the processing of our frames*/
    dispatch_queue_t queue;
    queue = dispatch_queue_create("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]; 
    /*And we create a capture session*/
    captureSession = [[AVCaptureSession alloc] init];
    /*We add input and output*/
    [captureSession addInput:captureInput];
    [captureSession addOutput:captureOutput];





    AVCaptureConnection *conn = [captureOutput connectionWithMediaType:AVMediaTypeVideo];

    if (conn.supportsVideoMinFrameDuration)
        conn.videoMinFrameDuration = CMTimeMake(5,1);
    if (conn.supportsVideoMaxFrameDuration)
        conn.videoMaxFrameDuration = CMTimeMake(5,1);





    [captureSession setSessionPreset:AVCaptureSessionPresetPhoto];

    customLayer = [CALayer layer];
    customLayer.frame = self.view.bounds;
    customLayer.transform = CATransform3DRotate(CATransform3DIdentity, M_PI/2.0f, 0, 0, 1);
    customLayer.contentsGravity = kCAGravityResizeAspectFill;
    //[self.view.layer addSublayer:customLayer];
    /*We add the imageView*/



    imageView = [[UIImageView alloc] init];
    imageView.frame = CGRectMake(0, 0, 100, 100);
    //imageView.frame = self.view.bounds;
    [self.view addSubview:imageView];



    [captureSession startRunning];

}

Będę wdzięczny za twoją pomoc. Dzięki.

questionAnswers(1)

yourAnswerToTheQuestion