2017-01-13 3 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; 

Я думаю, что это происходит потому, что нет никакого фона определен , а окна автоматически заполняют его белым цветом, но на самом деле цвет фона отсутствует, в результате он становится черным на снимке экрана.

Edit:

Моего плохой, вам нужно добавить BackgroundColor к Graphics вы используете, чтобы сделать контейнер для изображения.

попробовать это:

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

 Смежные вопросы

  • Нет связанных вопросов^_^