Zoom em imagem

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. :confused:

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…