做软件的三个步骤:

(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执行一次。

写到这里,我们录屏的上半场就结束了。下半场咱们来写播放器。

运行效果图:

Java小程序—录屏小程序(上半场)的更多相关文章

  1. Java小程序—录屏小程序(下半场)

    下半场. 上半场,我们我们写了录屏的程序,那么下半场我们的任务是写一个播放器. 设计思路:播放器的思路就是将图片放在一个JScrollPane中顺序播放,所以还是得使用swing组件,并且仍然要使用线 ...

  2. 再见,付费录屏软件!我用70行Python代码打造免费版!

  3. appium+java(五)微信小程序自动化测试实践

    前言: 上一篇<appium+java(四)微信公众号自动化测试实践>中,尝试使用appium实现微信公众号自动化测试,接着尝试小程序自动化,以学院小程序为例 准备工作 1.java-cl ...

  4. 微信小程序 - 骨架屏

    骨架屏 - “与其等待网络加载,不如提前给点暗示” 注:不适用复杂交互效果 演示 示例解释以及使用全在index.wxml中,观看需了解组件使用. 示例下载:微信小程序-骨架屏演示

  5. Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战

    Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战 说明:Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战,优惠券是一种常见的促销方式,在规定的周期内购买对应商品类型和额度的商品 ...

  6. Java生鲜电商平台-小程序或者APP拼团功能设计与架构实战

    Java生鲜电商平台-小程序或者APP拼团功能设计与架构实战 说明:Java生鲜电商平台拼团是拉新引流的利器,将拼团运用到极致的就是拼多多,前期通过选取性价比高.实用性强的商品进行拼团,在社交圈(主要 ...

  7. 微信小程序代码大全 - 小程序开发福利

    小程序QQ交流群:131894955 小程序开发文档(Wepy) 小程序商城源码下载(weixin-app-shop) 小程序官网源码下载(weixin-app-cms) 微信管家平台JAVA版开源下 ...

  8. 微信小程序转百度小程序修改

    百度小程序对比微信小程序(最初版):[设备]项里没有内存监控.iBeacon.wifi.蓝牙.用户截屏.手机联系人.NFC[位置]项里没有打开地图选择位置[界面]项里没有绘图功能.没有节点信息获取功能 ...

  9. vue+uni-app商城实战 | 第一篇:【有来小店】微信小程序快速开发接入Spring Cloud OAuth2认证中心完成授权登录

    一. 前言 本篇通过实战来讲述如何使用uni-app快速进行商城微信小程序的开发以及小程序如何接入后台Spring Cloud微服务. 有来商城 youlai-mall 项目是一套全栈商城系统,技术栈 ...

随机推荐

  1. 一步一步实现一个Promise A+规范的 Promise

    2015年6月,ES2015(即ES6)正式发布后受到了非常多的关注.其中很重要的一点是 Promise 被列为了正式规范. 在此之前很多库都对异步编程/回调地狱实现了类 Promise 的应对方案, ...

  2. SRS之RTMP handshake

    1. SrsRtmpServer::handshake 位于 srs_rtmp_stack.cpp. int SrsRtmpServer::handshake() { int ret = ERROR_ ...

  3. logstash的index值可以为中文

    logstash中的 output中 有index属性,表示在elk中的主键标识. 在实际应用中,index的值不能为大写字母,可以是小写字母.数字.下划线.中文. 这里重点强调index为中文时,注 ...

  4. jQuery获取元素值以及设置元素值总结

    html(): 1:用户获取元素内的HTML内容,如果元素包含子标签,会以整体的形式返回 2:只获取第一个元素的内容 3:只获取普通元素的内容,表单元素内容无法获取 html(val): 1:用来设置 ...

  5. MySQL 插件之 连接控制插件(Connection-Control)

    目录 插件介绍 插件安装 插件配置 插件介绍 MySQL 5.7.17 以后提供了Connection-Control插件用来控制客户端在登录操作连续失败一定次数后的响应的延迟.该插件可有效的防止客户 ...

  6. Oracle 必要的后台进程

    Oracle 必要的后台进程 Table of Contents 1. 简述 2. 必要进程 2.1. 默认启动后台进程 2.2. 哪些进程不能杀 1 简述 oralce 每次大的版本变更,后台进程都 ...

  7. user_tab_columns和user_col_comments区别

    SELECT USER_TAB_COLUMNS.COLUMN_NAME, USER_COL_COMMENTS.COMMENTS, CASE WHEN INSTR(USER_TAB_COLUMNS.DA ...

  8. 集群中配置多台机器之间 SSH 免密码登录

    集群中配置多台机器之间 SSH 免密码登录 问题描述 由于现在项目大多数由传统的单台机器部署,慢慢转变成多机器的集群化部署. 但是,这就涉及到机器间的 SSH 免密码互通问题. 当集群机器比较多的时候 ...

  9. 2019 1月 第三次java基础有感

    毕业半年了,一直在游戏公司做游戏服务器开发,java语言. 工作中,写着写着代码,接触java多了,有时候就会发现自己的java基础会不够用.以前实习的时候也体会到一次,然后过了一遍基础.现在正式工作 ...

  10. typeScript入门配置

    typeScript是有微软开发的一款开源的编程语言. TypeScript是JavaScript的一个超集,从今天数以百万计的JavaScript开发者所熟悉的语法和语义开始.可以使用现有的Java ...