一个简易的屏幕录制程序
其实就是一个简单的动画,不好,文件太大了。要是能进行完善就好,要求是生成一个文件,并用播放器播放,且这个文件要小。
package chapter08;
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import com.sun.image.codec.jpeg.*;
import java.io.*;
@SuppressWarnings("serial") public class Screen extends JPanel implements Runnable {
@SuppressWarnings("unused") 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(25);
// 与录像时每秒帧数一致
}
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);
}
}
//记录屏幕、类似录像
package chapter08;
import javax.swing.*;
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;
@SuppressWarnings("unused") private JPEGImageEncoder encoder;
public WnetWScreenRecorder() {
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 WnetWScreenRecorder().start();
}
public void run() {
FileOutputStream fos = null;
while (true) {
try {
BufferedImage image = robot.createScreenCapture(rectangle);
// 捕获制定屏幕矩形区域
fos = new FileOutputStream("C://records//" + i + ".png");
JPEGCodec.createJPEGEncoder(fos).encode(image);
// 图像编码成JPEG
fos.close();
i = i + 1;
Thread.sleep(25);
// 每秒25帧
}
catch (Exception e) {
e.printStackTrace();
System.out.println(e);
try {
if (fos != null) fos.close();
}
catch (Exception e1) {
}
}
}
}
}
//记录屏幕、类似录像
package chapter08;
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import com.sun.image.codec.jpeg.*;
import java.io.*;
@SuppressWarnings("serial")
// 播放屏幕录像
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.setVisible(true);
}
public static void main(String[] args) {
new WnetWScreenRecordPlayer();
}
}