2009-10-16 7 views
2

J'ai mis une couleur de fond de JPanel au blanc. Cependant, lorsque je l'enregistre en JPG ou dans un autre format d'image, l'arrière-plan est noir. J'ai mis ce code TYPE_INT_ARGB mais ça ne marche pas. Comment puis-je définir l'arrière-plan à l'autre couleur? par exemple. bleu, blanc etc.Pourquoi ai-je un fond noir lorsque je sauvegarde une image en JPG?

public void paintComponent(Graphics g) { 
     int width = getWidth(); 
     int height = getHeight(); 

     // Create a buffered image in which to draw 
     BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); 

     // Create a graphics contents on the buffered image 
     Graphics2D g2d = bufferedImage.createGraphics();  
     g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
     g2d.setStroke(new BasicStroke(1)); // set the thickness of polygon line 
     g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.00f)); 
     g2d.setPaint(Color.black);//color of the polygon line 
     g2d.setBackground(Color.WHITE); 

     //draw polygon 
     for (Polygon triangle : triangles) 
     g2d.drawPolygon(triangle); 

     try { 
      File file = new File("newimage.jpg"); 
      ImageIO.write(bufferedImage, "jpg", file); 
     } catch (IOException e) { 
     }   
}//public void paint(Graphics g) 
+0

Cela n'a aucun sens d'utiliser 'TYPE_INT_ARGB' avec un fichier JPEG. Le "A" signifie "alpha" ou "transparence", mais les fichiers JPEG n'ont pas de transparence. Essayez d'utiliser des fichiers PNG à la place. – wchargin

Répondre

0

Vous donnez la solution à votre question. Vous définissez l'arrière-plan du panneau sur blanc, pas le BufferedImage. Vous enregistrez l'image en tant que JPEG, pas le panneau, de sorte que le JPEG a l'arrière-plan par défaut, qui apparaît en noir.

0

qu'attendez-vous d'avoir en arrière-plan lors de l'enregistrement au format JPEG? JPEG est destiné aux photographies, il ne peut pas avoir de zones transparentes, donc celles-ci doivent être converties en une certaine couleur, c'est pourquoi vous avez du noir (je suppose). Pourquoi ne pas enregistrer l'image au format PNG? Ou si vous voulez coller avec la première zone de remplissage JPEG avec la couleur blanche, puis commencer à dessiner sur elle ...

0

Votre approche de création de l'image est en arrière si vous me demandez. Toutes les autres questions ont porté sur la peinture de polygones sur un panneau. Maintenant vous changez le code pour peindre sur une image?

Lorsque vous étendez JPanel et invoquez super.paintComponent() deviner ce qui se passe? Le fond est peint! Ensuite, vous faites votre peinture polygonale personnalisée. Dans le code ci-dessus, il vous suffit de créer l'image, puis de peindre les polygones.

L'approche la plus simple consiste simplement à créer une routine qui peint le panneau de l'image, puis vous pouvez réutiliser le code sans surcharger la méthode paintComponent de chaque composant.

La classe ScreenImage fait pour vous.

4

Je me rends compte que cela est une question très ancienne mais j'ai eu un problème similaire moi-même et que je trouve la réponse (il est dans les javadocs) Je pensais que je posterais ici de toute façon.

Lorsque vous définissez la couleur de fond sur l'objet graphique cela n'entrera en jeu lorsque vous effacez une région. Par conséquent, effacez tout de suite la zone entière et vous aurez l'arrière-plan dans votre couleur préférée:

graphics.clearRect(0, 0, width, height); 
Questions connexes