Olá, estou tentando aumentar e diminuir uma imagem usando as teclas up e down, mas não estou conseguindo…
Está carregando, mas não acontece nada com a imagem.
Eu transformei sua applet em um JFrame, mas a idéia é a mesma. A alteração importante é a seguinte:
publicvoidpaint(Graphicsg){if(image==null)init();//esta linha adicionei pois o método init não é chamado no jframe como é numa appletGraphics2Dg2d=(Graphics2D)g;AffineTransformtrans=newAffineTransform();g2d.setColor(Color.BLACK);g2d.fillRect(0,0,getSize().width,getSize().height);//trans.setTransform(identity); -- comentei aquitrans.scale(1+x*0.1,1+x*0.1);//a escala deve ser modificada. Ela estava muito grande antes. agora o tamanho da imagem é alterado de 10 em 10% para mais ou para menosg2d.setTransform(trans);g2d.drawImage(image,100,100,this);}
segue o código completo:
importjava.awt.Color;importjava.awt.Dimension;importjava.awt.Graphics;importjava.awt.Graphics2D;importjava.awt.Image;importjava.awt.Rectangle;importjava.awt.event.KeyEvent;importjava.awt.event.KeyListener;importjava.awt.geom.AffineTransform;importjava.io.IOException;importjava.net.URL;importjavax.imageio.ImageIO;importjavax.swing.JFrame;importjavax.swing.SwingUtilities;publicclassDrawImage2extendsJFrameimplementsKeyListener{privateImageimage;privateintx=0;AffineTransformidentity=newAffineTransform();publicDrawImage2(){}publicURLgetURL(StringfileName){URLurl=null;try{url=this.getClass().getResource(fileName);}catch(Exceptione){}returnurl;}publicvoidinit(){try{image=ImageIO.read(getURL("asteroid2.jpg"));}catch(IOExceptione){// TODO Auto-generated catch blocke.printStackTrace();}addKeyListener(this);}publicvoidpaint(Graphicsg){if(image==null)init();Graphics2Dg2d=(Graphics2D)g;AffineTransformtrans=newAffineTransform();g2d.setColor(Color.BLACK);g2d.fillRect(0,0,getSize().width,getSize().height);//trans.setTransform(identity);trans.scale(1+x*0.1,1+x*0.1);g2d.setTransform(trans);g2d.drawImage(image,100,100,this);}publicvoidkeyReleased(KeyEventk){}publicvoidkeyTyped(KeyEventk){}publicvoidkeyPressed(KeyEventk){switch(k.getKeyCode()){caseKeyEvent.VK_UP:x++;repaint();break;caseKeyEvent.VK_DOWN:x--;repaint();break;}}publicstaticvoidmain(String[]args){SwingUtilities.invokeLater(newRunnable(){publicvoidrun(){JFrameframe=newDrawImage2();frame.setBounds(newRectangle(newDimension(400,400)));frame.setVisible(true);}});}}
sammaraAdriana
Agora deu tudo certinho.
Valeu Rogério, muito obrigada pela força.
ViniGodoy
Só uma pequena correção. É importante copiar o contexto gráfico, antes de altera-lo:
publicvoidpaint(Graphicsg){if(image==null)init();Graphics2Dg2d=(Graphics2D)g.create();//O create faz a cópia do GraphicsAffineTransformtrans=newAffineTransform();g2d.setColor(Color.BLACK);g2d.fillRect(0,0,getSize().width,getSize().height);//trans.setTransform(identity); trans.scale(1+x*0.1,1+x*0.1);g2d.setTransform(trans);g2d.drawImage(image,100,100,this);g2d.dispose();//Aqui vc libera a cópia}
Isso evita que sua transformação tenha impacto em locais onde não devia, como na pintura de componentes que venham após esse.
rogeriopaguilar
Nossa, faz tanto tempo que não fazia código om Java2D que nem lembrava mais disso. Valeu pela correção.