Как я могу захватить определенный компонент в моем приложении Java, а не мой полный первичный монитор?Класс робота - Снимок экрана с конкретным фреймом/компонентом, в то время как Java-приложение сведено к минимуму/в фоновом режиме
Текущий код пример того, как я собираю изображение:
Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
BufferedImage image = null;
try {//take the screenshot and store in buf img
image = new Robot().createScreenCapture(screenRect);
} catch (AWTException e2) {
e2.printStackTrace();
}
Пример компонентов, которые я хочу, чтобы снимок экрана будет JFrame, апплеты и JPanels. Пример с любым из них будет удовлетворительным при ответе на этот вопрос.
EDIT: Этот код решает проблему, позволяющую запускать и делать скриншоты при минимизации или в фоновом режиме. Благодаря Dando18.
public static BufferedImage createImage(JComponent comp) {
int w = comp.getWidth();
int h = comp.getHeight();
BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
comp.paint(g);
return bi;
}
Остальные вопросы:
- Когда я сделать снимок экрана с помощью GetComponent или getContentPane на мой JFrame и передать его в функцию createImage она показывает каждый контроль/компонента и их содержание отображается на основном JFrame, но апплет не появится, даже если он показывает мне мою игру, и он отправляет обратно черные снимки экрана этой части.
Как он будет загружен в моем приложении:
Следующие условия для моего апплета.
- апплета на главном JFrame
- окурок апплета реализует AppletContext, AppletStub
Главная JFrame -> Вызовы класс с именем Loader и передает ему параметры -> Параметры передаются в мой класс Штук от Loader -> Апплет установлен на Stub -> Апплет добавлен в основное JFrame с центром.
Я не понимаю, почему этот компонент нельзя захватить вместе с другими на Главном JFrame. Я знаю, что Applet является компонентом awt, а не JComponent swing, и я попробовал только скриншот Applet, возвратив его из класса Loader и передав только Component для createImage, переопределяющего подпись, он, казалось, только захватил небольшое окно, которое было другим чем захват основного JFrame моего приложения, но тем не менее это было черное изображение.
ли вы должны использовать 'Robot'? – Dando18
IIRC JFrame имеет метод getRectangle(), и в этом случае я мог бы предположить, что использование этого в отличие от screenRect будет делать – jamierocks
Робот вообще не требуется. Предложения открыты и приветствуются. –