昨天一朋友问我屏幕录制怎么搞。我只知不断的切图,切图后如何转成视频文件不清楚。
结果今天告诉我弄成了。下面的代码没有试验过,是我朋友给我,我共享出来,免去以后要用到处找。哈哈!!!
切屏的,这个代码应该到处都是.
package org;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.awt.event.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import javax.swing.*;
import javax.imageio.ImageIO;
/*******************************************************************
* 该JavaBean可以直接在其他Java应用程序中调用,实现屏幕的"拍照"
* This JavaBean is used to snapshot the GUI in a
* Java application! You can embeded
* it in to your java application source code, and us
* it to snapshot the right GUI of the application
* @see javax.ImageIO
* @author liluqun ([email]liluqun@263.net[/email])
* @version 1.0
*
*****************************************************/
public class GuiCamera extends JFrame implements ActionListener, Runnable
{
private String fileName; //文件的前缀
private String defaultName = "GuiCamera";
static int serialNum=0;
private String imageFormat; //图像文件的格式
private String defaultImageFormat="JPEG";
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
static String showname=null;
static int shownum=1;
Thread ko_Thread;
int flag;
JButton jb1 = new JButton("开始");
JButton jb2 = new JButton("暂停");
JButton jb3= new JButton("停止");
JButton jb4=new JButton("播放录象");
JButton jb5=new JButton("选择");
JPanel jp1= new JPanel();
JLabel label= new JLabel();
public void paint(Graphics g){
if(showname!=null){
Image image=getToolkit().getImage(showname);//声明一个成员变量
g.drawImage(image,0,0,1440,860,this);
}
}
/********************************************************************************************************/
//线程开始
public void start(){
if(ko_Thread==null){
ko_Thread=new Thread(this);
ko_Thread.start();
}
}
//结束
public void stop(){
if(ko_Thread!=null){
ko_Thread=null;
}
}
//执行
public void run(){
Thread thisThread=Thread.currentThread();
while(ko_Thread==thisThread){
if(flag==0)
snapShot();
if(flag==1){
showname="hello"+shownum+".JPEG";
if(shownum<serialNum)
shownum++;
repaint();//重画
}
try{
Thread.sleep(400);
}catch(InterruptedException e){}
}
}
/*************************************************************************************************/
/****************************************************************
* 默认的文件前缀为GuiCamera,文件格式为JPEG格式
* The default construct will use the default
* Image file surname "GuiCamera",
* and default image format "JPEG"
****************************************************************/
public GuiCamera() {
fileName = defaultName;
imageFormat=defaultImageFormat;
}
/****************************************************************
* @param s the surname of the snapshot file
* @param format the format of the image file,
* it can be "jpg" or "png"
* 本构造支持JPG和PNG文件的存储
****************************************************************/
public GuiCamera(String s,String format) {
super("欢迎使用java版的屏幕录象软件,有待改进");
fileName = s;
imageFormat=format;
this.setSize(1440,900);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.add(jp1,BorderLayout.SOUTH);
this.add(label,BorderLayout.CENTER);
this.setVisible(true);
jp1.setLayout(new GridLayout(1,4));
jp1.add(jb1);
jp1.add(jb2);
jp1.add(jb3);
jp1.add(jb4);
jb1.addActionListener(this);
jb4.addActionListener(this);
jb3.addActionListener(this);
ImageIcon icon = new ImageIcon();
label.setIcon(icon);
jp1.setVisible(true);
label.setVisible(true);
}
public void actionPerformed(ActionEvent e){
Object source=e.getSource();
if(source==jb1){
//ImageIcon icon = new ImageIcon("hello1.JPEG");
//label.setIcon(icon);
//snapShot();
flag=0;//录制标记
start();
}
if(source==jb3){
stop();
}
if(source==jb4){
flag=1;//播放标记
start();
}
}
/****************************************************************
* 对屏幕进行拍照
* snapShot the Gui once
****************************************************************/
public void snapShot() {
try {
//拷贝屏幕到一个BufferedImage对象screenshot
BufferedImage screenshot = (new Robot()).createScreenCapture(new
Rectangle(0, 0, (int) d.getWidth(), (int) d.getHeight()));
serialNum++;
//根据文件前缀变量和文件格式变量,自动生成文件名
String name=fileName+String.valueOf(serialNum)+"."+imageFormat;
File f = new File(name);
//System.out.print("Save File "+name);
//将screenshot对象写入图像文件
ImageIO.write(screenshot, imageFormat, f);
//System.out.print("..Finished!\n");
//System.out.print(d.getWidth()+" "+d.getHeight());
}
catch (Exception ex) {
System.out.println(ex);
}
}
public static void main(String[] args)
{
GuiCamera cam= new GuiCamera("C:\\record\\", "JPEG");
//cam.snapShot();
}
}
这个就厉害了,好像是把图片弄成视频的样子。
package org;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Comparator;
import org.jim2mov.core.DefaultMovieInfoProvider;
import org.jim2mov.core.ImageProvider;
import org.jim2mov.core.Jim2Mov;
import org.jim2mov.core.MovieInfoProvider;
import org.jim2mov.utils.MovieUtils;
public class JpgToAvi {
public static void main(String[] args) throws Exception{
//jpgs目录放置jpg图片,图片文件名为(1.jpg,2.jpg...)
final File[] jpgs = new File("C:\\record\\").listFiles();
//对文件名进行排序(本示例假定文件名中的数字越小,生成视频的帧数越靠前)
Arrays.sort(jpgs,new Comparator<File>(){
public int compare(File file1, File file2) {
String numberName1 = file1.getName().replace(".jpg", "");
String numberName2 = file2.getName().replace(".jpg", "");
return new Integer(numberName1) - new Integer(numberName2);
}
});
DefaultMovieInfoProvider dmip = new DefaultMovieInfoProvider("dst.avi");
dmip.setFPS(1); //设置每秒帧数
dmip.setNumberOfFrames(jpgs.length); //总帧数
dmip.setMWidth(100);
dmip.setMHeight(200);
new Jim2Mov(new ImageProvider(){
public byte[] getImage(int frame) {
try {
//设置压缩比
return MovieUtils.convertImageToJPEG((jpgs[frame]), 1.0f);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}, dmip, null).saveMovie(MovieInfoProvider.TYPE_AVI_MJPEG);
}
}
可以看见,需要一个jar包啦,附件已上传。
我也没具体试过,朋友说可行。空了再试试。
分享到:
相关推荐
用java写了个录视频的小程序, 录制后文件默认保存在系统临时目录, 录制视频和麦克风声音, 播放时回车键进入全屏, esc退出全屏, 希望能对有兴趣的朋友提供参考 已重写新版原生java生成FLV格式视频文件 请看...
刚开始学java就一直在想用java生成视频 以前用java做了个屏幕录制加录音 不过生成的不是标准的视频文件 无法通过播放器播放 下载的人还不少 因此这次参考了FLV文件规范 通过原生java生成FLV视频文件 录屏加录音 ...
ScreenRecoder 使用方法: 两台安卓设备处于同一网段,设备1先开启接收端,另一台输入设备1的IP地址,开启发送端即可 思维脑图 版本 V1.1.2 解决录屏时,截屏卡顿感 V1.1 修复部分bug,接收端与发送端合并. ...
用java编写的屏幕录制工具,用eclipse打开,可能target=android-18版本不一样,建议导入后更改成你自己的版本。在800x480分辨率的安卓机子上跑没问题,在其他高分辨率的手机上会出现图像未对其,还在进一步改进中。 ...
使用java编写的屏幕录制回放的类。主要方法是通过StartCapture.java类每隔一定频率录制屏幕上的动作,在StartPlayer.java类中进行回放。经过实例测试,完全可用。可方便的集成到您的工程应用中。
本文将深入探讨“屏幕录制插件免费版”的相关知识点,包括其在Web页面中的应用、功能特性、技术实现以及与Java和视频处理的关联。 首先,屏幕录制插件是一种浏览器扩展,它允许用户在浏览网页时方便地启动屏幕录制...
本工程基于xylan提供的:java屏幕录像(包含鼠标轨迹)生成avi媒体文件工程修改而来,修复了其在win7 32/64位环境下不能录制屏幕及不能生成avi媒体的严重Bug。使用我上传的这个工程,导入到您的Eclipse或MyEclipse之后...
本资源“安卓拍照上传录像监控录屏相关-可用于android5.0以上的屏幕录制.zip”似乎提供了一套适用于Android 5.0及以上版本的屏幕录制解决方案。下面我们将详细探讨这些关键知识点。 1. **Android 5.0以上的屏幕录制...
NJ-ScreenRecorder 用 Java 开发的屏幕录制器 对于我的在线作品集,我想上传我迄今为止开发的所有游戏、网站和软件的屏幕录制视频。 我尝试了一些免费软件,如 CamStudio、Screen Recorder 等。但它们都无法以所需的...
JScreenRecorder是LGPL许可下的免费和开源的基于纯Java的屏幕录制软件。 到目前为止,可以使用以下功能:1.在Lesser GNU Public License下可以使用的免费软件2.记录自定义光标的全屏和选择性屏幕区域3.从一组128种...
5.0下,使用MediaProjection进行屏幕录制的demo。 我比较懒,里面只放了实现的java类和xml,工程请自行创建。 另外这个demo源自android sample,我基本上没有改动,所以它其实只能算是屏幕捕捉,就是把屏幕内容在一...
实现录音录屏幕
在Android平台上,屏幕录制功能是开发者和用户都经常需要用到的一项技术。它允许用户或应用程序捕捉设备屏幕上的活动并保存为视频文件。同时,如果需要将这些录制内容分享或直播,RTMP(Real-Time Messaging ...
在Java编程语言中,"JAVA 屏幕控制"这一主题主要涵盖了两个方面:屏幕截图和屏幕录制,以及鼠标控制。这两个功能在许多应用场景中都非常有用,例如自动化测试、远程协助或者教学演示。接下来,我们将详细探讨这两个...
支持鼠标轨迹录制 生成的avi可以通过暴风,射手的主流播放媒体播放 里面包含avi编码,大家可以一起研究探讨学习, /recordScreenAvi/src/com/ceict/constant/Constant.java 这个类里包含简单的配置,详细配置请看...
让我们很轻松的制作出gif格式的教程,节省空间。
3. RecordService.java:实现屏幕录制的核心功能,包括设置录制分辨率、开始和结束录制、创建虚拟屏幕、初始化记录器,以及获取存储路径等。 此外,界面模块通常由HTML、SCSS和TypeScript组成,分别负责用户界面的...
java 录制屏幕 截屏 并 回放 程序(把图片的保存路径名改了就能用)学习!
本人利用Java制作了一款简易屏幕录像工具,能够同时捕捉屏幕画面与麦克风音频,录像文件自动保存至系统临时文件夹。观看录像时,可通过回车键切换至全屏模式,按ESC键恢复。此项目已升级,采用原生Java实现FLV视频...