Datos de imagen sin procesar de la cámara
Frecuentes
Visto 3,338 veces
4
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!
1 Respuestas
5
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 iphone objective-c ios image camera or haz tu propia pregunta.
remitir este Enlace. - Paresh Navadiya