Захват тяжелых компонентов Java? - PullRequest
2 голосов
/ 02 декабря 2008

У меня есть настольное приложение с тяжелыми компонентами (JxBrowser) в JFrame. Как я могу сделать снимок из графического интерфейса и сохранить его, например, в файл PNG?

Примечание. Метод с использованием Graphics2d и Component.paint () / paintAll () / print / printAll работает только для облегченных компонентов.

Любые ответы приветствуются!

EDIT

Я уже пробовал это:

robot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize())); 

Но я хочу, чтобы внутренний компонент был захвачен ...

EDIT

Ситуация, похоже, сходится к этому решению: если у меня в JFrame более тяжелый компонент, поэтому он отображается на JScrollPane, то не существует другого способа получить его снимок программно, чем прокрутить его / сделать снимок экрана с захватом экрана?

Ответы [ 4 ]

2 голосов
/ 18 мая 2009

Меня зовут Роман, и я разработчик в TeamDev.

Компонент JxBrowser - это тяжеловесный компонент, который встраивает собственное окно Mozilla для отображения веб-страниц. Чтобы получить скриншот полной веб-страницы из компонента JxBrowser, вы действительно можете использовать функцию Java Robot с прокруткой веб-страницы. Для небольших веб-страниц это решение подходит. Но получение скриншота большой веб-страницы займет много времени. Также обратите внимание, что Java Robot позволяет захватывать только экран. Поэтому, если какое-то окно появится над компонентом JxBroser, оно будет также захвачено.

Мы уже начали работать над этой функциональностью в рамках проекта JxBrowser. Решение, которое позволит захватывать полную веб-страницу, включая ее невидимую часть, основано на внутренних материалах Mozilla. Вы сможете легко захватить полную веб-страницу и сохранить ее как изображение.

Мы собираемся добавить эту функциональность в один из следующих выпусков библиотеки JxBrowser, но дата выпуска еще не определена. Если вы хотите, вы можете подписаться на RSS-канал TeamDev: http://support.teamdev.com/blogs/feeds/tags/company_news

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

С уважением, Roman

1 голос
/ 13 августа 2009

JxBrowser API предоставляет функциональность, которая позволяет сохранить всю веб-страницу в виде изображения PNG. Пожалуйста, см. образец .

1 голос
/ 02 декабря 2008

Вы имеете в виду программно?

Как насчет

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 );
0 голосов
/ 02 декабря 2008

Вы также можете попробовать создать скриншот, выполнив это:

    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;
...