2010-08-08 7 views
11

¿Hay alguna forma de establecer manualmente la configuración de la cámara fija de bajo nivel, como la velocidad de obturación, la apertura o ISO en iOS4 en el iPhone 4? No creo que exista en el SDK oficial, pero tal vez alguien haya encontrado algunas API privadas para permitir esto.iPhone iOS4 control de cámara de bajo nivel?

Encuentro mi cámara iPhone 4 inutilizable porque incluso con una iluminación bastante decente, siempre insiste en disparar a la velocidad de obturación más lenta de 1/15 de segundo, causando desenfoque de movimiento si el sujeto se está moviendo en absoluto.

Gracias!

+0

Usted puede hacer esto con APIs privadas en IOS 6, al menos. http://stackoverflow.com/a/12939981/83853 –

+0

Puede hacer esto con API privadas en iOS 6, al menos. Esperemos que se hagan públicos en el próximo lanzamiento. Vea mi respuesta detallada aquí: http://www.stackoverflow.com/a/12939981/83853 –

+0

Buena pregunta. Parece que AVCaptureDevice podría ser lo mejor que puede hacer, y no creo que proporcione acceso a todas las configuraciones que desea controlar. Dicho eso, podría ser un buen lugar para comenzar. http://developer.apple.com/iphone/library/documentation/AVFoundation/Reference/AVCaptureDevice_Class/Reference/Reference.html#//apple_ref/doc/c_ref/AVCaptureDevice –

Respuesta

1

No directamente. Por favor presente un informe de error.

Sí, puede haber API privadas disponibles, pero eso es de uso limitado.

+0

Presentación de un informe de error en un sistema operativo de dos versiones anterior parece inútil, especialmente cuando se trata de una solicitud de función. –

+1

Sigue siendo relevante, ya que iOS 6 no proporciona esto como API pública. –

+0

Pero no es relevante para la pregunta exacta tal como está. Agradezco que la pregunta simplemente especifique iOS 4 porque tiene 2 años. Tal vez la pregunta debe ser editada para hacer referencia a cualquier versión de iOS compatible con el iPhone 4? –

-2

Prueba esto, podría ser útil para Usted:

@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

Por favor, edite su respuesta y formatee el código para que sea legible. – kleopatra

+0

El póster pregunta por el acceso de bajo nivel a la cámara ... De hecho, su ejemplo proporciona acceso a la cámara, pero ciertamente no es de bajo nivel. No creo que esto sea útil para él. – s1m0n

+0

@ s1m0n: - Traté de ayudarlo, pero también mencioné que "puede ser útil". intenté ayudarlo de acuerdo con mi mejor nivel ... – anshika

Cuestiones relacionadas