2017-01-13 85 views
0

我有一個小型java程序,目的是用相同的程序拍攝特定組件的屏幕截圖。容器的屏幕截圖有黑色背景而不是白色

這裏是它

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

一個MCVE當代碼運行它產生這個文件。

Black Background

不過,我預計它看起來像這樣的輸出文件。

White Background

難道我做錯了或錯過了一步?

回答

2

我想你可以嘗試:

frame.setBackground(Color.WHITE); 

然後加入你的container

不要忘了導入顏色

import java.awt.Color; 

我想這是因爲沒有定義背景,並且窗口會以白色自動填充它,但實際上沒有背景顏色,導致它在屏幕截圖中爲黑色。

編輯:

我的壞,你需要的的backgroundColor添加到您使用的容器繪製到圖像的圖形。

試試這個:

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

方法clearRect用於實際繪製你定義的顏色和背景。

+0

我試圖在容器和框架上設置白色的背景,並沒有區別。此外,我確實導入了'java.awt.Color' – Dan

+0

@Dan看到我的編輯,您需要將背景添加到您用來繪製圖像的圖形,而不是框架。希望這可以幫助。 –

+0

謝謝你的幫助 – Dan