2013-01-25 3 views
5

私はこれを今かなり頼りにしています。私は非常に大きな背景を描くこのゲームを作成しています。しかし、問題は(もちろん)、私がゲームにもっと多くの要素を入れると、私はOutOfMemory Exceptionを取得します。OutOfMemory例外:イメージを圧縮するとヒープサイズが小さくなりますか?

私が聞いたことがあるのは、イメージを圧縮してヒープサイズの割り当てを減らすかどうかです。たとえば、PNGの背景(3000 x 2000ピクセル)は約1.5 MBです。一連のPNG圧縮(TinyPNGやPNGGuntletなどのソフトウェア経由)の後、背景のサイズは712 KBに大幅に削減されました。ここで圧縮された画像は、オリジナルと同じサイズです(3000 x 2000)。

元のバックグラウンドサイズ(1.5 MB)のヒープサイズの割り当ては、圧縮された(712 KB)のものと同じになりますか?

+1

非常に良い質問です。グラフィックスシステムでは、画面に描画するために圧縮されていないイメージが必要なので、答えはおそらく "はい"ですが、わかりません。私は1500を1000でバックグラウンドを縮小しようとし、メモリ消費量が4回低下するかどうかを調べます。 – dasblinkenlight

+0

はい、他のモジュールが完成したらすぐに試してみます。私はこれについてどうやって行くのかは分かりませんが、画像圧縮を行った後、ゲームのFPSが大幅に増加しました。しかし、ヒープサイズが縮小されているかどうかは完全にはわかりません。 – dabaerju

答えて

1

答えははいです。圧縮された画像と圧縮されていない画像の両方が同じ量のメモリを占有しています。最終的には、R、G、B(、A)値のグリッドとして終了します。
メモリを節約できるのは、GPUが直接サポートする圧縮形式(OpenGLテクスチャのS3TC圧縮など)を使用している場合のみです。

圧縮では、ディスク上のファイルサイズとファイルのロードに必要なIO時間の2つが削減されます(ただし、この保存は圧縮解除プロセスによって相殺される可能性があります)。

ただし、画像をARGB_8888以外のビットマップタイプ(RGB_565など)に読み込むことができます。これにより、ビットマップの保存に必要なメモリ量が削減されますが、画像の品質は低下します。

+0

私はなぜこれらのイメージを圧縮した後でもOutOfMemory Exceptionを得続けたのかと非常に困惑していました。これまでのところ、圧縮では画面のパフォーマンスが向上するだけでなく、読み込みにかかる時間が短縮されることが分かりました。それをクリアしていただきありがとうございます!大きなヒープサイズを許可するか、ファイルサイズを小さくする以外の方法はないと思います。 – dabaerju

+1

イメージをARGB_8888以外のビットマップタイプに読み込むことができます(例:RGB_565 - これはメモリの半分を使用します)。 –

関連する問題