2013-03-08 103 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