Datos de imagen sin procesar de la cámara

He estado buscando en este foro de arriba a abajo, pero no pude encontrar lo que realmente necesito. Quiero obtener datos de imagen sin procesar de la cámara. Hasta ahora traté de sacar los datos de imageDataSampleBuffer de ese método captureStillImageAsynchronouslyFromConnection:completionHandler: y escribirlo en un NSData objeto, pero eso no funcionó. Tal vez estoy en el camino equivocado o tal vez solo lo estoy haciendo mal. Lo que no quiero es que la imagen se comprima de ninguna manera.

La forma fácil es usar jpegStillImageNSDataRepresentation: del AVCaptureStillImageOutput, pero como dije, no quiero que esté comprimido.

¡Gracias!

preguntado el 22 de mayo de 12 a las 09:05

remitir este Enlace. -

1 Respuestas

Así es como lo hago:

1: Primero abro la cámara usando:

- (void)openCamera
{
    imagePicker = [[UIImagePickerController alloc] init];
    imagePicker.delegate = self;

    if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
    {        
        imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
        imagePicker.mediaTypes = [NSArray arrayWithObjects:
                              (NSString *) kUTTypeImage,
                              (NSString *) kUTTypeMovie, nil];
        imagePicker.allowsEditing = NO;

        [self presentModalViewController:imagePicker animated:YES];
    }
    else {
        lblError.text = NSLocalizedStringFromTable(@"noCameraFound", @"Errors", @"");  
    }
}

Cuando se toma la foto, se llama a este método:

 -(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    // Save and get the path of the image
    NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
    if([mediaType isEqualToString:(NSString *)kUTTypeImage]) 
    {
        // Save the image
        image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
        [library writeImageToSavedPhotosAlbum:[image CGImage] orientation:(ALAssetOrientation)[image imageOrientation] completionBlock:^(NSURL *assetURL, NSError *error){
            if(!error) {
               //Save path and location to database
               NSString *pathLocation = [[NSString alloc] initWithFormat:@"%@", assetURL];
            } else {
                NSLog(@"CameraViewController: Error on saving image : %@ {imagePickerController}", error);
            }
        }];

    }
    [imagePicker dismissModalViewControllerAnimated:YES];
}

Luego, con esa ruta, obtengo la imagen de la biblioteca en resolución COMPLETA (usando el "1"):

 -(void)preparePicture: (NSString *) filePathPicture{
    ALAssetsLibraryAssetForURLResultBlock resultBlock = ^(ALAsset *myasset)
    {
        if(myasset != nil){
            ALAssetRepresentation *assetRep = [myasset defaultRepresentation];
            CGImageRef imageRef = [assetRep fullResolutionImage];
            if (imageRef) {
                NSData *imageData = UIImageJPEGRepresentation([UIImage imageWithCGImage:imageRef], 1);
            }
        }else {
            //error
        }
     };

    ALAssetsLibraryAccessFailureBlock failureBlock  = ^(NSError *error)
    {      
         NSString *errorString = [NSString stringWithFormat:@"can't get image, %@",[error localizedDescription]];
        NSLog(@"%@", errorString);
    };

     if(filePathPicture && [filePathPicture length])
     {
         NSURL *assetUrl = [NSURL URLWithString:filePathPicture];
         ALAssetsLibrary *assetslibrary = [[ALAssetsLibrary alloc] init];
        [assetslibrary assetForURL:assetUrl 
                   resultBlock:resultBlock
                  failureBlock:failureBlock];
    }
}

Espero que esto te ayude un poco más :-).

contestado el 22 de mayo de 12 a las 10:05

¿No hay compresión de UIImageJPEGRepresentation cuando estoy usando el valor 1? Eso sería realmente impresionante - thomketler

En mi opinión, no. 1 es el valor más alto y no dará como resultado una compresión. - Zillan

Si lee la documentación de Apple para 'UIImageJPEGRepresentation' El valor 0.0 representa la compresión máxima (o la calidad más baja), mientras que el valor 1.0 representa la compresión mínima (o la mejor calidad). . Sí, está comprimido. - Vinzzz

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.