2010-12-18 14 views
8

iPhone App, podemos tomar imágenes en algunos intervalos de tiempo perticular programación mediante el uso de la cámara del dispositivo iPhone ?Cómo tomar imágenes mediante programación en la aplicación iphone con la cámara del dispositivo? En

En caso afirmativo, hágame saber cómo podemos tomar imágenes programáticamente en la aplicación iPhone.

Por favor ayuda y sugerir.

Gracias,

+0

misma pregunta aquí. Siempre he estado interesado en algunas aplicaciones de fotografía que son capaces de hacer esto .. –

Respuesta

8

UIImagePickerController tiene un método takePicture que se puede llamar mediante programación.

+0

llamando a tomPicture mathod ¿Puedo tomar nuevas imágenes fijas mediante el uso de una cámara de dispositivo iphone o solo puedo acceder a la biblioteca de imágenes y tomar foto de ese – ios

+0

@Prerak , takePicture está destinado a "tomar nuevas imágenes fijas utilizando la cámara del dispositivo". Si solo obtiene la biblioteca de imágenes, asegúrese de establecer la propiedad sourceType de su UIImagePickerController en UIImagePickerControllerSourceTypeCamera. Eso te dará la interfaz de la cámara. –

+0

@Prerak: Creo que puedes hacerlo, estoy usando una aplicación gratuita llamada TimerCamera en mi iPhone y puede tomar fotos continuamente. –

0

Puede usar UIImageMickerController tiene un método de toma de imágenes para tomar una fotografía.

Para obtener más control sobre la imagen, puede usar el encabezado AVFoundation que contiene el método avcapturestillimageoutput para capturar imágenes. More Info

0

importar este archivo en .h:

AVFoundation/AVCaptureInput.h 
AVFoundation/AVCaptureDevice.h 
AVFoundation/AVCaptureOutput.h 
AVFoundation/AVMediaFormat.h  

puesto en .m:

- (AVCaptureDevice *)frontCamera 
{ 
    NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; 
    for (AVCaptureDevice *device in devices) 
    { 
     if ([device position] == AVCaptureDevicePositionFront) 
     { 
      return device; 
     } 
    } 
    return nil; 
} 

- (void)captureOutput:(AVCaptureOutput *)captureOutput 
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer 
     fromConnection:(AVCaptureConnection *)connection 
{ 
    CGImageRef cgImage = [self imageFromSampleBuffer:sampleBuffer]; 
    self.theImage = [UIImage imageWithCGImage: cgImage ]; 
    CGImageRelease(cgImage); 

    NSCalendar *sysCalendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 
    NSDateFormatter *df = [[NSDateFormatter alloc]init]; 
    df.calendar = sysCalendar; 
    [df setDateFormat:@"dd_MM_yyyy hh:mm:ss"]; 
    StrCapture = [NSString stringWithFormat:@"%@.jpeg",[df stringFromDate:[NSDate date]]]; 
    NSLog(@"StrCapture : %@",StrCapture); 

    NSData *imageData = UIImageJPEGRepresentation(self.theImage,1); 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 

    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:StrCapture]; 
    [fileManager createFileAtPath:fullPath contents:imageData attributes:nil]; 

    NSLog(@"ImagePAth : %@",fullPath); 
} 

- (CGImageRef) imageFromSampleBuffer:(CMSampleBufferRef) sampleBuffer 
{ 
    CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); 
    CVPixelBufferLockBaseAddress(imageBuffer,0); 
    uint8_t baseAddress = (uint8_t)CVPixelBufferGetBaseAddressOfPlane(imageBuffer, 0); 
    size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer); 
    size_t width = CVPixelBufferGetWidth(imageBuffer); 
    size_t height = CVPixelBufferGetHeight(imageBuffer); 
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 

    CGContextRef newContext = CGBitmapContextCreate(baseAddress, width, height, 8, bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst); 
    CGImageRef newImage = CGBitmapContextCreateImage(newContext); 
    CGContextRelease(newContext); 

    CGColorSpaceRelease(colorSpace); 
    CVPixelBufferUnlockBaseAddress(imageBuffer,0); 

    return newImage; 
} 
Cuestiones relacionadas