1

私のコードは次のとおりです。

    public static byte[] compress(byte[] data, CompressFormat format, int quality)
    {       
        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
        final Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length);
        try {
            bm.compress(format, quality, baos);
        } finally {
            bm.recycle();
        }
        return baos.toByteArray();
    }

元画像のサイズが大きいとメモリ使用量が気になります。compress() が呼び出された後、recycle() が呼び出される前に、以下がメモリ内に存在します。

  1. 元の圧縮されていないバイナリ データ (データ)。
  2. すべてのピクセル データを含むデコードされたビットマップ (bm)。
  3. 圧縮されたバイナリ データ (baos 内に内部的に保存されます)。

中間の Bitmap オブジェクトを作成せずにこのデコード/エンコード手順を実行できるベース Android の機能はありますか? それとも私は不必要に心配していますか?

4

1 に答える 1

0

私が思うに、ビットマップをロードする以外に選択肢はありません。しかし、それは問題ではありません。画像が巨大な場合は、メモリにロードする前に縮小してください。

http://developer.android.com/training/displaying-bitmaps/load-bitmap.htmlをご覧ください。

于 2012-08-28T13:45:36.203 に答える