Объем памяти фонового изображения - PullRequest
0 голосов
/ 19 марта 2012

Итак, я получил это фоновое изображение для своей деятельности. Это 480x800 png. В нем есть градиент, поэтому существует опасность полосатости, поэтому я установил непрозрачность 99%, чтобы выбрать лучший цветовой режим.

На моем устройстве и даже на HTC magic это не проблема.

Однако на стандартном эмуляторе 1.6 я получаю ошибки памяти. Что делать? Фон задается в коде с помощью:

bgView.setImageResource(R.drawable.baby_pink_solid);

Установка максимального значения кучи виртуальной машины равной 192, а размер оперативной памяти устройства - 256, похоже, не является решением.

Ответы [ 2 ]

0 голосов
/ 19 марта 2012

Попробуйте получить доступ к растровому изображению в коде, а затем установите его с помощью setImageBitmap().Если вы получаете OOM при декодировании растрового изображения в коде, то вот почему вы получаете его от setImageResource().

. Я обнаружил, что растровые изображения - сложная вещь для Android, и вы должныбудьте осторожны при их использовании!

Также ознакомьтесь с ответом @Sadeshkumar Periyasamy, это полезно для декодирования растровых изображений или изображений большего размера для устройств, которые не имеют такой большой мощности, как современные устройства.

0 голосов
/ 19 марта 2012

Попробуйте этот код для масштабирования любого растрового изображения:

 public class ImageScale 
 {
/**
 * Decodes the path of the image to Bitmap Image.
 * @param imagePath : path of the image.
 * @return Bitmap image.
 */
 public Bitmap decodeImage(String imagePath)
 {  
     Bitmap bitmap=null;
     try
     {

         File file=new File(imagePath);
         BitmapFactory.Options o = new BitmapFactory.Options();
         o.inJustDecodeBounds = true;

         BitmapFactory.decodeStream(new FileInputStream(file),null,o);
         final int REQUIRED_SIZE=200;
         int width_tmp=o.outWidth, height_tmp=o.outHeight;

         int scale=1;
         while(true)
         {
             if(width_tmp/2<REQUIRED_SIZE || height_tmp/2<REQUIRED_SIZE)
             break;
             width_tmp/=2;
             height_tmp/=2;
             scale*=2;  
         }  

         BitmapFactory.Options options=new BitmapFactory.Options();

         options.inSampleSize=scale;
         bitmap=BitmapFactory.decodeStream(new FileInputStream(file), null, options);

     }  
     catch(Exception e) 
     {  
         bitmap = null;
     }      
     return bitmap; 
 }

 /**
  * Resizes the given Bitmap to Given size.
  * @param bm : Bitmap to resize.
  * @param newHeight : Height to resize.
  * @param newWidth : Width to resize.
  * @return Resized Bitmap.
  */
 public Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth) 
 {

    Bitmap resizedBitmap = null;
    try
    {
        if(bm!=null)
        {
            int width = bm.getWidth();
            int height = bm.getHeight();
            float scaleWidth = ((float) newWidth) / width;
            float scaleHeight = ((float) newHeight) / height;
            // create a matrix for the manipulation
            Matrix matrix = new Matrix();
            // resize the bit map
            matrix.postScale(scaleWidth, scaleHeight);
            // recreate the new Bitmap
resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix,       true);
 // resizedBitmap = Bitmap.createScaledBitmap(bm, newWidth, newHeight, true);
        }
    }
    catch(Exception e)
    {
        resizedBitmap = null;
    }

    return resizedBitmap;
} 

 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...