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