現在、次のコードを使用して、iOSアプリケーションのALAssetからUIImageを取得しています。CGImageRefの最大サイズをALAssetRepresentationから設定する
ALAssetRepresentation *rep = [self.asset defaultRepresentation];
CGImageRef ref = [rep fullResolutionImage];
ALAssetOrientation orientation = [[self.asset valueForProperty:@"ALAssetPropertyOrientation"] intValue];
UIImage *image = [UIImage imageWithCGImage:ref scale:1.0 orientation:(UIImageOrientation)orientation];
これは、画像がかなり小さい(たとえば、カメラのカメラで撮影されている)限り、非常に効果的です。しかし、画像は(6000px^2以上)が大きすぎる場合、アプリはこのステップ中にメモリ不足になります:アプリがクラッシュしたり(理想的には)を設定する前に
CGImageRef ref = [rep fullResolutionImage];
を、私はこの状態を検出したいと思います返されるイメージの最大サイズ。
私は、fullScreenImage
が小さい画像を返すことに気づいていますが、拡大するためには画像よりもはるかに高い解像度が必要です。
さらに、JPGなど圧縮率の高いフォーマットは圧縮されたサイズでは十分に小さいかもしれませんが、ピクセル単位のサイズが大きければメモリを消費しすぎる可能性があるため、アセットのバイトサイズを使用することは信頼性がありません)。
イメージのサイズを取得してこの状況を事前に検出して、読み込みをキャンセルしてエラーを表示する方法や、そのような大きなアセットの小さなバージョンを取得する方法についてのご意見をいただければ幸いです。
ありがとうございます。問題は、圧縮されたイメージのファイルサイズが無関係であることです。たとえば、白だけを含む6000px * 6000pxのPNGは、バイト単位では非常に小さいサイズを持ちますが、一度圧縮されて表示されると非常に大きくなります。 – 0x90
投影されたピクセルサイズを取得したいので参照してください – markhunte
はい。私はこれをより明確にするために質問を更新しました。それを指摘してくれてありがとう。 :) – 0x90