0

Android アプリを作成していて、sdcard からファイルを読み取り、残りの Web サービスに送信したいと考えています。すべて正常に動作しますが、sdcard からファイルを読み取ると、ファイルサイズが元のサイズよりもはるかに大きくなります。10 KB のファイルが 260 KB になります。

私は次のことをやっています...

File f = new File(uri);
Log.d("ORIGINAL FILESIZE:"+f.length()); 

SDCARD のファイルサイズは 10752 バイトです。

これは、電話の画像とまったく同じサイズです。

Bitmap bmp = BitmapFactory.decodeFile(uri);
ByteArrayOutputStream bao = new ByteArrayOutputStream();

bmp.compress(Bitmap.CompressFormat.JPEG, 100, bao);
Log.d("FILESIZE AFTER:"+bao.size());

デコード/圧縮後のファイルサイズ 260904 バイト。

これは、サーバーが受信してディスクに書き込むファイルサイズです。画像と品質は同じですが、約 20 倍の大きさです。

私が間違っていることを誰かが知っていますか?

4

2 に答える 2

0

それは間違っていません。または、少なくともそうである可能性があります。メモリ内のビットマップのバイト表現には、(32 ビット イメージ)height * widht * 4バイトが必要です。もちろん、圧縮されているため、ファイルサイズとは異なります。

于 2012-07-11T15:20:20.553 に答える
0

元のファイルが高圧縮率の jpeg である場合、特にcompress()メソッドで 100 の品質 (高品質を意味する) を使用する場合は、デコードされたビットマップがはるかに大きくなるのが普通です。

compress()品質値を下げて使用してみましたか(ドキュメントを参照) ?

于 2012-07-11T15:11:03.540 に答える