Thumbnails

Galera,

Alguém sabe uma maneira de criar thumbnails de uma forma que não utilize tanta memória, tenho uma pasta com 100 imagens, carrego as imagens originais e na hora de mostrar na tela desenho ela em tamanho menor, só que o fato de ter carregado a imagem original já ocupa memória, pra carregar as 100 imagens o programa está utilizando 170MB de memória, ouvi dizer que na hora de criar os thumbnails você tem que carregar a imagem com uma qualidade inferior à original para que não ocupe tanta memória, algo desse tipo, pesquisei sobre isso e não consegui encontrar nada de bom… se alguém tiver alguma dica já ajuda…

Obs: a aplicação é swing/desktop.

abraços…

[duplicado]

[quote=danilogga]Galera,

Alguém sabe uma maneira de criar thumbnails de uma forma que não utilize tanta memória, tenho uma pasta com 100 imagens, carrego as imagens originais e na hora de mostrar na tela desenho ela em tamanho menor, só que o fato de ter carregado a imagem original já ocupa memória, pra carregar as 100 imagens o programa está utilizando 170MB de memória, ouvi dizer que na hora de criar os thumbnails você tem que carregar a imagem com uma qualidade inferior à original para que não ocupe tanta memória, algo desse tipo, pesquisei sobre isso e não consegui encontrar nada de bom… se alguém tiver alguma dica já ajuda…

.[/quote]

O problema não é que sejam 100 imagens mas sim que vc mantem as 100 na memoria.
No fim do seu loop de processamento dos arquivos sempre faça o dispose da image e/ou dos graphics que estiver usando.
Isso liberta recursos. Só por segurança faça image= null; para ter a certeza.
Apenas uma imagens de cada vez precisa estar carregada.

Para a conversão use uma BufferedImage e AffineTransformation para fazer a redução de escala.
Depois de salvar a Bufferedimage para arquivo , faça dispose dela tb.

[quote=sergiotaborda][quote=danilogga]Galera,

Alguém sabe uma maneira de criar thumbnails de uma forma que não utilize tanta memória, tenho uma pasta com 100 imagens, carrego as imagens originais e na hora de mostrar na tela desenho ela em tamanho menor, só que o fato de ter carregado a imagem original já ocupa memória, pra carregar as 100 imagens o programa está utilizando 170MB de memória, ouvi dizer que na hora de criar os thumbnails você tem que carregar a imagem com uma qualidade inferior à original para que não ocupe tanta memória, algo desse tipo, pesquisei sobre isso e não consegui encontrar nada de bom… se alguém tiver alguma dica já ajuda…

.[/quote]

O problema não é que sejam 100 imagens mas sim que vc mantem as 100 na memoria.
No fim do seu loop de processamento dos arquivos sempre faça o dispose da image e/ou dos graphics que estiver usando.
Isso liberta recursos. Só por segurança faça image= null; para ter a certeza.
Apenas uma imagens de cada vez precisa estar carregada.

Para a conversão use uma BufferedImage e AffineTransformation para fazer a redução de escala.
Depois de salvar a Bufferedimage para arquivo , faça dispose dela tb.[/quote]

o problema é que não estou salvando em arquivo as imagens em tamanhos menores, eu quero mostrar na tela e quando o cara clicar na imagem pequena eu mostro ela em tamanho real, fiz o teste colocando null em alguns objetos que eu carreguei e que não vou precisar mais, só que não deu muita diferença naum, o problema é mesmo que as 100 imagens estão carregadas ao mesmo tempo, se tivesse um jeito de já carregar as imagens em tamanho reduzido talvez diminuiria a memória… mas de qualquer forma valeu pela dica…

Se o seu programa é um especie de galeria carregue apenas as imagens que o usuário pode ver (paginação)

Outra opção é pintar as imagens individuais e reduzidas em uma imagem única e depois apenas mover esta imagem com scroll.

Teriamos uma imagem maior mas apenas um. Image consome muitos recursos e mantém uma ´serie de objetos agregados. Podemos diminuir isso com uma unica imagem. É claro que para isso dar certo o componente de navegação tem que ser bem mais inteligente porque terá que simular que são imagens individuias, quando na realidade não são.