zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

JAVA 实现 示例 屏幕 区域 截图
2023-06-13 09:15:24 时间

这是一个java版的截图程序

复制代码代码如下:


packagecom.hongyuan.test;

importjava.awt.AWTException;
importjava.awt.BorderLayout;
importjava.awt.Color;
importjava.awt.Dimension;
importjava.awt.EventQueue;
importjava.awt.FlowLayout;
importjava.awt.Graphics;
importjava.awt.Image;
importjava.awt.Rectangle;
importjava.awt.Robot;
importjava.awt.Toolkit;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.MouseAdapter;
importjava.awt.event.MouseEvent;
importjava.awt.event.MouseMotionAdapter;
importjava.awt.image.BufferedImage;
importjava.awt.image.RescaleOp;
importjava.io.File;
importjava.io.IOException;
importjava.text.SimpleDateFormat;
importjava.util.Date;

importjavax.imageio.ImageIO;
importjavax.swing.ImageIcon;
importjavax.swing.JButton;
importjavax.swing.JFileChooser;
importjavax.swing.JToolBar;
importjavax.swing.JWindow;
importjavax.swing.filechooser.FileNameExtensionFilter;
importjavax.swing.filechooser.FileSystemView;

publicclassScreenShotTest{

 publicstaticvoidmain(String[]args){

  EventQueue.invokeLater(newRunnable(){ 
   @Override
   publicvoidrun(){
    try{
     ScreenShotWindowssw=newScreenShotWindow();
     ssw.setVisible(true);
    }catch(AWTExceptione){
     e.printStackTrace();
    }
   }
  });
 }

}
/*
 *截图窗口
 */
classScreenShotWindowextendsJWindow

 privateintorgx,orgy,endx,endy;
   privateBufferedImageimage=null;
   privateBufferedImagetempImage=null;
   privateBufferedImagesaveImage=null;

   privateToolsWindowtools=null;

 publicScreenShotWindow()throwsAWTException{
  //获取屏幕尺寸
  Dimensiond=Toolkit.getDefaultToolkit().getScreenSize();
  this.setBounds(0,0,d.width,d.height);

  //截取屏幕
  Robotrobot=newRobot();
  image=robot.createScreenCapture(newRectangle(0,0,d.width,d.height));

  this.addMouseListener(newMouseAdapter(){
   @Override
   publicvoidmousePressed(MouseEvente){
    //鼠标松开时记录结束点坐标,并隐藏操作窗口
            orgx=e.getX();
            orgy=e.getY();

            if(tools!=null){
             tools.setVisible(false);
            }
   }
   @Override
   publicvoidmouseReleased(MouseEvente){
    //鼠标松开时,显示操作窗口
    if(tools==null){
     tools=newToolsWindow(ScreenShotWindow.this,e.getX(),e.getY());
    }else{
     tools.setLocation(e.getX(),e.getY());
    }
    tools.setVisible(true);
    tools.toFront();
   }
  });

  this.addMouseMotionListener(newMouseMotionAdapter(){

   @Override
   publicvoidmouseDragged(MouseEvente){
    //鼠标拖动时,记录坐标并重绘窗口
               endx=e.getX();
               endy=e.getY();

               //临时图像,用于缓冲屏幕区域放置屏幕闪烁
               ImagetempImage2=createImage(ScreenShotWindow.this.getWidth(),ScreenShotWindow.this.getHeight());
               Graphicsg=tempImage2.getGraphics();
               g.drawImage(tempImage,0,0,null);
               intx=Math.min(orgx,endx);
               inty=Math.min(orgy,endy);
               intwidth=Math.abs(endx-orgx)+1;
               intheight=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
   publicvoidpaint(Graphicsg){
       RescaleOpro=newRescaleOp(0.8f,0,null);
       tempImage=ro.filter(image,null);
       g.drawImage(tempImage,0,0,this);
   }
   //保存图像到文件
 publicvoidsaveImage()throwsIOException{
  JFileChooserjfc=newJFileChooser();
  jfc.setDialogTitle("保存");

  //文件过滤器,用户过滤可选择文件
  FileNameExtensionFilterfilter=newFileNameExtensionFilter("JPG","jpg");
  jfc.setFileFilter(filter);

  //初始化一个默认文件(此文件会生成到桌面上)
  SimpleDateFormatsdf=newSimpleDateFormat("yyyymmddHHmmss");
    StringfileName=sdf.format(newDate());
    FilefilePath=FileSystemView.getFileSystemView().getHomeDirectory();
    FiledefaultFile=newFile(filePath+File.separator+fileName+".jpg");
    jfc.setSelectedFile(defaultFile);

  intflag=jfc.showSaveDialog(this);
  if(flag==JFileChooser.APPROVE_OPTION){
   Filefile=jfc.getSelectedFile();
   Stringpath=file.getPath();
   //检查文件后缀,放置用户忘记输入后缀或者输入不正确的后缀
   if(!(path.endsWith(".jpg")||path.endsWith(".JPG"))){
    path+=".jpg";
   }
   //写入文件
   ImageIO.write(saveImage,"jpg",newFile(path));
   System.exit(0);
  }
 }
}
/*
 *操作窗口
 */
classToolsWindowextendsJWindow
{
 privateScreenShotWindowparent;

 publicToolsWindow(ScreenShotWindowparent,intx,inty){
  this.parent=parent;
  this.init();
  this.setLocation(x,y);
  this.pack();
  this.setVisible(true);
 }

 privatevoidinit(){

  this.setLayout(newBorderLayout());
  JToolBartoolBar=newJToolBar("Java截图");

  //保存按钮
  JButtonsaveButton=newJButton(newImageIcon("images/save.gif"));
  saveButton.addActionListener(newActionListener(){ 
   @Override
   publicvoidactionPerformed(ActionEvente){
    try{
     parent.saveImage();
    }catch(IOExceptione1){
     e1.printStackTrace();
    }
   }
  });
  toolBar.add(saveButton);

  //关闭按钮
  JButtoncloseButton=newJButton(newImageIcon("images/close.gif"));
  closeButton.addActionListener(newActionListener(){
   @Override
   publicvoidactionPerformed(ActionEvente){
    System.exit(0);
   }
  });
  toolBar.add(closeButton);

  this.add(toolBar,BorderLayout.NORTH);
 }
}