Java小程序—錄屏小程序(上半場)


    做軟件的三個步驟:

        (1)做什么?

        (2)怎么做?

        (3)動手做!

    ok,我們今天要做的是一個錄屏軟件,那怎么做呢?首先,我們小時候都玩過一種小人書,就是當你快速翻動書頁時,書中的人物就會活靈活現的動起來。於是,我就想,所謂錄屏,就是將屏幕上的執行操作記錄下來。根據以前剪輯視屏的經驗,我們都知道視屏是由一幀一幀組成。於是,我又想到那我們把我們對屏幕的操作截圖下來,然后在一秒鍾內播放四張圖片,好像也可以做到播放視屏噢。

    那么,現在我們先用Java語言將屏幕截圖的這個功能完成。 Open—>Eclipse

    1.新建一個Java項目,名曰:recoder ,並且創建一個Class

      

    2.截屏代碼如下

package Frame;
/**
 * author:Black_YeJing
 */
import java.awt.AWTException;
import java.awt.FlowLayout;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Date;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;

public class Recoder extends JFrame {
	JButton start, stop;
	Boolean begin = false;
	File file;

	public Recoder() {
		setTitle("視屏錄制 v1.0");
		setSize(300, 80);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setResizable(false);
		setLocation(300, 100);
		start = new JButton("開始");
		// 添加事件監聽
		start.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				// 測驗是否監聽成功
				System.out.println("點擊了開始按鈕");
				// 獲取文件選擇器
				JFileChooser chooser = new JFileChooser();
				// 設置文件選擇器只能選擇文件夾
				chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
				// 顯示文件選擇器窗口
				int cnt = chooser.showSaveDialog(null);
				System.out.println(cnt);
				if (cnt == 0)// 0表示選擇了保存按鈕
				{
					// 獲取用戶選擇的文件夾
					file = chooser.getSelectedFile();
					// 判斷文件夾是否存在
					if (!file.exists()) {
						// 如果不存在就創建一個文件夾
						file.mkdirs();
					}
					begin = true;
					// 開啟線程
					new getScreen().start();
				}
			}
		});
		stop = new JButton("停止");
		stop.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				begin = false;
			}
		});
		add(start);
		add(stop);
		setLayout(new FlowLayout());

		setVisible(true);

	}

	private class getScreen extends Thread {
		public void run() {

			try {
				// 創建一個機器人
				Robot robot = new Robot();
				while (begin == true) {
					// 創建一個默認工具
					Toolkit tool = Toolkit.getDefaultToolkit();
					int x = tool.getScreenSize().width;
					int y = tool.getScreenSize().height;
					// 獲得一個x y值范圍的矩形圖形
					Rectangle rectangle = new Rectangle(x, y);
					// 緩存得到一張圖片
					BufferedImage bufferedImage = robot.createScreenCapture(rectangle);
					// 根據指定文件夾保存
					File subfile = new File(file, new Date().getTime() + ".jpg");
					// ImageIo進行寫到指定文件夾下
					ImageIO.write(bufferedImage, "jpeg", subfile);
					Thread.sleep(250);
				}
			} catch (AWTException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}

		}
	}

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

}

    上述代碼中,首先使用swing組件構建了一個簡易的錄屏界面。界面里只有“開始”,“停止按鈕。然后給這個兩個按鈕加上監聽事件。當用戶點擊開始的時候創建一個文件夾選擇器,當用戶點擊保存和取消的時候,會返回一個int值,分別是0和1,這時候我們就可以用這兩個值進行判斷,當值為0時,表示用戶進行保存操作,反之則是取消操作。接着再判斷用戶選擇的這個文件夾是否存在,若不存在便創建一個。之前我們創建了一個控制截屏開始及結束的標志位begin(默認值為false),當進行開始截屏的時候將begin變成true。

    這時候我們需要一個線程來控制我們一秒截4張圖,於是我們創建一個getScreen的線程方法。在線程方法中,我們創建了Java的一個常用工具類Toolkit,它可以獲取要錄取屏幕的長(x)與寬(y)。接着我們創建一個矩形類Rectangle 來保存圖片大小。然后我們創建一個機器人root,並用root中的截屏方法,將獲取的圖片保存在緩存中,然后給這張圖片以時間段的格式命名,最后再用圖片IO流將圖片寫到指定文件下,並且讓這個線程250ms執行一次。

    寫到這里,我們錄屏的上半場就結束了。下半場咱們來寫播放器。

    運行效果圖:

    

     
 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM