Olá, galera, sou novo aqui no fórum e já estou com dúvidas :(.
creio eu que minha dúvida é um pouco simples, porém não consegui saná-la com alguns tópicos aqui do forum.
Bom, tenho uma classe que cria uma janela e nessa janela eu escrevo algo a mao livre, gostaria de saber como faço para salvar essa imagem no final do desenho, que é quando o usuário solta o clique do mouse.
o código que está sendo utilizado é esse:
public class Janela extends JFrame implements MouseMotionListener, MouseListener {
/****/privateArrayList<Integer>x;privateArrayList<Integer>y;publicJanela(){setTitle("Classificador de Dígitos");x=newArrayList<>();y=newArrayList<>();setBackground(Color.BLACK);
importjava.awt.BorderLayout;importjava.awt.Color;importjava.awt.Dimension;importjava.awt.Graphics;importjava.awt.Point;importjava.awt.event.MouseAdapter;importjava.awt.event.MouseEvent;importjava.awt.image.BufferedImage;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.util.ArrayList;importjava.util.List;importjavax.imageio.ImageIO;importjavax.swing.JButton;importjavax.swing.JFileChooser;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.UIManager;publicclassJanelaextendsJFrame{publicstaticvoidmain(String[]args){try{UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());}catch(Throwablet){t.printStackTrace();}try{Janelajanela=newJanela();janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);janela.setVisible(true);}catch(Throwablet){t.printStackTrace();}}privateList<Point>pontos=newArrayList<>();privatefinalJPanelareaDesenho=newJPanel(){@OverrideprotectedvoidpaintComponent(Graphicsg){g.setColor(Color.BLACK);Dimensiond=getSize();g.fillRect(0,0,d.width,d.height);g.setColor(Color.WHITE);for(inti=1;i<pontos.size();i++){Pointp1=pontos.get(i-1);Pointp2=pontos.get(i);g.drawLine(p1.x,p1.y,p2.x,p2.y);}}};privatefinalMouseAdapterlistener=newMouseAdapter(){@OverridepublicvoidmouseDragged(MouseEvente){adicionarPonto(e);}@OverridepublicvoidmousePressed(MouseEvente){adicionarPonto(e);}@OverridepublicvoidmouseReleased(MouseEvente){adicionarPonto(e);}};privatefinalJFileChooserfileChooser=newJFileChooser(System.getProperty("user.dir"));publicJanela(){setTitle("Classificador de Dígitos");setLayout(newBorderLayout());setSize(200,200);JButtonbotaoSalvar=newJButton("Salvar imagem");botaoSalvar.addActionListener(event->salvarImagem());areaDesenho.addMouseListener(listener);areaDesenho.addMouseMotionListener(listener);add(areaDesenho,BorderLayout.CENTER);add(botaoSalvar,BorderLayout.SOUTH);}privatevoidadicionarPonto(MouseEvente){pontos.add(newPoint(e.getX(),e.getY()));areaDesenho.repaint();}privatevoidsalvarImagem(){intoption=fileChooser.showSaveDialog(this);if(option==JFileChooser.APPROVE_OPTION){try{Filearquivo=fileChooser.getSelectedFile();intlargura=areaDesenho.getWidth();intaltura=areaDesenho.getHeight();BufferedImageimagem=newBufferedImage(largura,altura,BufferedImage.TYPE_INT_RGB);Graphicsgraphics=imagem.getGraphics();areaDesenho.paint(graphics);ImageIO.write(imagem,"PNG",newFileOutputStream(arquivo));}catch(IOExceptione){e.printStackTrace();}}}}
W
Wagnerusth
Muito obrigado pela dica staroski, ontem de madrugada trabalhando um pouco eu consegui desenvolver o que eu queria, só que não sei se é a melhor forma, porém está aqui o código.
@author wnunes
*/
public class Janela extends JFrame implements MouseMotionListener, MouseListener {
privateArrayList<Integer>x;privateArrayList<Integer>y;Janelateste;publicJanela(){
setTitle("Classificador de Dígitos");x=newArrayList<>();y=newArrayList<>();setBackground(Color.BLACK);
try{ImageIO.write(img,"png",newFile("desenho.png"));BufferedImageimagem=null;try{imagem=ImageIO.read(newFile("desenho.png"));System.out.println("ok");}catch(IOExceptionex){}BufferedImagenew_img=newBufferedImage(28,28,BufferedImage.TYPE_INT_RGB);Graphics2Dg2d=new_img.createGraphics();g2d.drawImage(imagem,0,0,28,28,null);ImageIO.write(new_img,"png",newFile("desenho1.png"));System.out.println("Terminou o desenho! Deve classificar a imagem");}catch(IOExceptionioe){System.out.println(ioe.getMessage());}}