来自相机的原始图像数据
我一直在搜索这个论坛,但我找不到我真正需要的东西。 我想从相机获取原始图像数据。 到目前为止,我试图从该方法中获取captureStillImageAsynchronouslyFromConnection:completionHandler:
的数据captureStillImageAsynchronouslyFromConnection:completionHandler:
并将其写入NSData
对象,但这不起作用。 也许我走错了轨道或者说我做错了。 我不想要的是以任何方式压缩图像。
简单的方法是使用jpegStillImageNSDataRepresentation:
来自AVCaptureStillImageOutput
,但就像我说的,我不希望它被压缩。
谢谢!
我就是这样做的:
1:我首先使用以下方式打开相机:
- (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", @""); } }
拍摄照片时,会调用此方法:
-(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]; }
然后使用该路径,我以完全分辨率从库中获取图片(使用“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]; } }
希望这会对你有所帮助:-)。