2014-09-07 3 views
2

Мне нужно изменить размер/уменьшить изображение, которое я выбираю из своей галереи, прежде чем оно будет возвращено с BitmapFactory.decodeStream(imagestream). Он выбрасывает OutOfMemory Exception, когда я выбрал для большого изображения. Как изменить размер изображения до его возврата из decodeStream?Android - изменение размера изображения до того, как BitmapFactory.decodeStream вернет его

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == IMAGE_PICKER_SELECT 
       && resultCode == Activity.RESULT_OK) { 
      Uri selectedImage = data.getData(); 
      InputStream imageStream = null; 
      try { 
       imageStream = getContentResolver().openInputStream(
         selectedImage); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } 
      Bitmap bitmap = BitmapFactory.decodeStream(imageStream); 
      imgV.setImageBitmap(bitmap); 
      // sb = bitmap; 
      // imgSelected = true; 
      selectedImage = null; 
      imageStream = null; 
      bitmap = null; 
     } 
    } 
+0

Приведи [этот вопрос SO] (http://stackoverflow.com/questions/10413659/how-to-resize-image-in-android). –

+0

@Sash_KP: ссылка, которую вы указали, имеет дело с растровым изображением, но у ОП возникает проблема декодирования растрового изображения, и именно по этой причине он хочет изменить размер. 'Как я могу изменить размер изображения до его возврата из decodeStream', он хочет изменить размер с помощью' imagestream' –

ответ

3

Попробуй так

BitmapFactory.Options options=new BitmapFactory.Options(); 
options.inSampleSize=2; //decrease decoded image 
Bitmap bitmap=BitmapFactory.decodeStream(is, null, options); 
bitmap.compress(Bitmap.CompressFormat.JPEG, 70, fos); 
+0

Что такое fos в .compress, это необходимо? – ninjaxelite

+0

Он сжимает ваше растровое изображение в формате JPEG –

+0

ok, но откуда взять эту переменную? – ninjaxelite