1

可能重复:
从 iPhone 中的 ALAsset 检索的 URL 显示图像

在我的应用程序中,我需要从照片库中获取特定图像,

使用didFinishPickingMediaWithInfo我可以获得 Imagename 和 ImagePath。

我将 Imagename、ImagePath 存储在数据库中。

但是,如何使用 Photo Library 中的 Imageview 中的 Imagename 或 ImagePath 来显示该特定图像?

4

2 回答 2

3

请利用ALAssetLibrary. 为此,请添加AssetsLibrary.framework到您的项目并编写以下代码。

您的文件名应如下所示assets-library://asset/asset.JPG?id=1000000194&ext=JPG

NSString *fileName = @"assets-library://asset/asset.JPG?id=1000000194&ext=JPG";

typedef void (^ALAssetsLibraryAssetForURLResultBlock)(ALAsset *asset);
typedef void (^ALAssetsLibraryAccessFailureBlock)(NSError *error);    

ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset)
{
    ALAssetRepresentation *rep = [myasset defaultRepresentation];
    CGImageRef iref = [rep fullResolutionImage];
    UIImage *images = nil;

    if (iref)
    {
        images = [UIImage imageWithCGImage:iref scale:[rep scale] orientation:(UIImageOrientation)[rep orientation]];       

        //doing UI operation on the main thread
         dispatch_async(dispatch_get_main_queue(), ^{

         yourImageView.image = images;

     });    

    }   
};

ALAssetsLibraryAccessFailureBlock failureblock  = ^(NSError *myerror)
{
    NSLog(@"can't get image");
};    

NSURL *asseturl = [NSURL URLWithString:fileName];

ALAssetsLibrary* assetslibrary = [[[ALAssetsLibrary alloc] init] autorelease];
[assetslibrary assetForURL:asseturl 
               resultBlock:resultblock   
              failureBlock:failureblock];

笔记:

升级到 iOS 5 并进行代码重构以使用 ARC 后,您将收到错误消息

在其拥有的 ALAssetsLibrary 的生命周期之后访问 ALAssetPrivate 的无效尝试重构以使用 ARC

要解决此问题,请添加一个静态方法来检索ALAssetLibrary类的共享实例。

+ (ALAssetsLibrary *)defaultAssetsLibrary {
    static dispatch_once_t pred = 0;
    static ALAssetsLibrary *library = nil;
    dispatch_once(&pred, ^{
        library = [[ALAssetsLibrary alloc] init];
    });
    return library; 
}

然后,使用它访问它[MyClass defaultAssetsLibrary];

[[MyClass defaultAssetsLibrary] assetForURL:asseturl 
                   resultBlock:resultblock   
                  failureBlock:failureblock];
于 2012-07-04T05:13:18.283 回答
0

如果您有图像路径,则可以使用以下代码。让我们将 imagePath 作为 NSString 变量,其中包含图像路径,包括图像名称。

   NSData *thedata=[[NSData alloc]initWithContentsOfFile:imagePath];
     UIImageView *img=[[UIImageView alloc]initWithImage:[UIImage imageWithData:thedata]];

希望能帮助到你。

于 2012-07-04T04:30:33.017 回答