ここ数週間、iPhone でタイリング メカニズムを動作させようと、頭を悩ませてきました。スクロール ビューで要求されるタイルとして保存できるように、約 150 MB の画像をスケーリングおよびトリミングする必要があり、ユーザーは画像を高解像度で表示できます。
問題は、これらの画像が iPhone の処理能力の限界を押し広げていることです。これらの巨大な画像を 1000 程度に縮小してタイリングするのは非常に簡単に思えますが、ズーム レベルが大きい場合は途中で、たとえば 4000 に拡大する必要があり、それは大きすぎます。そこで、フルサイズの画像から中サイズのブロックを作成し、それらのそれぞれと中ズームをタイリングするというアイデアを思いつきました。
内側のループの周りに autoreleasepool を作成し、各サイクルの後にそれを排出することで、ほとんどの場合、メモリを制御下に置くことができますが、ランダムに見えることがあり、メモリがリークするか、少なくとも排出されません。私はこれをすべてセカンダリ スレッドで行っており、そのスレッドの最初の関数に戻ったら、スレッド自体の autoreleasepool を解放してから、最後のメモリ アーティファクトをクリアします。シミュレーターには問題ないようですが、iPhone の許容度ははるかに低く、タイリング プロセス全体を完了する前にクラッシュします。私が使用しているクロッピング コードは Hive05 のものです
http://www.hive05.com/2008/11/crop-an-image-using-the-iphone-sdk/
これほど大量の画像を扱う必要があった人は他にいますか? タイルを事前に生成するのが最善の方法ですか? 一部のループがメモリを増加させ、一部を増加させない理由、または外側のプールを待つ代わりに内側のプールですべての自動解放されたものを強制的にクリアする方法についての提案はありますか?
ここまで読んでくれてありがとう。
追加しなければならないのは、これらの画像はTIFであるため、ビットマップ情報を直接読み取る方が、全体をスケーリングしてトリミングするよりも優れている可能性があることです。