Необработанные данные изображения с камеры
Я искал этот форум вверх и вниз, но я не мог найти то, что мне действительно нужно. Я хочу получить необработанные данные изображения с камеры. До сих пор я пытался получить данные из imageDataSampleBuffer из этого метода captureStillImageAsynchronouslyFromConnection:completionHandler:
и написать это NSData
объект, но это не сработало. Может быть, я не на том пути или, может быть, я делаю это неправильно. Я не хочу, чтобы изображение было сжато каким-либо образом.
Самый простой способ - использовать jpegStillImageNSDataRepresentation:
от AVCaptureStillImageOutput
, но, как я уже сказал, я не хочу, чтобы это было сжато.
Спасибо!
1 ответ
Вот как я это делаю:
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];
}
}
Надеюсь, это поможет вам немного дальше:-).