0

Я пытаюсь установить изображение в качестве фона для представления (PiePlot), но я получаю исключение OutOfMemory.Ошибка 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 

Но это же результат, т.е. сбой приложения.

Любая помощь приветствуется.

ответ

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

    } 
+0

Какой параметр следует передать этому методу? У меня есть объект «BitmapDrawable». И как решить ** inSampleSize Factor **, вы предложили «4» здесь ... – GAMA

+0

inSampleSize означает, что ваше изображение уменьшит *** раз .... вот я даю 4, что означает, что мое изображение уменьшится в 4 раза до фактического изображения, которое вы должны передать своему изображению в качестве параметра –

+0

передать свое изображение бимама ...... –

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

что пройти в 3-х параметров? – GAMA

+0

chk принят ответ http://stackoverflow.com/questions/10314527/caused-by-java-lang-outofmemoryerror-bitmap-size-exceeds-vm-budget ... Что я должен передать как файл-объект? – GAMA

Смежные вопросы