Como tirar uma foto automaticamente em foco no iPhone SDK?
Estou criando um aplicativo no qual o usuário tira a foto de uma imagem com texto e faz o upload para o servidor. Eu tenho usadoAVCaptureSession
para abrir a câmera e colocar um botão de barra que captura o último quadro e o envia para o servidor. Neste aplicativo, o usuário pode enviar várias imagens para o servidor, um por um, clicando no botão da barra.
Eu queria saber se era possível que o usuário não precisasse pressionar o botão para capturar um quadro. É possível que o quadro atual seja capturado automaticamente com o foco automático? Como o usuário apenas coloca a câmera por um segundo na imagem e quando a imagem está bem focada, ela é automaticamente capturada para que o usuário possa passar para a próxima imagem sem ter que pressionar nenhum botão?
Meu código para capturar o quadro é o seguinte:
- (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];
}
Eu serei grato por sua ajuda. Obrigado.