Robot.rar ~ 116KB
ScreenShot.java ~ 420B - package Robot_Caputer;
- import java.awt.AWTException;
- import java.awt.EventQueue;
- public class ScreenShot {
-
- public static void main(String[] args) {
- EventQueue.invokeLater(new Runnable() {
-
-
- public void run() {
- try{
- ScreenShotWindow ssw=new ScreenShotWindow();
- ssw.setVisible(true);
- }catch(AWTException e){
- e.printStackTrace();
- }
- }
- });
- }
-
-
- }
复制代码
[文件] ScreenShotWindow.java ~ 5KB (13) - package Robot_Caputer;
- import images.*;
- import java.awt.AWTException;
- import java.awt.Color;
- import java.awt.Dimension;
- import java.awt.Graphics;
- import java.awt.GraphicsDevice;
- import java.awt.GraphicsEnvironment;
- import java.awt.Image;
- import java.awt.Rectangle;
- import java.awt.Robot;
- import java.awt.Toolkit;
- 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.JFileChooser;
- import javax.swing.JWindow;
- import javax.swing.filechooser.FileNameExtensionFilter;
- import javax.swing.filechooser.FileSystemView;
- //Jwindow 也是四大顶级组件之一,地位等同于JFrame,是一个无标题栏的窗口
- public class ScreenShotWindow extends JWindow {
-
-
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- private int orgx,orgy,endx,endy;
-
- /**image的作用:
- * 1.获取整个屏幕的截图*/
- private BufferedImage image=null;
- private BufferedImage tempImage=null;
- private BufferedImage saveImage=null;
-
- private ToolsWindow tools=null;
-
-
- public ScreenShotWindow() throws AWTException {
-
- //获取默认屏幕设备
- GraphicsEnvironment environment=GraphicsEnvironment.getLocalGraphicsEnvironment();
- GraphicsDevice screen=environment.getDefaultScreenDevice();
-
- //获取屏幕尺寸
- Dimension d=Toolkit.getDefaultToolkit().getScreenSize();
- this.setBounds(0, 0, d.width, d.height);
- //获取屏幕截图
- Robot robot=new Robot(screen);
- // Robot robot=new Robot();
-
- // image=new BufferedImage((int)d.getWidth(),(int)d.getHeight(),BufferedImage.TYPE_4BYTE_ABGR);
- 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;
-
- g.setColor(Color.RED);
- //保证图片矩形不被边框覆盖
- g.drawRect(x-1, y-1, width+1, height+1);
-
- //getSubimage(int x,int y,int w,int h)用于返回规定位置中的矩形图像到BufferedImag对象中
- 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) {
- //new RescaleOp(float[] scaleFactors, float[] offsets, RenderingHints hints)
- //构造一个具有所希望的缩放因子和偏移量的新 RescaleOp。
- //RescaleOp 是有关图像缩放的类
- //RescaleOp.filter(BufferedImage src,BufferedImage dest)
- //用于对源图像src进行缩放
- 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);
- }
- }
- }
复制代码
[文件] ToolsWindow.java ~ 1KB - package Robot_Caputer;
- import java.awt.BorderLayout;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.io.IOError;
- import java.io.IOException;
- import javax.swing.ImageIcon;
- import javax.swing.JButton;
- import javax.swing.JToolBar;
- import javax.swing.JWindow;
- public class ToolsWindow extends JWindow{
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- private ScreenShotWindow parent;
- public ToolsWindow(ScreenShotWindow parent,int x,int y) {
- this.parent=parent;
- this.init();
- //将组件移到(x,y)的位置
- 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("src/images/SaveIcon.gif"));
- saveButton.addActionListener(new ActionListener() {
-
- public void actionPerformed(ActionEvent e) {
- try{
- parent.saveImage();
- }catch(IOException ex1){
- ex1.printStackTrace();
-
- }
- }
- });
- toolBar.add(saveButton);
-
- //关闭按钮
- JButton closedButton=new JButton(new ImageIcon("src/images/closedIcon.gif"));
- closedButton.addActionListener(new ActionListener() {
-
- public void actionPerformed(ActionEvent e) {
- System.exit(0);
- }
- });
- toolBar.add(closedButton);
-
- this.add(toolBar, BorderLayout.NORTH);
-
- }
- }
复制代码 |