Получить скриншот веб-страницы в браузере JCEF

Проблема: я использую JCEF (java-Chromium Embedded Framework) в java-проекте, теперь я хочу получить скриншот веб-страницы в браузере CEF, но я не нашел API для этого. Есть ли способ сделать это? Огромное спасибо!


person Bode    schedule 22.08.2016    source источник
comment
Возможный дубликат Как интегрировать Chromium Embedded Framework (CEF) с java   -  person George Garchagudashvili    schedule 22.08.2016
comment
@GeorgeGarchagudashvili Но я до сих пор не могу найти способ сделать это...   -  person Bode    schedule 23.08.2016


Ответы (1)


Насколько я могу судить, CefBrowser основан на AWT. Для создания снимка экрана таких компонентов можно (нужно?) создать снимок всего экрана, ограниченного областью, которую покрывает компонент.

Что-то вроде этого будет работать:

// Your browser instance.
org.cef.browser.CefBrowser browser = ... 

// Obtain the component that you want to capture in a screenshot.
java.awt.Component component = browser.getUIComponent();

// Determine what area of the entire screen is covered by the component.
java.awt.Point p = new java.awt.Point(0, 0);
javax.swing.SwingUtilities.convertPointToScreen(p, component);
java.awt.Rectangle region = component.getBounds();
region.x = p.x;
region.y = p.y;

// Store the selected area from the screen in a image buffer.
java.awt.image.BufferedImage image = new java.awt.Robot().createScreenCapture( region );

Чтобы сохранить в буфер в файл, создайте экземпляр File (используя JFileChooser, если вы хотите представить пользователю красивое диалоговое окно сохранения как) и используйте javax.imageio.ImageIO#write(RenderedImage, String, File) для сохранения изображения в файл. Второй аргумент относится к формату файла (png, bmp и т. д.), который вы хотите использовать.

Если кто-нибудь может предоставить пример кода, в котором компонент хранится напрямую, без захвата его как части большего экрана (который также будет захватывать другие компоненты, которые находятся поверх того, что вас интересует), мне было бы очень интересно .

person Guus    schedule 20.02.2018