Gerar Imagem

13 respostas
D

Olá Pessoal !

To com um software que o usuário coloca elementos de tela na tela, simulando fazer um layout de programa.
Gostaria de gerar uma imagem da tela que o usuário desenvolveu, alguém sabe que método ou classe do java gera imagem ??

Ou alguém sabe algum exemplo

Valeu

13 Respostas

A

Você precisa tirar uma screenshot?

Se for só pra gerar uma imagem, dá pra usar uma combinação de BufferedImage com ImageIO. Algo do tipo

ImageIO.write(getImagem(), "png", new File("C:/NovaImagem.png"));

// ...

private BufferedImage getImagem() {
    return imagemDoCliente;
}
D

Blz, obrigado, você acha que consigo varre um JFrame onde ter todos os elementos e gerar a imagem, ou não precisa, ele gera a imagem de tudo que tiver no Frame sem varrê-lo ?? Pois o cliente jogará todos os elementos na tela, e eu terei que gerar a imagem com tudo o que tiver nesse Painel

L

Como esta fazendo isto? geralmente ira usar um panel ou jpanel la tem um metodo paint(Graphics g) este metodo deve ser sobscrito e td que for feito sera desenhado nele usando a instancia de graphic com este graphic vc pode gerar a imagem de toda a area do panel, salva-la e jogar em um arquivo…

D

Valeu, muito show, talvez você tem algum exemplo ou algum código para eu poder ter uma idéia desse código pois nunca usei.

Valeu

L

http://www.java2s.com/Code/Java/2D-Graphics-GUI/ImagePanel.htm

mas invés do ImageIcon vc vai usar no seu caso um BufferedImage pois vai precisar deste para salvar e carregar a imagem com o ImageIO.
E invés de sobescrever o paintComponent neste caso vai usar o paint.

D

Valeu amigo, vou te alugar só mais uma vez, preciso pegar os elementos, como botão, grades, JTextFiel, etc, etc, que estaria dentro JPainel. Onde encaixaria e Jpainel no código que me sugeriu.

Valeu

V

Peraí vc quer é tirar um Screenshot da sua aplicação?

Nesse caso, use o método createScreenCapture da classe Robot.

D

Na verdade não é de toda aplicação é só da tela que o usuário projetar

É um software de prototipação de interfaces, quero gerar a imagem somente do que o cliente colocar na tela de montagem no meio, isso tudo está dentro de um JPanel

Valeu

V

O método que eu citei permite que vc dê as coordenadas da área onde o screenshot será dado.
Outra forma de fazer é criar um bufferedImage, e chamar o paint do painel sobre o objeto Graphics dela.

BufferedImage img = new BufferedImage(800, 600, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = img.createGraphics();
seuPainel.paint(g2d);
g2d.dispose();

ImageIO.write(img, "png", new File("suaImagem.png"));
D

beleza amigo, então usando o bufferedImagem, lá onde diz seuPainel eu colocaria o nome do meu painel ?? tenho que fazer algum import expecífico ??

E usando aquele do Screenshot, ficaria o código, como coloaria as coordenadas, para pegar só o que necessito.

Valeu, muito obrigado

V

Sim, coloca o nome do seu painel mesmo. Só precisa importar o BufferedImage e o Graphics2D, mas isso a IDE faz pra vc (são arquivos do próprio java).

D

SHow de bola muito obrigado !

A ultima agora se eu fosse usar createScreenCapture
como capturaria a tela como colocaria as coordenadas, para pegar só a parte da tela que necessito ??

Valeu, muito obrigado

Diogo

V

Você faria algo assim:

Point topLeft = new Point(seuPainel.getBounds().getMinX(), seuPainel.getBounds().getMinY());
SwingUtilities.convertPointToScreen(topLeft);
BufferedImage img = new Robot().createScreenCapture(new Rectangle(topLeft, painel.getBounds().getSize()));

ImageIO.write(img, "png", new File("suaImagem.png"));

PS: Uma boa lida no javadoc já teria respondido sua dúvida.

Criado 10 de janeiro de 2011
Ultima resposta 10 de jan. de 2011
Respostas 13
Participantes 4