Criando um "Mini Paint" em Java

5 respostas
Julio_Fontes

Olá. Estou fazendo um trabalho para a faculdade onde preciso criar um programa de criação e edição de imagens parecido com o Paint. Os pré-requisitos são: desenhar com o Mouse, desenhar com o teclado (onde digitando números de 0-7, imprime na tela uma reta em uma determinada direção, dependendo do número digitado), e girar a imagem depois de pronta.
Quanto a desenhar com o mouse e desenhar com o teclado, eu consegui desenrolar e criei um programa utilizando o método paint(Graphics g), da biblioteca Graphics para o teclado, e criei uma classe para desenhar com o Mouse. Até aí sem problemas. A grande dúvida é com relação a edição dessas imagens. Alguém conhece algum jeito de girar a imagem resultante? eu encontrei alguns métodos, mas nenhum que seja compatível com a função paint() (A maioria só serve para imagens do tipo Image ou BufferedImage).
Quero saber como resolver isso. É possível editar a imagem direto com a função paint() ? Se não, é possível acessar a o desenho pelo código (Já que paint() é uma função do tipo void que não retorna nada) e converte-la para Image ou BufferedImage? Ou vocês acham que existe uma outra forma de desenvolver esse programa?

Grato desde já.

5 Respostas

rodriguesabner

Quando eu estava precisando de algo nesse sentido eu procurei esse projeto abaixo, no final consegui fazer algo bem legal:
image

https://github.com/haxxorsid/swing-paint-application.

staroski

Eu gosto muito dos fontes do Jerry Huxtable, dê uma olhada: http://www.jhlabs.com/ip/index.html

ViniGodoy

Oi. Seja bem-vindo ao GUJ.

A classe BufferedImage possui o método createGraphics() que retorna um objeto Graphics2D (idêntico ao que você recebe no paint do JFrame).

Minha sugestão é que vc sempre desenhe num BufferedImage e depois desenhe a imagem resultante no JFrame. Isso permite que você salve a imagem facilmente em arquivo depois, ou a manipule como um todo.

Também vale a pena seguir:
http://pontov.com.br/site/index.php/java/48-java2d

j-menezes

Bom, todas as alternativas dos colegas parece que funcionam perfeitamente.

Sim, a outra forma de fazer isso é atraves do javaFX.

Mas, pintar diretamente numa unica BufferedImage será ruim na hora de edição.

A solução pra isso é ter os Shapes independentes e eles estarem vinculados a um Node tipo o Pane

Assim, toda vez que você editar seu objeto shape ele será sobreposto na Pane automaticamente e na hora de salvar você poderá pegar cada propriedade do objeto shape e salva-lo em json, xml, txt, bd enfim.

Bons Codigos

ViniGodoy

Só cuidado que esse é o princípio de um editor vetorial, como o Corel, e não de um editor baseado em raster, como o paint.

É um exercício até mais interessante, mas pode ser que desvie do objetivo do trabalho proposto pelo professor.

Criado 1 de outubro de 2019
Ultima resposta 2 de out. de 2019
Respostas 5
Participantes 5