Pergunta

Eu estava tentando fazer um aplicativo que também tinha a instalação para deixar o usuário selecionar papel de parede que ele gostaria de definir. Eu consegui isso chamando a galeria de intenção. Depois que o usuário selecionar uma imagem específica, o caminho dos dados da imagem é retornado para mim, que eu visualizo para o usuário, configurando a imagem em um ImageView.

O problema surge quando o tamanho da imagem (e/ou resolução) é maior do que o Android espera. Isso resulta em falha do meu módulo.

E como se isso não bastasse, o usuário tenta selecionar algum outro papel de parede (e no meu caso de teste o "outro" papel de parede também era de tamanho> 700kb), o aplicativo trava com a "outOfMemoryException" ...

Helppp me aqui pessoal !!!

Para a intenção da galeria, eu uso:

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"),SELECT_IMAGE);

Para definir o papel de parede que eu uso:

InputStream is = getContentResolver().openInputStream(Uri.parse(uri_returned_from_intent)); 
Bitmap bgImage = BitmapFactory.decodeStream(is);//OutOfMemory error thrown here
setWallpaper(bgImage);

Então, eu tenho 2 problemas para lidar:

  1. Como cortar a imagem antes de defini -la como papel de parede ...
  2. Não consigo entender y outofMemoryException é jogado, porque nenhum dos tamanhos de imagem excede mesmo 1 MB ... e acho que o orçamento da VM no caso de N1 é 24 MB se m não é enganado ...
Foi útil?

Solução

Você deve decodificar com a opção Insamplesize para reduzir o consumo de memória.

Outra opção InjustDecodeBounds pode ajudá -lo a encontrar valor correto de insampleamento

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top