2017-05-24 7 views
0

JPG圧縮機能を使用してビットマップを圧縮しようとしています。ビットマップを圧縮すると常に同じバイトサイズが返されます

これは、コードの私の作品です:

ByteArrayOutputStream out = new ByteArrayOutputStream(); 
originalBitmap.compress(Bitmap.CompressFormat.JPEG, 80, out); 
byte[] newArray = out.toByteArray(); 
Bitmap compressed = BitmapFactory.decodeByteArray(newArray, 0, newArray.length); 

奇妙な行動は、私は圧縮率(すなわち80から50までを。)変更した場合、「アウト」配列のサイズが変更されるということです...ビットマップ "圧縮された"ビットマップは常に "originalBitmap"と同じバイト数で残っています。

なぜ誰かが私に説明することができますか? X * Y * D、ここで:Bitmapがかかりバイトの

答えて

2

量が予め

おかげ...

  • Xピクセル
  • Yで、幅で、高さピクセル
  • Dはビット深度で、1ピクセルあたりのバイト数で、デフォルトでは4です。

BitmapがJPEG、PNG、WebPなどから読み込まれたかどうかは関係ありません。バイト数は、解像度(幅と高さ)とビット深度からのみ決定されます。

あなたのケースでは、ちょうど少しのファジー出力を使って、以前と同じバイト数のBitmapを正常に作成しています。

+0

私はあなたが何を意味するのか理解しました!あなたは私にビットマップを圧縮する良い方法を提案できますか? – Blasco73

+0

@ Blasco73:「ビットマップを圧縮する」という意味がわかりません。 「より少ないメモリを必要とする小さなビットマップを作成する」という場合は、オリジナルのビットマップに 'createScaledBitmap()'を使用してください。 – CommonsWare

+0

私は、幅と高さが固定されているが可変の圧縮率を持つビットマップ(ただし画像)を意味します。 – Blasco73

関連する問題