2017-01-13 6 views
0

私は同じプログラムで特定のコンポーネントのスクリーンショットを撮る目的で小さなJavaプログラムを持っています。ここでコンテナのスクリーンショットは、白ではなく黒の背景を持っています。

はそれのMCVE

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(); 
     } 
    } 
} 

コードが実行されると、それはこのファイルを生成しています。

Black Background

しかし、私はこのように見えた出力ファイルを期待されていました。

White Background

私が何か間違ったことをやったりステップを逃したことがありますか?私はあなたが試すことができると思い

答えて

2

frame.setBackground(Color.WHITE); 

あなたcontainer

を追加する前には、私は何の背景に定義が存在しないため、これがあると思い色

import java.awt.Color; 

をインポートすることを忘れないでください。ウィンドウは白い色で自動的に塗りつぶしますが、実際には背景色がなく、スクリーンショットで黒くなります。

編集:

私の悪い、あなたがイメージにコンテナを描画するために使用するグラフィックスにのbackgroundColorを追加する必要があります。 clearRectが実際にあなたが定義された色と背景をペイントするために使用される

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

方法:

はこれを試してみてください。

+0

コンテナとフレームの両方に白の背景を設定しようとしましたが、違いはありませんでした。また、私は 'java.awt.Color'をインポートしました – Dan

+0

@私の編集を参照してください、あなたは、フレームではなく、画像を描画するために使用するグラフィックスに背景を追加する必要があります。お役に立てれば。 –

+0

ご協力いただきありがとうございます – Dan

関連する問題