2

iPhone 3GS では、カメラがキャプチャした画像は 2048x1536 ピクセルです。私の計算が正しければ、この画像を CGLayer で開くと 12.5 MB を消費します。

Springboard は、12 mb を超えるアプリケーションを終了します (少なくともこれは私に起こります)。

この画像を CGContextDrawLayer のような関数で操作すると、少なくともさらに 12 MB 消費されます。

これは24MBです。

プログラムを終了させずに iPhone でそのような画像を操作するにはどうすればよいでしょうか?

寸法を縮小せずに、カメラで撮影した画像のフットプリントを縮小する方法はありますか?

手がかりはありますか?ありがとう。

4

2 に答える 2

2

意味のあるサイズのチャンクで画像を処理するには、NSInputStreamの使用を検討する必要があります。たとえば、1 MB のデータを読み取って処理し、結果をNSOutputStreamに書き込んでから、EOF までさらに 11 回繰り返すことができます。

ほとんどの場合、画像処理アルゴリズムによって最適なチャンク サイズが決定されます。

于 2009-10-04T17:31:08.467 に答える
1

画面には 320 x 480 ピクセルしかないため、レイヤーにそれ以上のものを配置すると、メモリが無駄になるようです。

したがって、レイヤーに配置する前に、元の画像を 2048 x 1526 ピクセルから 320 x 480 ピクセルに縮小して、元の画像を変換することもできます。

たとえば、レイヤーを表示するためにを使用する場合UIScrollView、ピンチとストレッチが現在のズーム レベルに基づいて新しい 320 x 480 ピクセル表現を計算するようにコードを記述します。これは、ビューのフレームと境界から決定されます。あなたのコードでは、タップしてドラッグすると、原点が変換され、欠落しているビットが再計算されます。

ドキュメントをズームインすると、Safari でこの効果を確認できます。新しいビューがレンダリングされると、ぼやけた状態から鮮明な状態になります。同様に、ビューをドラッグすると、新しく失われた部分が計算され、ビューに追加されます。

タッチ イベントに関係なく、レイヤーには 320 x 480 ピクセルの表現のみを配置する必要があります。

于 2009-09-30T11:15:44.880 に答える