3

画像のセクションをその画像の他の部分にコピーするアプリに取り組んでいます。コピーするロジックは正常に機能しますが、元に戻す機能を提供したいときに問題が発生しました。

現在の解決策は、最大 5 つの UIImage の配列を保存し、スタック内の最後から 2 番目のオブジェクトを使用して元に戻すことでした。これは、非常に大きなイメージを使用する場合に、あらゆる種類のメモリの問題を引き起こしました。たとえば、その配列に 5 MB のイメージを 5 つ含めることができます。

現在考えているのはこの2つです。

  1. すべての変更を加えた新しい画像を保存する代わりに、Photoshop でレイヤーのように行った変更のみを保存します。5 つのレイヤーを重ねて配置できます。レイヤーがなくなったら、下の 2 つのレイヤーを結合して新しいレイヤーを作成します。ユーザーが画像全体を 1 つのレイヤーにコピーすると、まだ問題が発生する可能性があります。これはありそうもありません。

  2. 以前のように画像全体を保存しますが、ファイル システムに保存します。これによりメモリを解放できますが、デバイスが 5MB の画像を常に保存し続けることがどれくらいの負荷になるかはわかりません。保存する画像は 5 つに制限します。

他のアイデアや、2 つのうちの 1 つが他のものよりも優れている理由はありますか?

4

2 に答える 2

2

私が検討するオプションは、画像編集を行うための情報を保存することにより、コマンド パターンに実装することです。画像を表示する必要がある場合は、現在のコマンドを処理することでその時点で画像を生成できます。せいぜい、いつでも元のイメージと編集されたバージョンをメモリに保持できます。

これは、配列からコマンド項目を削除できるようになったため、「元に戻す」問題の解決にも役立ちます。

于 2013-07-11T16:39:19.163 に答える
1

サイズとメモリの制約のため、次を使用して画像にアクセスします。

NSString *fileLocation = [[NSBundle mainBundle] pathForResource:fileName ofType:extension];
NSData *imageData = [NSData dataWithContentsOfFile:fileLocation];

[UIImage imageWithData:imageData];

これは、必要に応じてメモリ使用量を軽減するために、イメージをファイル システムに保存するために使用する必要があります。

ARC が有効になっていることを確認してください。未使用のオブジェクトを自動解放したいでしょう。

于 2013-07-11T16:40:07.207 に答える