如何在我的Java应用程序中捕获特定组件而不是完整的主监视器?
我收集图片的当前代码示例:
Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
BufferedImage image = null;
try {//take the screenshot and store in buf img
image = new Robot().createScreenCapture(screenRect);
} catch (AWTException e2) {
e2.printStackTrace();
}
我想要屏幕截图的组件示例是JFrame,Applet和JPanels。在回答这个问题时,任何一个例子都是令人满意的。
修改 此代码解决了允许您在最小化或在后台运行和截屏时的问题。感谢Dando18。
public static BufferedImage createImage(JComponent comp) {
int w = comp.getWidth();
int h = comp.getHeight();
BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
comp.paint(g);
return bi;
}
剩余问题:
如何在我的应用程序中加载
以下条件适用于我的小程序。
主JFrame - >调用名为 Loader 的类并将参数传递给它 - >参数从Loader传递给名为 Stub 的类 - > Applet设置为Stub - > Applet被添加到Main JFrame居中。
我不明白为什么无法在Main JFrame上与其他组件一起捕获此组件。我知道Applet是一个awt的组件,而不是swing的JComponent,我只是尝试了一个Applet的截图,它从Loader类中返回它并将Component传递给createImage覆盖签名,它似乎只捕获一个不同的小窗口而不是捕获我的应用程序的主JFrame,但它仍然是一个黑色的图像。
答案 0 :(得分:2)
如果您不必使用Robot
,则应返回组件的BufferedImage。
public static BufferedImage createImage(JComponent comp) {
int w = comp.getWidth();
int h = comp.getHeight();
BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
comp.paint(g);
return bi;
}
只需致电:
BufferedImage component_screenshot = createImage(myComponent);
或使用Robot
:
try {
BufferedImage img = new Robot().createScreenCapture(new Rectangle(
frame.getLocationOnScreen().x,
frame.getLocationOnScreen().y,
frame.getWidth(),
frame.getHeight()));
} catch (AWTException ex) {
}