2017-01-13 3 views
0

Ich habe ein kleines Java-Programm mit dem Ziel, einen Screenshot einer bestimmten Komponente mit dem gleichen Programm zu nehmen.Screenshot des Containers hat schwarzen Hintergrund anstelle von Weiß

Hier ist ein MCVE davon

import java.awt.Color; 
import java.awt.Container; 
import java.awt.Dimension; 
import java.awt.Frame; 
import java.awt.Graphics; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 

import javax.imageio.ImageIO; 

@SuppressWarnings("serial") 
public class Screen { 

    public static void main(String[] args) { 
     Frame frame = new Frame("Screen Test!"); 
     frame.addWindowListener(new WindowAdapter() { 
      public void windowClosing(WindowEvent we) { 
       frame.dispose(); 
      } 
     }); 

     Container container = new Container() { 

      @Override 
      public void paint(Graphics g) { 
       super.paint(g); 
       g.setColor(Color.RED); 
       g.fillRect(5, 5, 10, 10); 
      } 
     }; 

     Dimension dimension = new Dimension(50, 50); 
     container.setPreferredSize(dimension); 

     frame.add(container); 
     frame.pack(); 
     frame.setVisible(true); 

     BufferedImage bufImage = new BufferedImage(dimension.width, dimension.height, BufferedImage.TYPE_INT_RGB); 
     container.paint(bufImage.createGraphics()); 

     File outputfile = new File("image.jpg"); 
     try { 
      ImageIO.write(bufImage, "jpg", outputfile); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Wenn der Code ausgeführt wird diese Datei erzeugt.

Black Background

Allerdings war ich eine Ausgabedatei zu erwarten, die so aussah.

White Background

Habe ich etwas falsch oder verpasste einen Schritt getan?

Antwort

2

Ich glaube, Sie könnten versuchen:

frame.setBackground(Color.WHITE); 

Vor dem Hinzufügen Ihrer container

Vergessen Sie nicht, die Farbe

import java.awt.Color; 

zu importieren Ich denke, das liegt daran, dass es keinen Hintergrund ist definiert , und Windows füllt es automatisch mit einer weißen Farbe, aber es gibt tatsächlich keine Hintergrundfarbe, was dazu führt, dass es im Screenshot schwarz ist.

Edit:

Meine schlecht, müssen Sie die Backgroundcolor auf die Graphics Sie den Container verwenden, um fügen dem Bild zu zeichnen.

try this:

Graphics2D graphs = bufImage.createGraphics(); 
graphs.setBackground(Color.WHITE); 
graphs.clearRect(0, 0, dimension.width, dimension.height);   
container.paint(graphs); 

das Verfahren clearRect verwendet wird, um tatsächlich den Hintergrund mit der Farbe malen Sie definiert.

+0

Ich habe versucht, einen Hintergrund von weiß auf dem Container und dem Rahmen und es machte keinen Unterschied. Auch habe ich importiert 'java.awt.Color' – Dan

+0

@Dan sehen, meine Bearbeitung, müssen Sie den Hintergrund zu den Grafiken, die Sie verwenden, um das Bild, nicht auf den Rahmen zu zeichnen. Hoffe das hilft. –

+0

Vielen Dank für Ihre Hilfe – Dan

Verwandte Themen