4

JavaでこのAndroidゲームを作成しています。ただし、ビットマップをロードしてから、画面などに合わせてサイズを変更します (dpi は実際には正確ではありません)。しかし、少量のRAMを搭載したデバイスの場合、16b(mBitmapOptions.inPreferredConfig = Bitmap.Config.ARGB_4444)でビットマップをロードすることも考えています。しかし、ビットマップのサイズを変更すると、32b (Bitmap.Config.ARGB_8888) に戻るようです。

これは、オプションを宣言する方法です。

    mBitmapOptions = new BitmapFactory.Options();
    mBitmapOptions.inPreferredConfig = Bitmap.Config.ARGB_4444;

これは私がビットマップをロードする方法です:

    mBitmaps.add(getResizedBitmap(BitmapFactory.decodeResource(mResources, imagePath, mBitmapOptions)));

これは getResizeBitmap メソッドです。

    public Bitmap getResizedBitmap(Bitmap bm) 
    {
                    //Original size
        int width = bm.getWidth();
        int height = bm.getHeight();

                    //New size (percent)
        float newWidth = 1 * mScaleWidth;
        float newHeight = 1 * mScaleHeight;

                    //Create the matrix
        Matrix matrix = new Matrix();
        matrix.postScale(newWidth, newHeight);

                    //Recreate the new Bitmap
        Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, true);

                    //Recycle the old Bitmap
        bm.recycle();

        return resizedBitmap;
    }   

新しいビットマップがオプションを無視する理由はありますか?

4

1 に答える 1

1

createScaledBitmapメソッドを使用しないのはなぜですか? オプションを保持する必要があります。あなたの場合、完全に新しいビットマップを作成しており、おそらくデフォルトの設定を適用しています。

編集:別のオプションは、コードを使用して、次のようにコピーメソッドへの呼び出しを追加することです。

Bitmap smallerBitmap = resizedBitmap.copy (Bitmap.Config.ARGB_4444, false);
resizedBitmap.recycle ();

しかし、これでは良いパフォーマンスが得られないと思います...

于 2013-03-08T12:10:31.170 に答える