连续播放按时间排序的截图 模拟视频播放
2010-12-25 18:00
246 查看
特别感谢monitor兄台的技术援助!
monitor兄台CSDN的博客地址:http://hi.csdn.net/space-3386597.html
monitor兄台于此相关的博文地址(标题:Java循环播放图片问题):http://blog.csdn.net/monitor1394/archive/2010/12/23/6093765.aspx
录制代码
播放代码
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; } }
相关文章推荐
- 连续播放按时间排序的截图 模拟视频播放
- 前段时间的学习总结(视频截图笔记加归类总结知识点)
- iOS-获取视频长度和当前播放时间
- 音频、视频时间戳计算及每帧播放时间
- 使用WindowManager.addView()模拟直播软件悬浮窗口播放视频
- 如何实现videoView的自动连续播放视频文件
- 获取当前视频播放时间
- 【Android】实验6 在应用程序中播放音频和视频 截止提交报告时间2016.4.21
- VideoView实现视频无缝连续播放
- C++获取flv视频文件的播放时间
- matlab 如何在GUI 上 暂停和暂停后连续播放视频
- 连续播放多个视频音频文件
- SurfaceView播放视频的截图
- 设置video.js多视频连续播放
- 优酷、土豆、56获取视频截图和标题和播放swf代码
- iOS-获取视频长度和当前播放时间
- 第40章 连续时间系统的模拟
- 第四天:鼠标截图+滑动条播放视频实例
- 网页嵌入快播播放器并实现服务器视频文件连续播放
- html5及android多个视频连续播放问题