做軟件的三個步驟:
(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執行一次。
寫到這里,我們錄屏的上半場就結束了。下半場咱們來寫播放器。
運行效果圖: