用java写一个截图工具

用java模仿qq截图

首先定义一个启动类 ,运行这个方法

 1 import java.awt.Rectangle;
 2 import java.awt.Robot;
 3 import java.awt.Toolkit;
 4
 5     public class screen {
 6
 7         public static void main(String[] args) throws Exception {
 8             int width=(int)Toolkit.getDefaultToolkit().getScreenSize().getWidth();
 9             int height=(int)Toolkit.getDefaultToolkit().getScreenSize().getHeight();
10             Robot r=new Robot();
11             new View(r.createScreenCapture(new Rectangle(0, 0, width, height)));
12         }
13     }
14     

初始化截屏

import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class View extends JFrame {
	BufferedImage image;
	BufferedImage srcimage;
	JPanel jp;
	ImageIcon icon;

	View(BufferedImage image) {

		int width = (int) Toolkit.getDefaultToolkit().getScreenSize()
				.getWidth();
		int height = (int) Toolkit.getDefaultToolkit().getScreenSize()
				.getHeight();
		this.image = image;
		icon = new ImageIcon(image);
		jp = new huabu(image);
		this.add(jp);
		this.setSize(width, height);
		this.setUndecorated(true);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}

}

  鼠标监听事件

  1 import java.awt.Color;
  2 import java.awt.Graphics;
  3 import java.awt.event.ActionEvent;
  4 import java.awt.event.ActionListener;
  5 import java.awt.event.MouseEvent;
  6 import java.awt.event.MouseListener;
  7 import java.awt.event.MouseMotionListener;
  8 import java.awt.image.BufferedImage;
  9 import java.io.File;
 10 import java.io.FileOutputStream;
 11 import java.util.Date;
 12
 13 import javax.imageio.ImageIO;
 14 import javax.swing.JButton;
 15 import javax.swing.JOptionPane;
 16 import javax.swing.JPanel;
 17
 18 public class huabu extends JPanel implements MouseListener,
 19         MouseMotionListener, ActionListener {
 20     BufferedImage image;
 21     int sx = 0;
 22     int sy = 0;
 23     int tx = 0;
 24     int ty = 0;
 25     boolean flag = true;
 26     JButton save = new JButton("保存");
 27
 28     huabu(BufferedImage image) {
 29         this.setLayout(null);
 30         this.image = image;
 31         this.addMouseListener(this);
 32         this.addMouseMotionListener(this);
 33         save.addActionListener(this);
 34     }
 35
 36     @Override
 37     public void paint(Graphics g) {
 38         // TODO Auto-generated method stub
 39         g.drawImage(image, 0, 0, null);
 40         draw(g);
 41
 42     }
 43
 44     private void draw(Graphics g) {
 45         g.setColor(Color.cyan);
 46         g.drawLine(sx, sy, tx, sy);
 47         g.drawLine(sx, ty, tx, ty);
 48         g.drawLine(sx, sy, sx, ty);
 49         g.drawLine(tx, sy, tx, ty);
 50         System.out.println("画出" + tx + " " + ty);
 51     }
 52
 53     @Override
 54     public void mouseDragged(MouseEvent e) {
 55
 56         tx = e.getX();
 57         ty = e.getY();
 58         this.repaint();
 59         System.out.println("改变目标" + tx + " " + ty);
 60
 61     }
 62
 63     @Override
 64     public void mouseMoved(MouseEvent e) {
 65         // TODO Auto-generated method stub
 66
 67     }
 68
 69     @Override
 70     public void mouseClicked(MouseEvent e) {
 71
 72     }
 73
 74     @Override
 75     public void mousePressed(MouseEvent e) {
 76         if (flag) {
 77             System.out.println("改变原坐标");
 78             this.addMouseMotionListener(this);
 79             sx = e.getX();
 80             sy = e.getY();
 81         }
 82     }
 83
 84     @Override
 85     public void mouseReleased(MouseEvent e) {
 86         flag = false;
 87         int x = tx > sx ? tx : sx;
 88         int y = ty > sy ? ty : sy;
 89         save.setBounds(x - 100, y + 3, 100, 30);
 90         this.add(save);
 91         save.setVisible(true);
 92         save.requestFocus();
 93         this.repaint();
 94
 95     }
 96
 97     @Override
 98     public void mouseEntered(MouseEvent e) {
 99         // TODO Auto-generated method stub
100
101     }
102
103     @Override
104     public void mouseExited(MouseEvent e) {
105         // TODO Auto-generated method stub
106
107     }
108
109     @Override
110     public void actionPerformed(ActionEvent e) {
111         if (e.getSource() == save) {
112             String name = new Date().getTime() + "";
113             File f = new File("D:\\" + name + ".jpg");
114             FileOutputStream out;
115             try {
116                 out = new FileOutputStream(f);
117                 System.out.println("保存" + tx + " " + ty);
118
119                 if (sx > tx) {
120                     exchange(sx, tx);
121                 }
122                 if (sy > ty) {
123                     exchange(sy, ty);
124                 }
125                 ImageIO.write(image.getSubimage(sx, sy, tx - sx, ty - sy),
126                         "jpg", out);
127                 out.close();
128                 JOptionPane.showMessageDialog(null, "图片" + name + "成功保存到D:盘");
129                 System.exit(1);
130             } catch (Exception e1) {
131                 e1.printStackTrace();
132             }
133         }
134     }
135
136     private void exchange(int sy2, int ty2) {
137         int temp = sy2;
138         sy2 = ty2;
139         ty2 = temp;
140     }
141
142 }
时间: 2024-10-28 11:42:24

