您的位置:首页 > 编程语言 > Java开发

java实现区域内屏幕截图示例

2015-09-01 11:26 706 查看
这篇文章主要介绍了java截图示例,需要的朋友可以参考下

这是一个java版的截图程序

复制代码 代码如下:

package com.hongyuan.test;

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);

 }

}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: