Boa tarde a todos,
To criando esse tópico para ver se alguém da uma explicada de como funciona a questão do zoom em imagens e de como fazer essa função, se tem modos diferentes de fazer.
Quem souber algo sobre esse assunto posta aqui para poder ta passando pro pessoal.
Você tem uma imagem na web, quando o usuário clicar na imagem com a função de zoom in/out, será verificado o ponto X e Y da onde o usuário clicou.
Apartir desses dois pontos, de alguma maneira se pega essa imagem nesse ponto e redesenha ela maior ou menor.
Seria algo desse tipo? Será que alguem poderia me responder se ta certo isso?
E se tiver alguém tem como me dar uma luz de como fazer isso.
Eu consigo pegar o ponto x e y da onde eu cliquei na imagem. O que eu nao to conseguindo é imaginar como eu vou redesenhar a imagem naquele ponto aumentando ou diminuindo o tamanho dela.
Voce tem o AffineTransform da classe Graphics2D para fazer isso.
Ou então simplesmente recortar o Graphics e desenhar em uma area maior ou entao pegar tudo e desenhar em uma area menor. Mas desse jeito voce vai ter muita perda de qualidade.
Mark_Ameba, to tentando usar o AffineTransform aqui.
Já vi que com ele consigo mudar a escala, o que faz ele aproximar a imagem.
Mas é nessa escala que eu devo colocar o X e Y do clique do mouse?
E como usar um AffineTransform com uma BufferedImage?
Mesmo eu usando uma imagem que ta no meu computador???
Dá uma olhada no meu código e me fala qq eu tenho que fazer pq não to conseguindo meesmo…
Já to a quase 3 semanas empacado nesse zoom e não me desce que isso seja tão complicado.
A ação do botão você terá que realiza-la em seu evento mouseClicked:
this.addMouseListener(
new MouseAdapter(){
public void mouseClicked(MouseEvent e){
// Chama a ação do bptão <Zoom In> passando a localização do ponteiro do mouse.
}
}
);
Certo, no meu código ta da seguinte forma, tenho essa classe que passei acima e tenho uma classe chamada Mouse, aonde ela da um implements MouseListener.
Nessa classe mouse tem os métodos mouseClicked, mousePressed, etc.
Como vcs viram no meu código acima, tenho um objeto da classe mouse e meu JImagePanel ta ouvindo as funções do mouse.
(nesse código acima coloquei que o JPanelSul tbm ouve, mas era só para fazer um teste aqui.)
Então quando eu clico na imagem que ta carregada nesse meu JImagePanel, ele me passa as informações de X e Y.
A função desse botão ZoomIn ainda não ta desenvolvida hehehe…
Esse botão eu criei pra fazer da seguinte forma. Quando eu clicar nele, o ponteiro do mouse vai virar uma lupa e só quando o usuário clicar no mapa que da o zoom.
Vou criar o botão de Zoom Out depois tbm, mas por enquanto tenho que descobrir como dar o zoom nos pontos X e Y.
Enfim…
O que ta faltando é saber essa função do botão zoomIn, de clicar nele e só dar o zoom quando o usuário clicar no mapa.
Alguém sabe dizer juntar AffineTransform com os pontos X e Y do clique do mouse???
Bom, já faz muito tempo que eu to tentando e realmente não to conseguindo fazer uma função Zoom.
Fora esse problema, eu tbm tenho que desenvolver a função Pan(arrastar a imagem com o efeito do zoom) e tbm fazer uma função de consulta de acordo com a posição do meu mapa.
São três funções que no começo pareciam simples de ser desenvolvidas, mas que com o tempo, para mim, vi que eram funções complicadas de resolver.
Se alguém puder me ajudar passando um código de função zoom ou de pan, eu agradeceria muito. EU REALMENTE TO PRECISANDO, só que não to conseguindo desenvolver.
Depois de um bom tempo, finalmente eu consegui.
Insistindo um pouco vi que não era nada complicado e passava de uma coisa bem simples.
Eu possuo um Objeto da classe Rectangle e esse objeto eu utilizava no meu desenho.
Entre os métodos dessa classe, se encontra o método grow(). Apenas com esse método consegui desenvolver minha função de Zoom sem perder qualidade da imagem.
Aproveitando tbm, com o mesmo objeto fiz a função Pan (mover a imagem que está com o zoom arrastando o mouse) usando o setLocation().
Quem tiver alguma dúvida sobre como usar o grow() e o setLocation(), perguntem ai que posso tentar ajudar.