2016-03-09 2 views
2

Я создаю приложение для загрузки изображений из галереи, пока оно хорошо работает для некоторых изображений, но некоторые изображения я получаю сообщение «Растровое изображение слишком большое, чтобы быть загруженным в текстуру (2988x5312 , max = 4096x4096) "изображение слишком большое для отображения

вот код для отображения растрового изображения.

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) 
     { 
      Uri filePath = data.getData(); 
      try { 
       bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath); 
       Picasso.with(MainActivity.this).load(filePath).error(R.drawable.smile).into(imageView1); 
      } catch (IOException e) 
      { 
       e.printStackTrace(); 
      } 
     } 
    } 

что я могу сделать, чтобы исправить это? изменить размер изображения? или проверить, слишком ли велико изображение? и какова резолюция, приемлемая для изображений здесь?

+0

изменить размер изображения, которое даст меньше памяти, а также не даст вам ошибку bitmapoutofmemory в вашем проекте. Если вы перемасштабируете его с сохранением пропорций, он не будет выглядеть размытым. –

ответ

3

Вы ответили самим, да, вы должны масштабировать свое изображение, с помощью picasso это легко, в любом случае проверьте this issue и ответ, чтобы узнать, как получить максимальный размер текстуры, поддерживаемый устройством.

Проверьте this link, чтобы узнать, как копировать изображения с помощью пикассо.

+1

ваша ссылка была очень полезной, сделал трюк для меня thx;) – jack

+1

В рад это узнать! –

1

У Пикассо есть достаточно возможностей управления кешем. вы можете изменить размер изображения,

Picasso 
.with(context) 
.load(YOUR IMAGE PATH) 
.resize(600, 200) // resizes the image to these dimensions (in pixel). does not respect aspect ratio 
.into(imageView); 

или вы можете масштабировать изображение вниз.

Picasso 
.with(context) 
.load(YOUR IMAGE PATH]) 
.resize(1920, 1080) // your desire ratio 
.onlyScaleDown() // the image will only be resized if it's bigger than 6000x2000 pixels. 
.into(imageView); 
+0

также добавил .centerinside() ...., чтобы сохранить соотношение сторон ... thx – jack