2

フォトライブラリから画像をロードするアプリケーションを使用しています。

画像をimageViewにバインドするために次のコードを使用しています。

-(void)loadImage:(UIImageView *)imgView FileName:(NSString *)fileName
{
   typedef void (^ALAssetsLibraryAssetForURLResultBlock)(ALAsset *asset);
   typedef void (^ALAssetsLibraryAccessFailureBlock)(NSError *error);    

   ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset)
   {
     ALAssetRepresentation *rep = [myasset defaultRepresentation];
     CGImageRef iref = [rep fullResolutionImage];
     UIImage *lImage;
     if (iref)
     {
        lImage = [UIImage imageWithCGImage:iref scale:[rep scale] orientation:(UIImageOrientation)[rep orientation]];   
     }
     else
     {
        lImage = [UIImage imageNamed:@"Nofile.png"];
     }
     dispatch_async(dispatch_get_main_queue(), ^{
         [imgView setImage:lImage];
     });
   };

   ALAssetsLibraryAccessFailureBlock failureblock  = ^(NSError *myerror)
   {
       UIImage *images = [UIImage imageNamed:@"Nofile.png"];
        dispatch_async(dispatch_get_main_queue(), ^{
             [imgView setImage:images];
     });        
   };                   


    NSURL *asseturl = [NSURL URLWithString:fileName];

    ALAssetsLibrary *asset = [[ALAssetsLibrary alloc] init];
    [asset assetForURL:asseturl
           resultBlock:resultblock
          failureBlock:failureblock];
}

しかし、実行しようとすると、エラーが発生し、アプリケーションがクラッシュすることがあります。コンソールに表示されるエラーは次のとおりです。

** * エラー: FigCreateCGImageFromJPEG が -12910 を返しました。423114 バイト。ソフトウェアデコードに戻ります。メモリ警告を受信しました。 私の写真ライブラリには、高解像度の画像が含まれており、そのサイズは 10 ~ 30 MB です。

4

3 に答える 3

2

最後に、問題を修正しました。問題は、フル解像度の画像を取得することにあると思います。

それ以外の :

CGImageRef iref = [rep fullResolutionImage];

私が使用した:

CGImageRef iref = [myasset aspectRatioThumbnail];

そして、すべてがうまくいきました。コンソールにエラーもクラッシュもありませんが、画像の品質/解像度が低下します。

于 2012-12-27T14:02:22.757 に答える
0

同様のエラーがあります:

* エラー: FigCreateCGImageFromJPEG が -12909 を返しました。0 バイト。ソフトウェアデコードに戻ります。

アプリクラッシュオンコール:

CGImageRef originalImage = [representation fullResolutionImage];

次のように置き換えて修正します。

CGImageRef originalImage = [representation fullScreenImage]; 
于 2013-11-27T14:35:29.450 に答える
-1
[UIImage imageWithCGImage:] 

imageWithCGImageスタックメモリ機能ですが、画像が大きいとオーバーフローしてしまうようです。ヒープ関数の使用についてはどうですか。

lImage = [[[UIImage alloc]initWithCGImage:iref scale:[rep scale] orientation:(UIImageOrientation)[rep orientation]] autorelease];
于 2013-03-04T10:19:13.647 に答える