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

这篇文章主要介绍了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);

 }

}

上一篇:Spring中如何动态注入Bean实例教程下一篇:10分钟带你理解Java中的反射 热门搜索

java代码实现截图 

区域截屏 

区域截图 

java实例 

屏幕截图 

相关文章

基于C#实现的屏幕指定区域截屏代码

2021-10-06阅读(4455)评论(0)推荐()

这篇文章主要介绍了C#实现的屏幕指定区域截屏代码,有需要的朋友可以参考一下

java编程实现屏幕截图(截屏)代码总结

2021-09-18阅读(8463)评论(0)推荐()

这篇文章主要介绍了java编程实现屏幕截图(截屏)代码,结合3个实例总结分析了Java截屏时页面抓取及图片保存的相关技巧,具有一定参考借鉴价值,需要的朋友可以参...

Android实现矩形区域截屏的方法

2021-10-10阅读(8752)评论(0)推荐()

对屏幕进行截屏并裁剪有两种方式:早截图和晚截图,对于早截图和晚截图的概念大家通过本文详解学习。本文重点给大家介绍android实现矩形区域截屏的方法,需要的朋友...

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

2021-09-18阅读(5088)评论(0)推荐()

这篇文章主要介绍了java截图示例,需要的朋友可以参考下

Python 实现局域网远程屏幕截图案例

2021-10-09阅读(5643)评论(0)推荐()

这篇文章主要介绍了Python 实现局域网远程屏幕截图案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

c#不使用系统api实现可以指定区域屏幕截屏功能

2021-11-19阅读(7998)评论(0)推荐()

这篇文章主要介绍了不使用系统API通过纯c#实现屏幕指定区域截屏功能,截屏后还可以保存图象文件,大家参考使用吧

c#实现winform屏幕截图并保存的示例

2021-10-04阅读(6150)评论(0)推荐()

这篇文章主要介绍了c#实现winform屏幕截图并保存的示例,需要的朋友可以参考下

取消

有人回复邮件通知

提交评论

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...