Захват тяжелых компонентов Java?
У меня есть настольное приложение с тяжелыми компонентами (JxBrowser) в JFrame. Как я могу сделать снимок из графического интерфейса и сохранить его, например, в файл PNG?
Примечание. Метод с использованием Graphics2d и Component.paint()/paintAll()/print/printAll работает только для облегченных компонентов.
Любые ответы приветствуются!
РЕДАКТИРОВАТЬ
Я уже пробовал это:
robot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
Но я хочу, чтобы внутренний компонент был захвачен...
РЕДАКТИРОВАТЬ
Кажется, что ситуация сходится к этому решению: если у меня в JFrame более тяжелый компонент, поэтому он отображается на JScrollPane, то не существует другого способа получить его снимок программно, а затем прокрутить его или сделать снимок экрана с помощью screencapture?
4 ответа
Меня зовут Роман, и я разработчик в TeamDev.
Компонент JxBrowser - это тяжелый компонент, который встраивает собственное окно Mozilla для отображения веб-страниц. Чтобы получить скриншот полной веб-страницы из компонента JxBrowser, вы действительно можете использовать функциональность Java Robot с прокруткой веб-страницы. Для небольших веб-страниц это решение подходит. Но получение скриншота большой веб-страницы займет много времени. Также обратите внимание, что Java Robot позволяет захватывать только экран. Так что если какое-то окно появится над компонентом JxBroser, то оно будет также захвачено.
Мы уже начали работать над этой функциональностью в рамках проекта JxBrowser. Решение, которое позволит захватывать полную веб-страницу, включая ее невидимую часть, основано на внутренних материалах Mozilla. Вы сможете полностью захватить веб-страницу и сохранить ее как изображение.
Мы собираемся добавить эту функциональность в один из следующих выпусков библиотеки JxBrowser, но дата выпуска еще не определена. Если вы хотите, вы можете подписаться на RSS-канал TeamDev: http://support.teamdev.com/blogs/feeds/tags/company_news
Или просто дайте мне знать, и я сообщу вам, когда эта функция будет доступна. Пожалуйста, дайте мне знать, если у вас есть дополнительные вопросы. Я буду рад помочь.
С уважением, Роман
Вы имеете в виду программно?
Как насчет
Point p = yourAwtComponent.getLocationOnScreen();
int w = yourAwtComponent.getWidth();
int h = yourAwtComponent.getHeight();
Rectangle rectangle = new Rectangle( p.x, p.y, w, h );
Image image = robot.createScreenCapture(rectangle);
И тогда как то так:
ImageIO.write( image, "png", file );
JxBrowser API предоставляет функциональность, которая позволяет сохранить всю веб-страницу в виде изображения в формате PNG. Пожалуйста, посмотрите образец.
Вы также можете попробовать создать скриншот, выполнив это:
int width = frameContainer.getWidth();
int height = frameContainer.getHeight();
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = image.createGraphics();
frameContainer.paint(g2);
return image;