您的位置:首页 > 其它

连续播放按时间排序的截图 模拟视频播放

2010-12-25 18:00 316 查看
特别感谢monitor兄台的技术援助!

monitor兄台CSDN的博客地址:http://hi.csdn.net/space-3386597.html

monitor兄台于此相关的博文地址(标题:Java循环播放图片问题):http://blog.csdn.net/monitor1394/archive/2010/12/23/6093765.aspx

 

录制代码

package code.record;

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 javax.imageio.ImageIO;

class ImagesCapture {
private String fileName; // 文件的前缀
private String defaultName = "GuiCamera";
static int serialNum = 0;
private String imageFormat; // 图像文件的格式
private String defaultImageFormat = "png";
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();

public ImagesCapture() {
fileName = defaultName;
imageFormat = defaultImageFormat;
}

public ImagesCapture(String s, String format) {
fileName = s;
imageFormat = format;
}

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! ");
} catch (Exception ex) {
System.out.println(ex);
}
}

public static void main(String[] args) {
ImagesCapture cam = new ImagesCapture("Test", "JPG");
//		cam.snapShot();
while(true) {
cam.snapShot();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}


 

播放代码

package code.play;

import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.InputStream;

import javax.imageio.ImageIO;
import javax.swing.JPanel;

// 这个程序不行,需要调整JVM内存的大小,-Xmx512M 才够支持初始化时加载120张左右的截图!
// 而且行能很不稳定,垃圾收集器一工作起来不仅该程序而且整机都慢如蜗牛(-Xmx1024M情况下)

// 进一步拓展,依据MP4的原理对图片进行压缩!制作进度条、暂停和启动,GUI化!
public class ImagePlayer extends Frame {
private static final long serialVersionUID = 8055029906280922502L;
// 从1到270共270张图片
//	private static final int COUNT = 270;
private static final int COUNT = 179;

public ImagePlayer() {
this.setSize(1024, 768);
this.setLocation(50, 50);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(1);
}
});
DisplayJPanel djp = new DisplayJPanel(ImagePlayer.COUNT);
djp.setDelay(100);	// 缺省为50
djp.setWork(true);
this.add(djp);
new Thread(djp).start();
this.setVisible(true);
}

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

class DisplayJPanel extends JPanel implements Runnable {
private static final long serialVersionUID = 7881859204259181796L;
/** 背景颜色 */
private final Color B_COLOR = Color.LIGHT_GRAY;
/** 起始X坐标 */
private final int WORK_X = -150;
/** 起始Y坐标 */
private final int WORK_Y = -70;
/** 当前要画的图片 */
private BufferedImage currentImage = null;
/** 播放延时 */
private int delay = 50;
/** 是否播放 */
private boolean work = true;
/** 是否暂停 */
private boolean stop = false;
private int frameNumber = 0;
private int frameCount;

public DisplayJPanel(int frameCount) {
this.frameCount = frameCount;
}

public void run() {
while (work) {
if (stop) {
sleep(1000);
continue;
}
repaint();
sleep(delay);
}
}

@Override
public void paintComponent(Graphics g) {
g.setColor(B_COLOR);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
if(frameNumber < frameCount) {
// ①
//			String picPath = "D://Program Files//eclipse3.3//workspace//" +
//				"PictureVideoPlayer//src//jpgImages//Test" + (frameNumber + 1) + ".JPG";
// ②
//			String picPath = "src/jpgImages/Test" + (frameNumber + 1) + ".JPG";

// ③
String picPath = "jpgImages2/Test" + (frameNumber + 1) + ".JPG";
InputStream is = ImagePlayer.class.getClassLoader().getResourceAsStream(picPath);
frameNumber ++;
try {
//				currentImage = ImageIO.read(new FileInputStream(picPath));
currentImage = ImageIO.read(is);
} catch (Exception e) {
System.out.println("加载图片时出现错误,程序即将退出!");
System.exit(1);
}
g.drawImage(currentImage, WORK_X, WORK_Y, null);
} else {
frameNumber = 0;
}
}

private void sleep(int s) {
try {
Thread.sleep(s);
} catch (Exception e) {
}
}

public void setDelay(int delay) {
this.delay = delay;
}

public void setWork(boolean work) {
this.work = work;
}

public void setStop(boolean stop) {
this.stop = stop;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息