2015-07-14 3 views
-1

В моем приложении для Android, чтобы избежать ошибки OOM (битовая карта из памяти), я масштабирую и загружаю изображение из папки с ресурсами. У меня есть некоторые из моих изображений в папке res \ drawable-hdpi. Есть ли у меня возможность масштабировать и загружать его, как я делаю для изображений в папке с ресурсами?Масштабирование и загрузка изображения из папки res drawable-hdpi

@SuppressLint("NewApi") 
    public Drawable getAssetImage(String filename) throws IOException { 

     int dWidth,dHeight; 
     Display display = getWindowManager().getDefaultDisplay(); 
     if ( Integer.valueOf(android.os.Build.VERSION.SDK_INT) < 13) { 
      dWidth = display.getWidth(); 
      dHeight = display.getHeight(); 
     } else { 
       Point size = new Point(); 
       display.getSize(size); 
       dWidth = size.x; 
       dHeight = size.y; 
     }  

     AssetManager assets = getApplicationContext().getResources().getAssets(); 
     InputStream buffer = null; 
     try { 
      buffer = new BufferedInputStream((assets.open(filename + ".png"))); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

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

     if (tabletSize) { 

     } else { 

      int tempSampleSize = calculateInSampleSize(options, (int)dWidth, (int)dHeight); 

      Log.i("ClassicalMemoryGame", "dWidth " + dWidth); 
      Log.i("ClassicalMemoryGame", "dHeight " + dHeight); 
      Log.i("ClassicalMemoryGame", "sample size - " + tempSampleSize); 

      if (tempSampleSize > 1) { 
       options.inSampleSize = tempSampleSize; 
      } 
     } 
     options.inJustDecodeBounds = false; 
     Bitmap temp = BitmapFactory.decodeStream(buffer, null, options); 
     Bitmap finalImage = Bitmap.createScaledBitmap(temp, (int) dWidth, (int) dHeight, true); 

     Drawable d = new BitmapDrawable(getResources(),finalImage); 

     return d;  
    } 

ответ

0

Вы можете использовать следующий метод, чтобы сделать это:

public static Bitmap decodeScaledSampleBitmap(Resources res, 
    int resourceId,int width, int height) 
{ 

// First decode with inJustDecodeBounds=true to check dimensions 
final BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inJustDecodeBounds = true; 
BitmapFactory.decodeResource(res, resourceId, options); 

// Calculate inSampleSize 
options.inSampleSize = calculateInSampleSize(options, 
    width, height); 

// Decode bitmap with inSampleSize set 
options.inJustDecodeBounds = false; 

Bitmap b = Bitmap.createScaledBitmap(
    BitmapFactory.decodeResource(res, resourceId, options), 
    width, height, true); 

return b; 
} 
Смежные вопросы