Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

problema com as imagens

Ola pessoal, Estou enfrentando um grave problema no meu Android studio. Estou criando uma aplicacao que se resume em um "maquina do tempo", Onde eu guardo varias imagens e no futuro, as pessoas possam olhar e lembrar dos velhos tempos. O problema é que o aplicativo esta parando de funcionar, bem na hora que eu clico na Activity onde estão localizadas as imagens. Vou compartilhar aqui o erro que foi apresentado durante os meus testes que consistiram em compactar a foto.

Process: br.com.fmolina.bibliotecameme, PID: 30124
java.lang.RuntimeException: Canvas: trying to draw too large(144000000bytes) bitmap.

Obs: Testei o programa com apenas 2 fotos, e ele deu o mesmo problema, o meu celular tem 2GB RAM e tem uns 11GB restantes no HD

Abraços

3 respostas

Oi Felipe, não sou especialista,mas acho que você está tentando carregar uma imagem muito grande para a memória e aí não ta rolando... Talvez diminuir a qualidade antes.

solução!

Olá Felipe!

O sistema Android tem uma forma particular de trabalhar com imagens. Ele não considera o tamanho em KB ou MB real da imagem , na verdade ele faz um cálculo do espaço necessário em memória baseado no tamanho em pixels.

Isso acontece porque antes de salvar ou mostrar a imagem, o Android precisa primeiro saber se tem espaço para isso, então ele faz esse cálculo e reserva esse espaço - e mesmo que a imagem não ocupe todo o espaço reservado, ele não é liberado, fica ali reservado para a imagem e é quando temos erros de falta de espaço.

Neste cálculo, leva-se em consideração o tamanho da imagem em pixels (base x altura), e para o sistema cada pixel tem o tamanho de 4 bytes (cada pixel é lido como um ARGB, logo, 1 pixel para cada uma dessas camadas). Depois, divide-se por potências de 1024 para saber o tamanho da imagem em bytes (1024 para KB, 1024^2 para MB, 1024^3 para GB, 1024^4 para TB)

Vamos a um exemplo!

Digamos que você tenha uma foto 512 x 384.

Logo, 512 * 384 = 196608 pixels.

Cada pixel ocupa 4 bytes, então 196608 * 4 = 786432 bytes.

  • Para saber o tamanho em MB, dividimos pela potência 2 de 1024, ou seja,

    786432/(1024 * 1024) = 0,75MB

  • Para saber o tamanho em KB, dividimos pela potência 1 de 1024, ou seja,

    786432/(1024) = 768 KB

Ou seja, mesmo que sua imagem tenha o tamanho de 200KB, o sistema vai reservar 768KB para ela e todo o espaço extra vai constar como "usado".

Como resolver isso? Diminuindo o tamanho base x altura das imagens. :/

E a câmera do aparelho? As fotos tiradas pela câmera do aparelho tendem a ser otimizadas, ou seja, a câmera é configurada para tirar as fotos do tamanho exato que será reservado em memória, por isso conseguimos armazenar várias fotos no celular, sem problemas (e por isso as fotos tiradas com celular, quando jogamos no computador, são tão pequenininhas).

Espero ter ajudado!!!

Ola, obrigado pela ajuda, meu problema era simples, mas meio chato de se achar, como eu estava fazendo uma galeria de fotos eu procurei diminuir todas as fotos, e mesmo assim continuava com o mesmo problema :/

foi então que eu percebi que os ícones também eram imagens e dai eu descobri o erro.... o ícone era mais de 2000 px X 2000px

um erro causado pela minha falta de atenção :( mas agora esta tudo certo

Muito obrigado a Tais batuira e ao Alberto Souza :)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software