Bom dia, galera da xícara.
Tenho uma aplicação swing que gera algumas imagens (.gif) e as exibe em abas. O problema é que, as vezes, essa imagem é muito grande ou muito pequena, então tenho que diminui-la ou aumenta-la. Já achei várias soluções para isso, porém o problema nelas é que elas realmente dimensionam a imagem. Eu não queria fazer isso. Queria deixar a imagem original (sem criar outra) apenas aumentando ou diminuindo o zoom.
Alguém sabe alguma forma de fazer isso?
Desde já, obrigado!
jorgefrancisco, você vai precisar criar o objeto que irá armazenar a nova imagem de qualquer jeito. Ou seja, de qualquer forma, não vai ficar muito bom. Eu fiz a implementação disso uma vez para exibir as miniaturas de imagens em um grid de uma JTable. Não ficou lento e olha que eram muitas imagens. A única forma que eu conheço é esta mesmo. Existe uma implementação de exemplo no site da SUN que é mais elegante, mas é só para Java 6. Caso você não esteja utilizando java 6, dê uma olhada nestes métodos: http://www.computing.net/answers/programming/thumbnail-images-in-java/11589.html
Olá, Fábio.
Esse esquema de ficar criando uma nova imagem a cada mudança de zoom pra mim não seria uma boa, já que durante a utilização da aplicação o usuário pode mudar o zoom várias vezes para a mesma a imagem. Com isso, essa imagem vai distorcendo cada vez mais e perde a qualidade rapidamente. Por isso estou em busca de alguma solução que não modifique a imagem propriamente dita. Certo?
Muito obrigado pela atenção!
Abraços!
int wDest = 250;//largura
int hDest = 250;//altura
BufferedImage src = //Sua imagem
BufferedImage dest = new BufferedImage(wDest,hDest,BufferedImage.TYPE_INT_RGB);//250x250 o tamanho da imagem que vai ficar ao final.
Graphics2D g = dest.createGraphics();
AffineTransform at = AffineTransform.getScaleInstance(
(double)wDest/src.getWidth(),
(double)hDest/src.getHeight());
g.drawRenderedImage(src,at);
//dest agora tem 250x250 pixels e com a imagem redimensionada.
Do modo que passei voce pode depois só ficar desenhando a imagem original e modificando o AffineTransform e o tamanho do destino.
Entendo. Na época que eu precisei, eu utilizei dessa forma mesmo. Infelizmente, não poderei te ajudar. 
Se o problema for a qualidade da imagem após o zoom, vc poderia tentar utilizar SVG; o chato disto é ter que ficar convertendo o tipo da imagem.
flws
Mark_Ameba
Utilzei sua solução e acho que atendeu aos meus requisitos! =)
Muito obrigado a todos!
e quanto a qualidade?
heap space?
to com uma imagem de 26kx6k pixels…
dá heap space de tudo que é jeito…
tentei até dividir em partes e dar zoom em cada parte (porque o objetivo é somente dar zoomOut)…
funciona muito bem, até a hora de juntar as partes da imagem e dar Java Heap Space de novo…
caso alguém tenha alguma idéia…