用java写一个截图工具的相关文章

五:用JAVA写一个阿里云VPC Open API调用程序

用JAVA写一个阿里云VPC Open API调用程序 摘要:用JAVA拼出来Open API的URL 引言 VPC提供了丰富的API接口,让网络工程是可以通过API调用的方式管理网络资源.用程序和软件管理自动化管理网络资源是一件显著提升运维效率和网络生产力的事情.产品经理教你写代码系列文章的目标是不懂代码的网络工程师能一步一步的学会用API管理网络. 另外通过文章标题大家也可以看出来,产品经理教你写代码肯定是一个业余班,里面的代码很多写的都不规范,可能也有很多Bug.专业选手可以参考的有限,请

用java写一个远程视频监控系统,实时监控(类似直播)我想用RPT协议,不知道怎么把RPT协议集成到项目中

我最近在用java写一个远程视频监控系统,实时监控(类似直播)我想用RPT协议,不知道怎么把RPT协议集成到项目中,第一次写项目,写过这类项目的多多提意见,哪方面的意见都行,有代码或者demo的求赏给我,谢谢

用JAVA写一个视频播放器

前言 跳过废话,直接看正文 当年入坑java是因为它的跨平台优势.那时我认为,"编写一次,处处运行."这听上去多么牛逼,应该是所有语言发展的终极之道,java势必会一统天下. 然而事实证明,那时的我还是太年轻. 正所谓鱼和熊掌不可兼得,若要享受跨平台带来的方便,便不可避免地要接受性能上的不足.事实上,java一直在致力于提高虚拟机的性能(JIT等技术),但面对对实时计算性能要求很高或涉及到用硬件优化的任务(视频的硬件编码.解码)时,仍远远比不上c或c++.因此,很少能够看到有人用jav

用JAVA写一个函数,功能如下: 任意给定一组数, 找出任意数相加之后的结果为35(任意设定)的情况

用JAVA写一个函数.功能如下:任意给定一组数,例如{12,60,-8,99,15,35,17,18},找出任意数相加之后的结果为35(任意设定)的情况. 可以递归算法来解: package test1; import java.util.Arrays; public class demo { public static void main(String[] args) { String str = "12,60,-8,99,15,35,17,18,8,10,11,12"; int s

感觉Java写一个窗口真心简单,很易上手

上学期学习了Java ,感觉Java写一个窗口真心简单,很易上手,也就难怪很多开发人员选择Java作为自己的开发编程语言.但是由于自身对windows的热爱,让我觉得c.c++语言才是我亲睐的编程语言,虽然难度大些,但是这才能体现能力所在.其实之前一直想自学一下win32,但是由于时间的显示和种种原因而耽搁了,于是今年暑假决心深入学习win32. 在学习过程中呢,我会在此留下自己的学习心得,当做自己的笔记.初学者可以借鉴,高手可以多多指教,呵呵…… 好了,今天开始做第一课的笔记吧: 学习Win3

关于java写一个单例类(面试手写题)

package com.shundong.javacore; /** * java写一个简单的单例类 * @author shundong * */ class Singleton { //使用一个类变量来缓存曾经创建的实例 private static Singleton instance; //对构造进行隐藏(private) private Singleton(){} /** * 提供一个静态方法 * 该方法加入了自定义控制 保证只产生一个Singleton对象 * @return 返回S

Java写一个简单学生管理系统

其实作为一名Java的程序猿,无论你是初学也好,大神也罢,学生管理系统一直都是一个非常好的例子,初学者主要是用数组.List等等来写出一个简易的学生管理系统,二.牛逼一点的大神则用数据库+swing来做一个有界面的学生管理系统.其实都并不会太难. 今天我就先写一个简单的用List来实现学生管理系统: 首先,管理系统是针对学生对象的,所以我们先把学生对象就写出来: package bean; public class Student { String name; String studentId;

《用Java写一个通用的服务器程序》01 综述

最近一两年用C++写了好几个基于TCP通信类型程序,都是写一个小型的服务器,监听请求,解析自定义的协议,处理请求,返回结果.每次写新程序时都把老代码拿来,修改一下协议解析部分和业务处理部分,然后就一个新的程序就诞生了.如此这般做了几回,就萌生了一个想法:是不是可以做一个通用的服务器程序,每次只要实现很少的代码就可以构建的一个新的服务器程序? 巧的是在用C++写代码的时候,我刚好碰到过一个叫做Push Framework的开源项目(在这里可以找到:www.pushframework.com),就是

学了编译原理能否用 Java 写一个编译器或解释器?

16 个回答 默认排序? RednaxelaFX JavaScript.编译原理.编程 等 7 个话题的优秀回答者 282 人赞同了该回答 能.我一开始学编译原理的时候就是用Java写了好多小编译器和解释器.其实用什么语言来实现编译器并不是最重要的部分(虽然Java也不是实现编译器最方便的语言),最初用啥语言都可以. 我在大学的时候,我们的软件工程和计算机科学的编译原理课的作业好像都是可以用Java来写的.反正我印象中我给这两门课写的作业都是用的Java. ===================