gpt4 book ai didi

uiimagepickercontroller - iOS5中的UIImagePicker和ALAAssetRepresentation问题

转载 作者:行者123 更新时间:2023-12-02 05:09:51 27 4
gpt4 key购买 nike

我注意到 UIImagePicker 为相机胶卷返回的 NSDictionary 似乎不再返回 UIImagePickerControllerOriginalImage 对象。相反,我得到了一个 UIImageControllerReferenceURL,要求我使用 ALAAssetLibrary 的 assetForURL 通过一个漫长而复杂的过程来创建一个 UIImage。

网络上有足够多的例子,都非常相似,我已经实现了,但是在创建 ALARepresentation 对象后,调用它的任何方法都会导致 EXC_BAD_ACCESS 异常,所以我无法检索图像。有谁知道找回“原始图片”而不是“引用网址”的方法,或者这种行为是否已被默默弃用?

注意:我在 iOS 5 下工作(因为我喜欢内存管理)和 Xcode 4.2 的 Storyboard功能。回到早期版本似乎是不可能的。代码如下所示:

// in the header
#import <AssetsLibrary/AssetsLibtrary.h>

typedef void (^ALAAssetsLibraryAssetForURLReferenceBlock)(ALAAsset *asset);
typedef void (^AlAAssetsLibraryAccessForFailureBlock)(NSError *error);


// in the implementation
-(void) ImagePickerController:(UIImagePickerController*)picker
didFinishPickingMediaWithInfo:(NSDictionary*)info
{
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
if (mediaType isEqualToString:(NSString*)kUTTypeImage]) {
NSURL *url = [info objectForKey:UIImagePickerControllerReferenceURL];
if (url) {
ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *asset) {
ALAssetRepresentation *rep = [asset defaultRepresentation];
CGImageRef iref = [rep fullResolutionImage];
if (iref) {
UIImage *image = [UIImage imageWithCGImage:iref];
[self displayImage:image];
}
};
ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *error) {
// handle error
};

ALAssetsLibrary *assetsLib = [[ALAssetLibrary alloc]init];
[assetsLib assetForURL:url resultBlock:resultblock failureBlock:failureblock];
}
}
}

EXC_BAD_ACCESS 发生在试图创建 CGImageRef 的那一行。我试过其他 *rep 方法(包括元数据);这些也会抛出异常。唯一“有效”的是从 Assets 中获取缩略图 CGImageRef,但我需要全分辨率图像。

最后,即使有效,异步性质(使用回调 block )也不是我真正想要的,因为在我的案例中它使选择器过程变得复杂到无休止。有没有其他方法可以从相机胶卷中选择图像?

最佳答案

我前段时间在网上的某个地方发现了这个,它适用于 ios5,并且与你想做的一样,希望它能帮助你

   -(void)readExifDataFromSelectedImage:(NSURL *)imageRefURL    
{
void (^ALAssetsLibraryAssetForURLResultBlock)(ALAsset *) = ^(ALAsset *asset)
{

};

ALAssetsLibrary *myAssetLib;
NSLog(@"%@",imageRefURL);
[myAssetLib assetForURL:imageRefURL
resultBlock:ALAssetsLibraryAssetForURLResultBlock
failureBlock:^(NSError *error){NSLog(@"test:Fail");}];
}




- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
self.referenceURL = [info valueForKey:@"UIImagePickerControllerReferenceURL"];
NSString *mediaType = [info
objectForKey:UIImagePickerControllerMediaType];
[self dismissModalViewControllerAnimated:YES];
if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {
UIImage *selectedImage = [info objectForKey:UIImagePickerControllerOriginalImage];
myUIImageView.image = selectedImage;

myUIImageView.hidden = NO;


[alert release];
}

}

关于uiimagepickercontroller - iOS5中的UIImagePicker和ALAAssetRepresentation问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6852176/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com