2017-01-13 40 views
0

같은 프로그램으로 특정 구성 요소의 스크린 샷을 찍을 목적으로 작은 자바 프로그램이 있습니다.컨테이너의 스크린 샷에는 흰색 대신 검은 색 배경이 있습니다.

다음은 코드가이 파일을 만들어 실행 될 때

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

@ 편집 내용을 보려면 프레임이 아닌 이미지를 그리는 데 사용할 그래픽에 배경을 추가해야합니다. 희망이 도움이됩니다. –

+0

도움 주셔서 감사합니다. – Dan