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á.
Quando eu estava precisando de algo nesse sentido eu procurei esse projeto abaixo, no final consegui fazer algo bem legal:
https://github.com/haxxorsid/swing-paint-application.
Eu gosto muito dos fontes do Jerry Huxtable, dê uma olhada: http://www.jhlabs.com/ip/index.html
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
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
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.