2010-08-08 10 views
11

Gibt es eine Möglichkeit, Low-Level-Still-Kamera-Einstellungen wie Verschlusszeit, Blende oder ISO in iOS4 auf dem iPhone 4 manuell zu setzen? Ich glaube nicht, dass es im offiziellen SDK existiert, aber vielleicht hat jemand private APIs gefunden, um dies zu ermöglichen?iPhone iOS4 Low-Level-Kamerasteuerung?

Ich finde meine iPhone 4 Kamera unbrauchbar, weil sie selbst bei einigermaßen ordentlicher Beleuchtung immer darauf beharrt, mit der langsamsten 1/15 Sekunde Verschlusszeit zu fotografieren, was Bewegungsunschärfe verursacht, wenn sich das Motiv überhaupt bewegt.

Danke!

+0

Sie diese 6 mit privaten APIs in iOS tun, zumindest. http://stackoverflow.com/a/12939981/83853 –

+0

Sie können dies mit privaten APIs in iOS 6 zumindest tun. Hoffentlich werden sie in der nächsten Veröffentlichung veröffentlicht werden. Überprüfen Sie meine ausführliche Antwort hier: http://www.stackoverflow.com/a/12939981/83853 –

+0

Gute Frage. Es sieht so aus, als wäre AVCaptureDevice das Beste, was Sie tun können, und ich glaube nicht, dass es Zugriff auf alle Einstellungen bietet, die Sie kontrollieren wollen. Trotzdem könnte es ein guter Anfang sein. http://developer.apple.com/iphone/library/documentation/AVFoundation/Reference/AVCaptureDevice_Class/Reference/Reference.html#//apple_ref/doc/c_ref/AVCaptureDevice –

Antwort

1

Nicht direkt. Bitte reichen Sie einen Fehlerbericht ein.

Ja, möglicherweise sind private APIs verfügbar, aber das ist nur von begrenztem Nutzen.

+0

Einen Fehlerbericht auf einem alten Betriebssystem mit zwei Versionen ablegen scheint sinnlos, vor allem, wenn es wirklich eine Feature-Anfrage ist. –

+1

Es ist immer noch relevant, da iOS 6 dies nicht als öffentliche API bereitstellt. –

+0

Aber nicht relevant für die genaue Frage, wie es steht. Ich schätze die Frage kann einfach iOS 4 angeben, weil es 2 Jahre alt ist. Vielleicht sollte die Frage bearbeitet werden, um auf irgendeine iOS-Version zu verweisen, die mit dem iPhone 4 kompatibel ist? –

-2

die Sie interessieren, könnte ich Ihnen nützlich sein:

@interface MyViewController() 

@property (nonatomic, retain) IBOutlet UIImageView *imageView; 

@property (nonatomic, retain) IBOutlet UIToolbar *myToolbar; 

@property (nonatomic, retain) OverlayViewController *overlayViewController; 

@property (nonatomic, retain) NSMutableArray *capturedImages; 

// toolbar buttons 

- (IBAction)photoLibraryAction:(id)sender; 

- (IBAction)cameraAction:(id)sender; 


@end 


@implementation MyViewController 
- (void)viewDidLoad 

{ 

    self.overlayViewController = 

     [[[OverlayViewController alloc] initWithNibName:@"OverlayViewController" bundle:nil] autorelease]; 



    // as a delegate we will be notified when pictures are taken and when to dismiss the image picker 

    self.overlayViewController.delegate = self; 

    self.capturedImages = [NSMutableArray array]; 


    if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) 
    { 

     // camera is not on this device, don't show the camera button 

     NSMutableArray *toolbarItems = [NSMutableArray arrayWithCapacity:self.myToolbar.items.count]; 

     [toolbarItems addObjectsFromArray:self.myToolbar.items]; 

     [toolbarItems removeObjectAtIndex:2]; 

     [self.myToolbar setItems:toolbarItems animated:NO]; 

    } 

} 


- (void)viewDidUnload 
{ 

    self.imageView = nil; 

    self.myToolbar = nil; 



    self.overlayViewController = nil; 

    self.capturedImages = nil; 

} 


- (void)dealloc 
{ 

    [_imageView release]; 

    [_myToolbar release]; 



    [_overlayViewController release]; 

    [_capturedImages release]; 



    [super dealloc]; 

} 


- (void)showImagePicker:(UIImagePickerControllerSourceType)sourceType 
{ 

    if (self.imageView.isAnimating) 

     [self.imageView stopAnimating]; 



    if (self.capturedImages.count > 0) 

     [self.capturedImages removeAllObjects]; 



    if ([UIImagePickerController isSourceTypeAvailable:sourceType]) 
    { 

     [self.overlayViewController setupImagePicker:sourceType]; 

     [self presentModalViewController:self.overlayViewController.imagePickerController animated:YES]; 

    } 

} 



- (IBAction)photoLibraryAction:(id)sender 
{ 

    [self showImagePicker:UIImagePickerControllerSourceTypePhotoLibrary]; 

} 



- (IBAction)cameraAction:(id)sender 
{ 

    [self showImagePicker:UIImagePickerControllerSourceTypeCamera]; 

} 


// as a delegate we are being told a picture was taken 

- (void)didTakePicture:(UIImage *)picture 
{ 

    [self.capturedImages addObject:picture]; 

} 


// as a delegate we are told to finished with the camera 

- (void)didFinishWithCamera 
{ 

    [self dismissModalViewControllerAnimated:YES]; 


    if ([self.capturedImages count] > 0) 
    { 

     if ([self.capturedImages count] == 1) 
     { 

      // we took a single shot 

      [self.imageView setImage:[self.capturedImages objectAtIndex:0]]; 

     } 

     else 

     { 

      // we took multiple shots, use the list of images for animation 

      self.imageView.animationImages = self.capturedImages; 



      if (self.capturedImages.count > 0) 

       // we are done with the image list until next time 

       [self.capturedImages removeAllObjects]; 



      self.imageView.animationDuration = 5.0; // show each captured photo for 5 seconds 

      self.imageView.animationRepeatCount = 0; // animate forever (show all photos) 

      [self.imageView startAnimating]; 

     } 

    } 

} 



@end 
+0

Bearbeiten Sie Ihre Antwort und formatieren Sie den Code, um ihn lesbar zu machen. – kleopatra

+0

Das Poster fragt nach einem Low-Level-Zugriff auf die Kamera. Ihr Beispiel bietet zwar Zugriff auf die Kamera, ist aber sicher nicht Low-Level. Ich denke nicht, dass das hilfreich für ihn ist. – s1m0n

+0

@ s1m0n: - Ich habe versucht, ihm zu helfen, aber ich erwähnte auch, dass "es hilfreich sein kann". Ich habe versucht, ihm nach meinem Niveau am besten zu helfen ... – anshika

Verwandte Themen