zoukankan      html  css  js  c++  java
  • 用JAVA捕获屏幕、屏幕录像、播放

    http://blog.csdn.net/njchenyi/article/details/447554

    用JAVA捕获屏幕、屏幕录像、播放

    标签: javaexceptionimageimportnullstring
     分类:
     
    //记录屏幕、类似录像
    package com.wnetw.project.media;
     
    import java.awt.*;
    import java.awt.image.*;
    import com.sun.image.codec.jpeg.*;
    import java.io.*;

     
    public class WnetWScreenRecorder extends Thread{

      private Dimension screenSize;
      private Rectangle rectangle;
      private Robot robot;
      private long i = 0;
      private JPEGImageEncoder encoder;
     
      public WnetWScreenRecord() {
        screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        rectangle = new Rectangle(screenSize);//可以指定捕获屏幕区域
        try{
          robot = new Robot();
        }catch(Exception e){
          e.printStackTrace();
          System.out.println(e);
        }
      }
     
      public static void main(String[] args) {
        new WnetWScreenRecord().start();
      }
     
      public void run(){
        FileOutputStream fos = null;
        while (true){
          try{
            BufferedImage image = robot.createScreenCapture(rectangle);//捕获制定屏幕矩形区域
            fos = new FileOutputStream("C://records//" + i + ".jpg");
            JPEGCodec.createJPEGEncoder(fos).encode(image);//图像编码成JPEG
            fos.close();
            i = i + 1;
            Thread.sleep(40);//每秒25帧
          }catch(Exception e){
            e.printStackTrace();
            System.out.println(e);
            try{
              if (fos != null)fos.close();
            }catch(Exception e1){}
          }
        }
      }
    }

    //播放屏幕录像

    package com.wnetw.project.media;

    import java.awt.*;
    import javax.swing.*;
    import java.io.*;

    public class WnetWScreenRecordPlayer extends JFrame{
      BorderLayout borderLayout1 = new BorderLayout();
      Dimension screenSize;

      public WnetWScreenRecordPlayer() {
     super();
        screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        this.setSize(screenSize);
        Screen p = new Screen();
        Container c = this.getContentPane();
        c.setLayout(borderLayout1);
        c.add(p,"Center");
        new Thread(p).start();
        this.show();
      }

      public static void main(String[] args){
        new WnetWScreenRecordPlayer();
      }

    }

    class Screen extends JPanel implements Runnable{
      private BorderLayout borderLayout1 = new BorderLayout();
      private Image cimage;

      public void run(){
     int i = 0;
        while(true){
          try{
            cimage = loadImage(i + ".jpg");
            i = i + 1;
            repaint();
            Thread.sleep(40);//与录像时每秒帧数一致

          }catch(Exception e){
            e.printStackTrace();
            System.out.println(e);
          }
        }
      }

      public Image loadImage(String name) {
        Toolkit tk = Toolkit.getDefaultToolkit();
        Image image = null;
        image = tk.getImage("C:/records/" + name);
        MediaTracker mt = new MediaTracker(this);
        mt.addImage(image, 0);
        try {
          mt.waitForID(0);
        }catch (Exception e) {
          e.printStackTrace();
          System.out.println(e);
        }
        return image;
      }

      public Screen() {
        super();
        this.setLayout(null);
      }

      public void paint(Graphics g){
        super.paint(g);
        Graphics2D g2 = (Graphics2D) g;
        g2.drawImage(cimage, 0, 0, null);
      }
    }

     
     
  • 相关阅读:
    (组合游戏)SG函数与SG定理详解
    第十六场快乐数学赛
    Codeforces Round #681 (Div. 2, based on VK Cup 2019-2020
    L1-048 矩阵A乘以B (15分)
    华东交通大学2019年ACM 双基 程序设计竞赛 个人题解(A
    第十五次开心场
    L1-020 帅到没朋友 (20分)
    L1-018 大笨钟 (10分)
    Educational Codeforces Round 97 (Rated for Div. 2) (A
    [Python自学] day-6 (编程范式、类、继承)
  • 原文地址:https://www.cnblogs.com/donaldlee2008/p/5423670.html
Copyright © 2011-2022 走看看