Dil*_*fey 6 java screenshot external process
是否可以使用Java获取Java外部应用程序的屏幕截图,例如VLC/Windows Media Player,将其存储为Image对象,然后将其显示在JLabel或类似的东西中?有人知道这是否可能,如果有的话,是否有人对如何做到这一点有一般的想法?
注意:我只需要了解如何获取屏幕截图并将其存储为某种形式的Image对象.之后,我可以使用,操纵,显示它等.
这是 Windows 的答案(不确定 alt+printScr 在 Linux 上是否有效:P)
我想实现这一目标的一种方法
1. 使用 Robot 类来触发 alt+printScreen 命令(这会将活动窗口捕获到剪贴板)
2.读取剪贴板!
这是执行此操作的两段代码。我实际上并没有尝试过,而是我拼凑起来的一些东西。
代码触发命令以获取剪贴板上的活动窗口
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
public class ActiveWindowScreenShot
{
/**
* Main method
*
* @param args (not used)
*/
public static void main(String[] args)
{
Robot robot;
try {
robot = new Robot();
} catch (AWTException e) {
throw new IllegalArgumentException("No robot");
}
// Press Alt + PrintScreen
// (Windows shortcut to take a screen shot of the active window)
robot.keyPress(KeyEvent.VK_ALT);
robot.keyPress(KeyEvent.VK_PRINTSCREEN);
robot.keyRelease(KeyEvent.VK_PRINTSCREEN);
robot.keyRelease(KeyEvent.VK_ALT);
System.out.println("Image copied.");
}
}
Run Code Online (Sandbox Code Playgroud)
读取剪贴板上图像的代码
// If an image is on the system clipboard, this method returns it;
// otherwise it returns null.
public static Image getClipboard() {
Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);
try {
if (t != null && t.isDataFlavorSupported(DataFlavor.imageFlavor)) {
Image text = (Image)t.getTransferData(DataFlavor.imageFlavor);
return text;
}
} catch (UnsupportedFlavorException e) {
} catch (IOException e) {
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
您可以根据需要管理控件!让我知道这是否适合您。但这肯定是我尝试一下的任务!