title: Android Out of memory error in Imageview
body: <p>I need to set a background image in my app. I have used an imageview and am trying to set its background programatically. I am getting the 'out of memory error'. I read other posts on SO and have changed my code to get image only as per the screen height and width. I have tried a few other things but still keep getting the same error. Kindly help.</p>
  
  <p>Thanks.</p>
  
  <pre><code>    @Override
  protected void onResume() {
      super.onResume();
  
      ivBackground.setImageBitmap(decodeSampledBitmapFromResource(getResources(), R.drawable.themes, getDisplayWidth(), getDisplayHeight()));
      ivBackground.setScaleType(ScaleType.CENTER_CROP);
  }
  
  public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId,
          int reqWidth, int reqHeight) {
  
      // First decode with inJustDecodeBounds=true to check dimensions
      final BitmapFactory.Options options = new BitmapFactory.Options();
      options.inJustDecodeBounds = true;
      BitmapFactory.decodeResource(res, resId, options);
  
      // Calculate inSampleSize
      options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
  
      // Decode bitmap with inSampleSize set
      options.inJustDecodeBounds = false;
      return BitmapFactory.decodeResource(res, resId, options);
  }
  
  
  
  public int getDisplayHeight(){
      DisplayMetrics dm = new DisplayMetrics();
      getWindowManager().getDefaultDisplay().getMetrics(dm);
      return dm.heightPixels;
  }
  
  public int getDisplayWidth(){
      DisplayMetrics dm = new DisplayMetrics();
      getWindowManager().getDefaultDisplay().getMetrics(dm);
      return dm.widthPixels;
  }
  
  
  
  public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) {
      // Raw height and width of image
      final int height = options.outHeight;
      final int width = options.outWidth;
      int inSampleSize = 1;
  
      if (height &gt; reqHeight || width &gt; reqWidth) {
  
          final int halfHeight = height / 2;
          final int halfWidth = width / 2;
  
          // Calculate the largest inSampleSize value that is a power of 2 and keeps both
          // height and width larger than the requested height and width.
          while ((halfHeight / inSampleSize) &gt; reqHeight
                  &amp;&amp; (halfWidth / inSampleSize) &gt; reqWidth) {
              inSampleSize *= 2;
          }
      }
      return inSampleSize;
  }
  </code></pre>
  
  <p>xml layout</p>
  
  <pre><code>&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          &gt;
      &lt;ImageView android:id="@+id/ivBackground"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:scaleType="centerCrop"/&gt;
  
      &lt;android.support.v4.view.ViewPager
  
          android:id="@+id/pager"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          tools:context=".MainPage"
           /&gt;
  </code></pre>