0

我正在尝试将图像设置为视图(PiePlot)的背景,但我遇到了OutOfMemory异常。

Bg图像大小为170kb。
我尝试了 5kb 的背景样本图像,它毫无例外地工作。

我试过以下:

@Override
protected void onDestroy() {
    super.onDestroy();

    unbindDrawables(mView);
    System.gc();
}

private void unbindDrawables(View view) {
    if (view.getBackground() != null) {
        view.getBackground().setCallback(null);
    }
    if (view instanceof ViewGroup) {
        for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
            unbindDrawables(((ViewGroup) view).getChildAt(i));
        }
        ((ViewGroup) view).removeAllViews();
    }
}

但这在onDestroy()调用时很有用。但是在启动应用程序时,这将不起作用,因此应用程序崩溃。

我也试过这个:

BitmapDrawable bitmapDrawable = (BitmapDrawable) ctx.getResources().getDrawable(R.drawable.bg2);
BitmapFactory.Options bitopt = new BitmapFactory.Options();
bitopt.inSampleSize = 10;
plot.setBackgroundImage(bitmapDrawable); //plot is PiePlot object

但同样的结果,即应用程序崩溃。

任何帮助表示赞赏。

4

2 回答 2

1

试试把这个功能...

public static Bitmap decodeFile(File f,int WIDTH,int HIGHT){
     try {
         //Decode image size
         BitmapFactory.Options o = new BitmapFactory.Options();
         o.inJustDecodeBounds = true;
         BitmapFactory.decodeStream(new FileInputStream(f),null,o);

         //The new size we want to scale to
         final int REQUIRED_WIDTH=WIDTH;
         final int REQUIRED_HIGHT=HIGHT;
         //Find the correct scale value. It should be the power of 2.
         int scale=1;
         while(o.outWidth/scale/2>=REQUIRED_WIDTH && o.outHeight/scale/2>=REQUIRED_HIGHT)
             scale*=2;

         //Decode with inSampleSize
         BitmapFactory.Options o2 = new BitmapFactory.Options();
         o2.inSampleSize=scale;
         return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
     } catch (FileNotFoundException e) {}
     return null;
 }
于 2012-12-07T06:54:09.277 回答
1

只需在你的图像上实现这个......它会将你的图像缩小 4 倍

public static Bitmap getImage(byte[] image) {
        BitmapFactory.Options config = new BitmapFactory.Options();
        config.inPreferredConfig = Bitmap.Config.RGB_565;
        config.inSampleSize = 4;
        return BitmapFactory.decodeByteArray(image, 0, image.length,config);

    }
于 2012-12-07T06:59:44.927 回答