2012-01-03 12 views
1

PNGイメージは圧縮されていて、UIImageViewとしてUIImagesとしてロードされると、それらはメモリ内で元のファイルよりもはるかに多く占有されることがわかります。これはJPGイメージにも当てはまりますか?UIImageViewのJPGイメージメモリフットプリント

答えて

6

短い答え:はい。

長い答え:JPEGはロッシーな圧縮方式で、元のビットマップよりも桁違いの大きさの画像を圧縮することができます。 PNGは可逆圧縮方式であるため、JPEGほどの圧縮率は得られません。

このため、非常に小さいJPEGファイルは、圧縮されると膨大なサイズになり、同等のPNGファイルよりもはるかに大きくなります。

ただし、イメージをビットマップとしてメモリにロードすると、読み込まれるファイルの種類に関係なく、予測可能な量のメモリが消費されることに注意してください。

ビットマップイメージは1ピクセルあたり正確な量のメモリを使用するからです(実際には、標準の32ビットイメージの場合は1ピクセルあたり32ビットです)。したがって、ピクセル単位の幅にピクセル単位の高さを掛け、それに4を掛けることで(32ビットイメージであると仮定して)、イメージに必要なメモリを簡単に計算できます(32/8ビット/バイト)。これは、RAMにイメージのビットマップデータを格納するために必要なバイト数を示します。

したがって640×480ピクセル、32ビットの画像は使用:ちょうど1メガバイトを超える* 480 640 * 4 = 1228800バイト、。このビットマップをバッキングストアとして使用するオブジェクトのUIImageは、少しオーバーヘッドを追加します。

iMacなどで使用されているApple 27インチディスプレイの解像度は2560 x 1440です。デスクトップのビットマップイメージを保持するためには14 MBのRAMが必要です。

+0

偉大な答え。ありがとう。 – RaffAl

+1

Retina Display(2048×1536)のiPadは、それぞれの背景画像に12.5メガバイトを使用します。 –