2

JavaでこのAndroidプロジェクトを作成しています。ただし、一部の Bitmap メソッドを使用した参照がどこまで進むのか、少し疑問に思っています。

私は元のビットマップを次のように持っています:

Bitmap originalBitmap = BitmapFactory.decodeResource(resources, bitmapID);

次に、基本クラスのコンストラクター内のオブジェクトに送信します。

class Test
{
    Bitmap memberBitmap;

    Test(Bitmap b)
    {
        memberBitmap = b;
    }
}

これまでのところ、memberBitmap がまだ originalBitmap への参照であることはわかっています。しかし、私がやりたいことは、基本的に次を使用してこのビットマップのサイズを変更することです:

memberBitmap = Bitmap.createScaledBitmap(memberBitmap, newWidth, newHeight, filter);

新しいビットマップをメモリに保存しましたか、それとも元のビットマップを変更しましたか?

新しいビットマップを作成した場合、代わりに元のビットマップを更新するように変更することはできますか?

お気に入り:

memberBitmap.createScaledBitmap(memberBitmap, newWidth, newHeight, filter);
4

2 に答える 2

0

その API の音によると、おそらくメモリ内に新しいビットマップを作成しています。toString()これは、コンストラクターの実行後に両方のオブジェクトを出力することで確認でき、それらのメモリ位置が同じかどうかを確認できます。

2 番目の質問:originalBitmapを new への参照に変更しますBitmap

于 2013-05-01T18:02:09.123 に答える
0

実際には新しいビットマップを作成しています。この場合、新しいビットマップが作成され、古いビットマップへの参照が失われます。次のようなコードを実行した場合:

memberBitmap = b;
Bitmap scaledBitmap = Bitmap.createScaledBitmap(memberBitmap, newWidth, newHeight, filter);

memberBitmap変更されていないままscaledBitmapで、大きいバージョンまたは小さいバージョンであることがわかります。ただし、1 つの例外は、スケーリングをまったく実行しない場合です。この場合、参照を返すだけでmemberBitmap、同じオブジェクトへの 2 つの参照が作成されます。

作業を削除する方法の 1 つは、BitmapFactory.Optionsパラメーターを使用して最初にビットマップを小さく作成することです。例えば:

BitmapFactory.Options o = new BitmapFactory.Options();
o.inSampleSize = 2;
Bitmap originalBitmap = BitmapFactory.decodeResource(resources, bitmapID);

これにより、元の画像の半分のサイズ (幅と高さ) のビットマップが作成されます。残念ながら、これは非常に制限的であり、 の値はinSampleSize2 の累乗でなければなりません。

于 2013-05-01T18:13:54.350 に答える