一个简易的屏幕录制程序

一个简易的屏幕录制程序

其实就是一个简单的动画,不好,文件太大了。要是能进行完善就好,要求是生成一个文件,并用播放器播放,且这个文件要小。

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();
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值