2012-07-12 10 views
13

私はSDカードに1,667,072バイトを消費する2448x3264イメージを持っていますが、ビットマップとしてロードしてgetRowBytes()*getHeight()を使用してサイズを計算すると、15,980,544バイトになります。ビットマップサイズがAndroidのディスクよりもメモリ容量が大きい理由を教えてください。

なぜこれが起こりますか、ファイルの実際のサイズはどのように計算できますか?

+0

この画像のフォーマットは何ですか? –

+0

形式はjpegです。私はDevunwiredがそれに答えたと思います – Saqib

答えて

37

イメージがディスク上にあるときに圧縮されている(JPG、PNGなどの形式で保存されている)ためです。イメージをメモリにロードすると、イメージは圧縮されなくなり、すべてのピクセルで必要なメモリ容量(RGBA_8888の場合はwidth * height * 4、RGB_565の場合はwidth * height * 2)が必要になります。

+0

今、わかりました。ちょうど私がBitmap.compress(Bitmap.CompressFormatフォーマット、int品質)を使用してビットマップをFileOutputStreamに圧縮するかどうかを確認し、ビットマップを再度読み取っても大きなサイズが得られるかどうかを確認するだけです。右? – Saqib

+1

正しいです、圧縮されたイメージはファイル記憶形式だけです。実際にデータを処理するには、メモリ内のビットマップ全体に膨らませなければなりません。 – Devunwired

+0

私は1024 * 600のimgをAndroidのmemに読み込んでいます。私の計算では1024 * 600 * 4 =〜3 MBと言われていますが、DDMSは4.2 MBのメモリを持っています。 – Dori

関連する問題