Ajuda por favor - Exportando para mapa de bits

Olá amigos, estou fazendo um editor gráfico para trabalho da faculdade e uma das exigências do professor é que a imagem do meu panel de desenho possa ser exportada para um mapa de bits. Como fazer isso?? Existe algum método do JPanel que faça isso? Qual seria esse método? Por favor preciso mto de ajuda!

Abraço a todos!

Faça o desenho sobre um BufferedImage. Esse será pintado no JPanel.

Depois, use o método ImageIO.write para gravar o BufferedImage no formato que quiser.

Ok Vini, consegui fazer o BufferedImage ser exportado, mas o arquivo fica sempre vazio. Eu preciso adicionar o BufferedImage no JPanel de alguma maneira? eu apenas instancei o BufferedImage e depois usei o ImageIO.write. Precisa ser feito mais alguma coisa? Muito obrigado!

Sim.

Você irá usar o Graphics do BufferedImage, não do JPanel, para pintar.

  1. Renomeie o seu método paintComponent para paintInImage;

  2. Crie um novo paintComponent, com o seguinte código:

[code]public void paintComponent(Graphics g) {
//Pinta sobre a imagem, não sobre o painel
Graphics2D g2d = bufferedImage.create();
paintInImage(g2d);
g2d.dispose();

//Pinta a imagem no painel
g.clearRect(0,0, getWidth(), getHeigth());
g.drawImage(bufferedImage, 0, 0, null)

}[/code]

Note que agora o desenho está sendo feito sobre a imagem, não sobre o painel. A imagem final, desenhada é que é pintada no painel.
Como a imagem está desenhada, o seu ImageIO.write deve passar a desenhar corretamente.

Vini, ok, o editor agora está desenhando os gráficos no BufferedImage pra depois desenhar no JPanel. isso tá blz… mas o meu arquivo continua vazio depois que eu mando exportar.
na minha classe que extende de JFrame, tá assim:

private static BufferedImage image = new BufferedImage(900,900,BufferedImage.TYPE_INT_RGB);
private File file = new File("c:\\tmp\\teste.jpg");

// lá embaixo, quando o cara manda exportar...

try{
    ImageIO.write(image, ".jpg", file);
}catch(IOException e){
    e.printStackTrace();
}

tá desse jeito Vini. alguma idéia de pq nao esteja funcionando?

Posta o código todo nos anexos aqui.