2017-09-29 11 views
0

J'écris un programme où chaque ligne de ma peinture dépend de la peinture de la ligne précédente. Comme la nouvelle peinture nécessite les valeurs RVB de la ligne précédente aux coordonnées spécifiées, je convertis le JPanel en BufferedImage et ensuite j'utilise getRGB() pour obtenir la couleur.Dessin sur une image existante

J'ai un problème avec la poursuite de l'image initiale lorsque je fais l'image pour la nouvelle ligne.

Le code suivant ne TRAVAiL pas

@Override 
    public void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 
     if(line==1) 
     { 
      g.setColor(Color.WHITE); 
      g.fillRect(0,0,100,100); 
      g.setColor(Color.RED); 
      g.fillRect(25,25,20,20); 
     } 
     else if(line!=1) 
     { 
      g=img.getGraphics(); 
      g.setColor(Color.BLUE); 
      g.fillRect(50,50,25,25); 
     } 
    } 

Où ligne est une variable d'instance et img est le BufferedImage de la première ligne-

Paint_Test ob=new Paint_Test(); 
frame.add(ob); 
img=toBufferedImage(ob); 

par la ligne

g=img.getGraphics(); 

Je tente d'obtenir l'objet graphique de l'image buffered d'origine et de dessiner dessus. Au lieu de cela, tout ce que je reçois dans la sortie est un écran vide (la sortie idéale serait deux carrés, un rouge et un bleu).

S'il vous plaît laissez-moi savoir où je vais mal et comment je peux résoudre ce problème. Votre aide serait grandement appréciée.

Merci!

+1

Pour une meilleure aide plus tôt, postez un vrai [mcve], vous pouvez aussi réécrire la ligne 'else if (line! = 1)' à juste 'else' – Frakcool

Répondre

0

Il existe deux approches communes pour la peinture incrémentale:

  1. peinture à un BufferedImage puis dessiner l'image
  2. garder un ArrayList d'objets à peindre. Ensuite, vous parcourez l'ArrayList et peignez tous les objets.

Consultez Custom Painting Approaches pour plus d'informations et des exemples pratiques de chaque approche.

0

La réponse de Camickr est géniale si vous cherchez à explorer davantage le sujet. Si vous êtes à la recherche d'une solution rapide ne pas aller plus further-

Au lieu de attribuer l'objet graphique à l'image que j'aurais simplement attiré l'image-

g.drawImage(img,0,0,null); 

Cela produit le résultat souhaité.