Android, Java: 调整大小的位图忽略位图选项

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;
    }   

有什么想法,为什么新的位图忽略了选项?
1个回答

1

为什么不使用createScaledBitmap方法?它应该保留选项。在您的情况下,您正在创建一个全新的位图,它可能应用了默认配置。

编辑:另一个选择是使用您的代码并添加对copy方法的调用,如下所示:

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

然而,我认为这不会有良好的性能表现...


那是我的想法,我看到有些方法接受一个Config作为参数,但我无法弄清楚如何将它与我需要的其他参数一起应用。你能告诉我怎么做吗? - Rasmus
我之前尝试过那种方式调整大小,但位图的质量大大降低了。但使用矩阵进行缩放就不会出现这种情况。 - Rasmus
1
没问题。由于复制,它会变慢吗? - Shade
我在加载屏幕中加载所有要使用的位图,但速度并没有明显变慢。 - Rasmus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接