java实现区域内屏幕截图示例
这是一个java版的截图程序
import java.awt.AWTException;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.EventQueue;import java.awt.FlowLayout;import java.awt.Graphics;import java.awt.Image;import java.awt.Rectangle;import java.awt.Robot;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.MouseMotionAdapter;import java.awt.image.BufferedImage;import java.awt.image.RescaleOp;import java.io.File;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;
import javax.imageio.ImageIO;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFileChooser;import javax.swing.JToolBar;import javax.swing.JWindow;import javax.swing.filechooser.FileNameExtensionFilter;import javax.swing.filechooser.FileSystemView;
public class ScreenShotTest {
public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { ScreenShotWindow ssw=new ScreenShotWindow(); ssw.setVisible(true); } catch (AWTException e) { e.printStackTrace(); } } }); }
}/* * 截图窗口 */class ScreenShotWindow extends JWindow{ private int orgx, orgy, endx, endy; private BufferedImage image=null; private BufferedImage tempImage=null; private BufferedImage saveImage=null; private ToolsWindow tools=null; public ScreenShotWindow() throws AWTException{ //获取屏幕尺寸 Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); this.setBounds(0, 0, d.width, d.height); //截取屏幕 Robot robot = new Robot(); image = robot.createScreenCapture(new Rectangle(0, 0, d.width,d.height)); this.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { //鼠标松开时记录结束点坐标,并隐藏操作窗口 orgx = e.getX(); orgy = e.getY(); if(tools!=null){ tools.setVisible(false); } } @Override public void mouseReleased(MouseEvent e) { //鼠标松开时,显示操作窗口 if(tools==null){ tools=new ToolsWindow(ScreenShotWindow.this,e.getX(),e.getY()); }else{ tools.setLocation(e.getX(),e.getY()); } tools.setVisible(true); tools.toFront(); } }); this.addMouseMotionListener(new MouseMotionAdapter() { @Override public void mouseDragged(MouseEvent e) { //鼠标拖动时,记录坐标并重绘窗口 endx = e.getX(); endy = e.getY(); //临时图像,用于缓冲屏幕区域放置屏幕闪烁 Image tempImage2=createImage(ScreenShotWindow.this.getWidth(),ScreenShotWindow.this.getHeight()); Graphics g =tempImage2.getGraphics(); g.drawImage(tempImage, 0, 0, null); int x = Math.min(orgx, endx); int y = Math.min(orgy, endy); int width = Math.abs(endx - orgx)+1; int height = Math.abs(endy - orgy)+1; // 加上1防止width或height0 g.setColor(Color.BLUE); g.drawRect(x-1, y-1, width+1, height+1); //减1加1都了防止图片矩形框覆盖掉 saveImage = image.getSubimage(x, y, width, height); g.drawImage(saveImage, x, y, null); ScreenShotWindow.this.getGraphics().drawImage(tempImage2,0,0,ScreenShotWindow.this); } }); } @Override public void paint(Graphics g) { RescaleOp ro = new RescaleOp(0.8f, 0, null); tempImage = ro.filter(image, null); g.drawImage(tempImage, 0, 0, this); } //保存图像到文件 public void saveImage() throws IOException { JFileChooser jfc=new JFileChooser(); jfc.setDialogTitle("保存"); //文件过滤器,用户过滤可选择文件 FileNameExtensionFilter filter = new FileNameExtensionFilter("JPG", "jpg"); jfc.setFileFilter(filter); //初始化一个默认文件(此文件会生成到桌面上) SimpleDateFormat sdf = new SimpleDateFormat("yyyymmddHHmmss"); String fileName = sdf.format(new Date()); File filePath = FileSystemView.getFileSystemView().getHomeDirectory(); File defaultFile = new File(filePath + File.separator + fileName + ".jpg"); jfc.setSelectedFile(defaultFile); int flag = jfc.showSaveDialog(this); if(flag==JFileChooser.APPROVE_OPTION){ File file=jfc.getSelectedFile(); String path=file.getPath(); //检查文件后缀,放置用户忘记输入后缀或者输入不正确的后缀 if(!(path.endsWith(".jpg")||path.endsWith(".JPG"))){ path+=".jpg"; } //写入文件 ImageIO.write(saveImage,"jpg",new File(path)); System.exit(0); } }}/* * 操作窗口 */class ToolsWindow extends JWindow{ private ScreenShotWindow parent; public ToolsWindow(ScreenShotWindow parent,int x,int y) { this.parent=parent; this.init(); this.setLocation(x, y); this.pack(); this.setVisible(true); } private void init(){ this.setLayout(new BorderLayout()); JToolBar toolBar=new JToolBar("Java 截图"); //保存按钮 JButton saveButton=new JButton(new ImageIcon("images/save.gif")); saveButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { parent.saveImage(); } catch (IOException e1) { e1.printStackTrace(); } } }); toolBar.add(saveButton); //关闭按钮 JButton closeButton=new JButton(new ImageIcon("images/close.gif")); closeButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.exit(0); } }); toolBar.add(closeButton); this.add(toolBar,BorderLayout.NORTH); }}
以上是 java实现区域内屏幕截图示例 的全部内容, 来源链接: utcz.com/p/207419.html