4

我正在用 Java 创建这个 Android 游戏。但是,我加载位图,然后调整它们的大小以适合屏幕等(dpi 并不准确)。但我的想法也是为具有少量内存的设备加载 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 回答