2012-04-14 2 views
1

PNG画像は168.2KBと1991x1756です。BitmapFactory.decodeStream()を使用してBitmapにインポートしようとしました。問題は、OutOfMemoryErrorに入り、Bitmapのサイズが13,657KBになってしまうことです。
私が理解していないのは、インポート後にファイルが大きくなっていることと、これを緩和する方法です。
このOutOfMemoryErrorの問題は、デコードされたBitmapイメージではよく見られますが、修正する方法が見つからないと思われます。何か案は?BitmapFactory.decodeStream()は元のビットマップの約100倍のビットマップを返します

Bitmap bitmap = BitmapFactory.decodeStream(inputStream, null, bitmapOptions);

E/AndroidRuntime(10744): java.lang.OutOfMemoryError: bitmap size exceeds VM budget(Heap Size=7815KB, Allocated=3279KB, Bitmap Size=13657KB)

答えて

4

PNGファイルは、ディスク上のファイルサイズは、それに含まれるすべてのデータがメモリにロードされるとき、それは場合よりもはるかに小さいことを意味し、高圧縮です。
ビットマップは、すべてのピクセルが値で表される非常に単純なイメージ表現です。この値のサイズは、現在の設定(32ビットイメージ、16ビットイメージ、またはいくつかの共通サイズである8ビットイメージについて聞いたことがあるかもしれません)によって異なります。

ビットマップとして表されるイメージの実際のサイズを計算するには、ピクセル数を計算し、これに各ピクセルのビット数を掛けなければなりません。
画像は1991x1756ピクセル(ピクセル)です。 ARGB_8888形式(1色/アルファチャンネルごとに1バイト=ピクセルあたり4バイト)を使用してビットマップを読み込むと、最終的に3 496 196 * 4 =13 984 784バイトになります。

これは画像の品質を低下させるものの、より少ないバイト/チャンネル(たとえばRGB_565)を使用することで合計サイズを減らすことができます。より良いオプションは、画像のサイズを小さくするか、BitmapFactory.OptionsinSampleSizeパラメータを使用して画像を読み込み、小さな画像を読み込むことです。

1

私はPNG画像が大きく圧縮されているが、ピクセルあたり4つのバイト(ARGB)

* 1756ので1991 *は(あるとしてアンドロイドでビットマップが圧縮されていないと信じて4バイト)は約13657KBです

サイズを小さくするためにビットマップオプションのオプションを使用してください。

は、この記事を見てみましょう: Decoding bitmaps in Android with the right size

関連する問題