Java 用于截取屏幕截图
Java AWT(Abstract Window Toolkit)是一个多功能的软件包,其中包含创建用户界面和绘制图形图像所需的所有类。在AWT术语中,按钮和类似滚动条的实体被称为组件。Component类是所有AWT组件的根。当用户与组件交互时,某些组件会触发事件。AWTEvent类及其子类表示AWT组件能够触发的事件。在AWTEvent中,解释了AWT事件模型。
容器是可能包含其他组件和容器的组件。容器的另一个选择是布局管理器,它控制了组件在容器内的可视布局。AWT软件包包含一些布局管理器类,以及一个用于开发自己的布局管理器的接口。有关更多信息,请查看LayoutManager和Container。
这些值以整数的形式保存,因此每个组件对象都有最大大小和位置。平台还可能对最大大小和地理区域设置进一步的限制。平台确定了精确的最大值。这些最大值无论是在Java代码还是本地代码中都无法更改。组件布局也受到这些限制的约束。如果组件的限制超过平台限制,则无法在容器对象内有效地组织组件对象。任何对象在特定轴上的位置和大小共同确定了对象的限制。
步骤
通过构建GUI来截取屏幕截图
- 导入所有必要的java包。
-
创建一个’Robot’对象来截取屏幕截图。
-
创建一个’Rectangle’对象来指定要截取的屏幕的尺寸。
-
将屏幕作为’BufferedImage’对象截取。
-
打印屏幕截图被截取的消息。
通过构建GUI来截取屏幕截图并保存到指定路径
-
导入所有必要的库。
-
创建一个’JFrame’对象来容纳GUI组件。
-
创建一个’JButton’对象来点击和截取屏幕截图。
-
创建一个’JFileChooser’对象来容纳’JButton’并将其添加到’JFrame’中。
-
为’JButton’添加’ActionListener’,当按钮被点击时,截取屏幕截图并将其保存到指定文件中。
-
使用’Robot’对象将屏幕作为’BufferedImage’对象截取。
-
显示“保存文件”对话框,允许用户选择保存位置和文件名。
-
使用’ImageIO.write()’方法将’BufferedImage’对象保存到选定的文件中。
-
打印屏幕截图被保存的消息。
-
指定’JFrame’的尺寸和可见性。
方法
-
捕捉屏幕截图而不建立GUI。
-
通过建立GUI并保存到特定路径来捕捉屏幕截图。
捕捉屏幕截图而不创建GUI
示例
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class ScreenCapture {
public static void main(String[] args) throws Exception {
// Create a Robot object to capture the screen
Robot robot = new Robot();
// Create a Rectangle object to define the area of the screen to capture
Rectangle rectangle = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
// Use the robot.createScreenCapture() method to capture the screen as a BufferedImage object
BufferedImage image = robot.createScreenCapture(rectangle);
// Save the BufferedImage object to a file using the ImageIO.write() method
File file = new File("screenshot.png");
ImageIO.write(image, "png", file);
// Print a message indicating that the screenshot has been saved
System.out.println("Screenshot saved to screenshot.png");
}
}
输出
Screenshot saved to screenshot.png
Java.awt和Javax.imageIO包用于捕获和保存屏幕快照。它首先创建一个Robot对象,然后尝试将屏幕捕获为BufferedImage对象。稍后创建的Rectangle对象定义了要捕获的屏幕部分,其为使用Toolkit.getDefaultToolkit()函数的getScreenSize函数收集的完整屏幕。
然后,代码使用机器人将屏幕捕获为BufferedImage对象,使用的函数称为createScreenCapture(rectangle)。最新的屏幕截图将被替换为此项。
在我们的过程中,接下来我们通过ImageIO.write函数保留特定的BufferedImage实例,具体使用它的参数(”png”和file)。执行此操作需要使用两个不同的对象:第一个是我们代表性的BufferedImage,简称”image”,而第二个仅被称为”file”,确定了输出将被保存在何处。值得注意的是,在此情况下,我们选择了PNG格式进行存储。
程序生成的最后一条消息指示屏幕截图已保存到文件screenshot.png。
通过创建GUI并保存到特定路径来捕获屏幕截图
示例
import java.awt.AWTException;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ScreenshotCapture {
public static void main(String[] args) {
// Create a JFrame object
JFrame frame = new JFrame("Screenshot Capture");
// Create a JButton object
JButton captureButton = new JButton("Capture");
// Create a JFileChooser object
JFileChooser fileChooser = new JFileChooser();
// Create a JPanel object
JPanel panel = new JPanel();
// Add the JButton and JPanel objects to the JFrame
panel.add(captureButton);
frame.add(panel, BorderLayout.CENTER);
// Add an ActionListener to the JButton to capture the screenshot and save it to a file
captureButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
// Create a Robot object to capture the screen
Robot robot = new Robot();
// Create a Rectangle object to define the area of the screen to capture
Rectangle rectangle = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
// Use the robot.createScreenCapture() method to capture the screen as a BufferedImage object
BufferedImage image = robot.createScreenCapture(rectangle);
// Show the save file dialog to allow the user to select the save location and file name
int result = fileChooser.showSaveDialog(frame);
if (result == JFileChooser.APPROVE_OPTION) {
// Get the selected file and save the BufferedImage object to it using the ImageIO.write() method
File file = fileChooser.getSelectedFile();
ImageIO.write(image, "png", file);
// Print a message indicating that the screenshot has been saved
System.out.println("Screenshot saved to " + file.getAbsolutePath());
}
} catch (AWTException ex) {
ex.printStackTrace();
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
// Set the size and visibility of the JFrame
frame.setSize(new Dimension(300, 100));
frame.setVisible(true);
}
}
输出
为了记录屏幕、显示保存文件对话框并保存图像,程序使用了Java.awt、Javax.swing和Javax.imageio包。首先创建了一个带有“Capture”标签的JButton对象和一个JFrame对象。此外,还生成了一个JFileChooser对象,让用户选择存储快照的位置和命名方式。
然后,程序将JButton和JPanel对象添加到JFrame中。此外,它还为JButton对象添加了一个ActionListener,以便每当按钮被按下时,当前屏幕的快照就会被拍摄并保存到文件中。为了将屏幕捕获为BufferedImage对象,ActionListener首先生成一个Robot对象。然后使用JFileChooser返回的fileChooser.showSaveDialog(frame)函数显示保存文件对话框。如果用户选择了一个文件并在对话框中点击“保存”,将显示APPROVE_OPTION。
当用户选择了一个文件后,程序使用fileChooser获取选择的文件。然后使用ImageIO.write(image, “png”, file)函数将BufferedImage对象保存到文件中,并使用getSelectedFile()。”png”参数指定图像的格式为PNG。
快照已保存到文件路径,程序最后用getAbsolutePath()在屏幕上显示提示。
结论
总之,使用Robot类捕获屏幕的BufferedImage对象和ImageIO.write()方法将图像保存到文件中,可以在Java中拍摄屏幕快照。用户还可以通过使用Swing组件(如JFrame、JButton和JFileChooser)构建的GUI应用程序选择保存位置和文件名。通过将ActionListener附加到JButton上,可以将截图保存到所选择的文件中。总的来说,Java提供了一种简单而灵活的方法,可以为各种用途拍摄和保存截图。