title: Out of Memory error while loading images. [Android]
body: <p>I want to pick image from the gallery and use it in my App as Profile Picture. So far I've tried this.</p>
  
  <p>Here's my InfoGet class. The loadImagefromGallery gets called on click.</p>
  
  <pre><code> public void loadImagefromGallery(View view) {
  
    /*  Intent galleryIntent = new Intent(Intent.ACTION_PICK,
              android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
  
      startActivityForResult(galleryIntent, RESULT_LOAD);*/
      Intent gallery_Intent = new Intent(getApplicationContext(), GalleryUtil.class);
      startActivityForResult(gallery_Intent, GALLERY_ACTIVITY_CODE);
  }
  
  @Override
  public void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      if (requestCode == GALLERY_ACTIVITY_CODE) {
          if(resultCode == Activity.RESULT_OK){
           String picturePath = data.getStringExtra("picturePath");
              //perform Crop on the Image Selected from Gallery
              performCrop(picturePath);
          }
      }
  
      if (requestCode == RESULT_CROP ) {
          if(resultCode == Activity.RESULT_OK){
              Bundle extras = data.getExtras();
              Bitmap selectedBitmap = extras.getParcelable("data");
              // Set The Bitmap Data To ImageView
              pro.setImageBitmap(selectedBitmap);
              pro.setScaleType(ImageView.ScaleType.FIT_XY);
          }
      }
  }
  
  private void performCrop(String picUri) {
      try {
          //Start Crop Activity
  
          Intent cropIntent = new Intent("com.android.camera.action.CROP");
          // indicate image type and Uri
          File f = new File(picUri);
          Uri contentUri = Uri.fromFile(f);
  
          cropIntent.setDataAndType(contentUri, "image/*");
          // set crop properties
          cropIntent.putExtra("crop", "true");
          // indicate aspect of desired crop
          cropIntent.putExtra("aspectX", 1);
          cropIntent.putExtra("aspectY", 1);
          // indicate output X and Y
          cropIntent.putExtra("outputX", 280);
          cropIntent.putExtra("outputY", 280);
  
          // retrieve data on return
          cropIntent.putExtra("return-data", true);
          // start the activity - we handle returning in onActivityResult
          startActivityForResult(cropIntent, RESULT_CROP);
      }
      // respond to users whose devices do not support the crop action
      catch (ActivityNotFoundException anfe) {
          // display an error message
          String errorMessage = "your device doesn't support the crop action!";
          Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT);
          toast.show();
      }
  }
  </code></pre>
  
  <p>And here's my GalleryUtil code</p>
  
  <pre><code>public class  GalleryUtil extends Activity {
  private final static int RESULT_SELECT_IMAGE = 100;
  public static final int MEDIA_TYPE_IMAGE = 1;
  private static final String TAG = "GalleryUtil";
  
  String mCurrentPhotoPath;
  File photoFile = null;
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      try{
          //Pick Image From Gallery
          Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
          startActivityForResult(i, RESULT_SELECT_IMAGE);
      }catch(Exception e){
          e.printStackTrace();
      }
  }
  
  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
  
      switch(requestCode){
          case RESULT_SELECT_IMAGE:
  
              if (resultCode == Activity.RESULT_OK &amp;&amp; data != null &amp;&amp; data.getData() != null) {
                  try{
                      Uri selectedImage = data.getData();
                      String[] filePathColumn = {MediaStore.Images.Media.DATA };
                      Cursor cursor = getContentResolver().query(selectedImage,
                              filePathColumn, null, null, null);
                      cursor.moveToFirst();
                      int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                      String picturePath = cursor.getString(columnIndex);
                      cursor.close();
  
                      //return Image Path to the Main Activity
                      Intent returnFromGalleryIntent = new Intent();
                      returnFromGalleryIntent.putExtra("picturePath",picturePath);
                      setResult(RESULT_OK,returnFromGalleryIntent);
                      finish();
                  }catch(Exception e){
                      e.printStackTrace();
                      Intent returnFromGalleryIntent = new Intent();
                      setResult(RESULT_CANCELED, returnFromGalleryIntent);
                      finish();
                  }
              }else{
                  Log.i(TAG, "RESULT_CANCELED");
                  Intent returnFromGalleryIntent = new Intent();
                  setResult(RESULT_CANCELED, returnFromGalleryIntent);
                  finish();
              }
              break;
      }
  }
  </code></pre>
  
  <p>}</p>
  
  <p>I need help can anyone just make some changes in the existing code. I do not want to rebuild anything from scratch. I want to optimise this image picker before I release the next update. The Existing code work okay for devices with decent amount of RAM like 1GB or so.
  Please help me.
  And also explain what you did and how it works. Thanks a LOT.</p>