`

java 屏幕录制

    博客分类:
  • java
阅读更多

昨天一朋友问我屏幕录制怎么搞。我只知不断的切图,切图后如何转成视频文件不清楚。

结果今天告诉我弄成了。下面的代码没有试验过,是我朋友给我,我共享出来,免去以后要用到处找。哈哈!!!

 

切屏的,这个代码应该到处都是.

 

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包啦,附件已上传。

 

我也没具体试过,朋友说可行。空了再试试。

  • Jim2mov.jar (23 KB)
  • 描述: 图片转视频的jar
  • 下载次数: 257
分享到:
评论
1 楼 zouwu85 2011-03-31  
根本就不行

相关推荐

    java实现屏幕录制和播放(包含录音)

    用java写了个录视频的小程序, 录制后文件默认保存在系统临时目录, 录制视频和麦克风声音, 播放时回车键进入全屏, esc退出全屏, 希望能对有兴趣的朋友提供参考 已重写新版原生java生成FLV格式视频文件 请看...

    原生java生成FLV格式视频文件 实现屏幕录制+录音

    刚开始学java就一直在想用java生成视频 以前用java做了个屏幕录制加录音 不过生成的不是标准的视频文件 无法通过播放器播放 下载的人还不少 因此这次参考了FLV文件规范 通过原生java生成FLV视频文件 录屏加录音 ...

    ScreenRecoder:纯JAVA屏幕录制,可进行帧率控制

    ScreenRecoder 使用方法: 两台安卓设备处于同一网段,设备1先开启接收端,另一台输入设备1的IP地址,开启发送端即可 思维脑图 版本 V1.1.2 解决录屏时,截屏卡顿感 V1.1 修复部分bug,接收端与发送端合并. ...

    Java编写的屏幕录制回放类

    使用java编写的屏幕录制回放的类。主要方法是通过StartCapture.java类每隔一定频率录制屏幕上的动作,在StartPlayer.java类中进行回放。经过实例测试,完全可用。可方便的集成到您的工程应用中。

    屏幕录制插件免费版很方便.zip

    本文将深入探讨“屏幕录制插件免费版”的相关知识点,包括其在Web页面中的应用、功能特性、技术实现以及与Java和视频处理的关联。 首先,屏幕录制插件是一种浏览器扩展,它允许用户在浏览网页时方便地启动屏幕录制...

    java屏幕录像,鼠标轨迹录制,生成avi媒体文件

    本工程基于xylan提供的:java屏幕录像(包含鼠标轨迹)生成avi媒体文件工程修改而来,修复了其在win7 32/64位环境下不能录制屏幕及不能生成avi媒体的严重Bug。使用我上传的这个工程,导入到您的Eclipse或MyEclipse之后...

    安卓拍照上传录像监控录屏相关-可用于android5.0以上的屏幕录制.zip

    本资源“安卓拍照上传录像监控录屏相关-可用于android5.0以上的屏幕录制.zip”似乎提供了一套适用于Android 5.0及以上版本的屏幕录制解决方案。下面我们将详细探讨这些关键知识点。 1. **Android 5.0以上的屏幕录制...

    JAVA语言编写的屏幕录制工具

    用java编写的屏幕录制工具,用eclipse打开,可能target=android-18版本不一样,建议导入后更改成你自己的版本。在800x480分辨率的安卓机子上跑没问题,在其他高分辨率的手机上会出现图像未对其,还在进一步改进中。 ...

    NJ-ScreenRecorder:用Java开发的屏幕记录器

    NJ-ScreenRecorder 用 Java 开发的屏幕录制器 对于我的在线作品集,我想上传我迄今为止开发的所有游戏、网站和软件的屏幕录制视频。 我尝试了一些免费软件,如 CamStudio、Screen Recorder 等。但它们都无法以所需的...

    JScreenRecorder:一个基于Java的桌面屏幕录像机-开源

    JScreenRecorder是LGPL许可下的免费和开源的基于纯Java的屏幕录制软件。 到目前为止,可以使用以下功能:1.在Lesser GNU Public License下可以使用的免费软件2.记录自定义光标的全屏和选择性屏幕区域3.从一组128种...

    android5.0屏幕录制

    5.0下,使用MediaProjection进行屏幕录制的demo。 我比较懒,里面只放了实现的java类和xml,工程请自行创建。 另外这个demo源自android sample,我基本上没有改动,所以它其实只能算是屏幕捕捉,就是把屏幕内容在一...

    java实现录制屏幕

    实现录音录屏幕

    android屏幕录制以及rtmp推流

    在Android平台上,屏幕录制功能是开发者和用户都经常需要用到的一项技术。它允许用户或应用程序捕捉设备屏幕上的活动并保存为视频文件。同时,如果需要将这些录制内容分享或直播,RTMP(Real-Time Messaging ...

    JAVA 屏幕控制

    在Java编程语言中,"JAVA 屏幕控制"这一主题主要涵盖了两个方面:屏幕截图和屏幕录制,以及鼠标控制。这两个功能在许多应用场景中都非常有用,例如自动化测试、远程协助或者教学演示。接下来,我们将详细探讨这两个...

    java屏幕录像(包含鼠标轨迹)生成avi媒体文件

    支持鼠标轨迹录制 生成的avi可以通过暴风,射手的主流播放媒体播放 里面包含avi编码,大家可以一起研究探讨学习, /recordScreenAvi/src/com/ceict/constant/Constant.java 这个类里包含简单的配置,详细配置请看...

    将屏幕录制成gif格式

    让我们很轻松的制作出gif格式的教程,节省空间。

    基于Android环境的屏幕录制技术.pdf

    3. RecordService.java:实现屏幕录制的核心功能,包括设置录制分辨率、开始和结束录制、创建虚拟屏幕、初始化记录器,以及获取存储路径等。 此外,界面模块通常由HTML、SCSS和TypeScript组成,分别负责用户界面的...

    简单的java录制屏幕(截屏)并回放程序

    java 录制屏幕 截屏 并 回放 程序(把图片的保存路径名改了就能用)学习!

    屏幕录制与音频同步-Java实现指南

    本人利用Java制作了一款简易屏幕录像工具,能够同时捕捉屏幕画面与麦克风音频,录像文件自动保存至系统临时文件夹。观看录像时,可通过回车键切换至全屏模式,按ESC键恢复。此项目已升级,采用原生Java实现FLV视频...

Global site tag (gtag.js) - Google Analytics