Java 实现简单截图工具 - 类似 Windows 自带截图功能
下面是一个简单的 Java 类,实现了类似于 Windows 自带的截图软件的功能。它允许用户通过按下鼠标左键并拖动来选择屏幕区域,并将选择的区域保存为 PNG 图像文件。
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class ScreenshotApp {
private JFrame frame;
private Rectangle selection;
private BufferedImage screenshot;
public ScreenshotApp() {
frame = new JFrame();
frame.setUndecorated(true); // 去除窗口边框
frame.setBackground(new Color(0, 0, 0, 0)); // 设置窗口背景透明
// 添加用于选择屏幕区域的组件
frame.getContentPane().add(new ScreenshotComponent());
// 注册按键事件监听器,按下Esc键退出程序
frame.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
System.exit(0);
}
}
});
// 注册鼠标事件监听器,按下鼠标左键开始选择区域,释放鼠标左键结束选择区域
frame.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
selection = new Rectangle();
selection.x = e.getX();
selection.y = e.getY();
}
@Override
public void mouseReleased(MouseEvent e) {
if (selection != null) {
// 保存选择的区域为图像文件
try {
BufferedImage selectedImage = screenshot.getSubimage(
selection.x, selection.y, selection.width, selection.height);
ImageIO.write(selectedImage, "png", new File("screenshot.png"));
JOptionPane.showMessageDialog(frame, "截图已保存为screenshot.png");
} catch (IOException ex) {
ex.printStackTrace();
} finally {
System.exit(0);
}
}
}
});
// 注册鼠标移动事件监听器,根据鼠标位置更新选择区域大小
frame.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
if (selection != null) {
selection.width = e.getX() - selection.x;
selection.height = e.getY() - selection.y;
frame.repaint();
}
}
});
// 获取默认屏幕设备
GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
// 获取屏幕尺寸
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame.setSize(screenSize);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setAlwaysOnTop(true); // 窗口置顶
frame.setVisible(true);
try {
// 捕获屏幕截图
Robot robot = new Robot();
screenshot = robot.createScreenCapture(new Rectangle(screenSize));
} catch (AWTException e) {
e.printStackTrace();
}
}
class ScreenshotComponent extends JComponent {
@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(screenshot, 0, 0, this);
if (selection != null) {
g2d.setColor(Color.RED);
g2d.draw(selection);
g2d.setColor(new Color(255, 0, 0, 40)); // 设置选择区域半透明红色填充
g2d.fill(selection);
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new ScreenshotApp());
}
}
该应用程序创建了一个全屏的无边框窗口,用户可以通过拖动鼠标左键来选择屏幕区域,并将选择的区域保存为'screenshot.png'图像文件。按下Escape键将退出程序。
请确保您已在计算机上安装了Java开发环境(JDK)来编译和运行上述代码。
原文地址: https://www.cveoy.top/t/topic/bw5k 著作权归作者所有。请勿转载和采集!