2013-03-08 81 views
3

我正在用Java创建此Android游戏。但是,我加载位图,然后调整它们以适合屏幕等等(dpi不是确切的)。但我的想法也是在16b(mBitmapOptions.inPreferredConfig = Bitmap.Config.ARGB_4444)中加载少量RAM的位图。但是,当我调整位图大小时,它们似乎回到32b(Bitmap.Config.ARGB_8888)。Android,Java:调整大小的位图忽略位图选项

这是我的声明选项:

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

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

编辑:另一种选择是使用你的代码和呼叫添加到copy方法是这样的:

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

不过,我不认为这将有一个很好的表现...

+0

这是我的想法,我看到有些方法接受一个配置作为参数,但我无法弄清楚如何将它应用于我需要的其他参数。你能告诉我怎么样? – Rasmus 2013-03-08 12:13:19

+1

对不起,有点困惑。看到我编辑的答案。 – Shade 2013-03-08 12:14:13

+0

我之前做过调整大小的方式,但是Bitmap的质量下降了ALOT。但是使用它没有的矩阵进行缩放。 – Rasmus 2013-03-08 12:16:04