1

重複の可能性:
iPhoneのALAssetから取得したURLから画像を表示する

私のアプリケーションでは、フォトライブラリから特定の画像を取得する必要があります。

didFinishPickingMediaWithInfoを使用すると、ImagenameとImagePathを取得できます。

Imagename、ImagePathをデータベースに保存しています。

しかし、フォトライブラリの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 を利用すると、次のようなエラーが発生します。

所有する ALAssetsLibraryrefactoring の有効期間を過ぎて 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 に答える