2010-12-18 4 views
8

In iPhone App, Können wir Bilder bei einigen perticular Zeitintervallen programmatisch von iphone Gerätekamera mit?Wie programmgesteuert in der iPhone App mit der Gerätekamera aufnehmen?

Wenn ja, lassen Sie mich bitte wissen, wie wir Bilder programmatisch in iPhone App nehmen können?

Bitte helfen und vorschlagen.

Danke,

+0

gleiche Frage hier. Ich war immer interessiert an einigen Fotografie-Apps, die in der Lage sind, dies zu tun. –

Antwort

8

UIImagePickerController hat eine takePicture Methode, die programmatisch aufgerufen werden kann.

+0

durch Aufruf von takePicture Mathod kann ich neue Standbilder mit Hilfe von iPhone-Gerät Kamera oder ich kann nur Zugriff auf die Bildbibliothek und fatch Bild von diesem – ios

+0

@Perak takePicture soll verwendet werden, um "neue Standbilder mithilfe der Gerätekamera aufzunehmen". Stellen Sie sicher, dass Sie die SourceType-Eigenschaft Ihres UIImagePickerController auf UIImagePickerControllerSourceTypeCamera festlegen, wenn Sie nur die Bilderbibliothek abrufen. Das gibt Ihnen die Kamera-Schnittstelle. –

+0

@Prerak: Ich denke du kannst es, ich benutze eine kostenlose App namens TimerCamera in meinem iPhone und es kann kontinuierlich Bilder machen. –

0

Sie können verwenden UIImagePickerController hat eine TakePicture-Methode, um ein Bild zu machen.

Für mehr Kontrolle über das Bild können Sie AVFoundation-Header verwenden, die Avcapturestillimageoutput-Methode enthält, um Bilder zu erfassen. More Info

0

Import dieser Datei in .h:

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

put in .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; 
} 
Verwandte Themen