如何使用ImageIO将多个BufferedImages保存到文件中

时间:2008-12-23 19:29:13

标签: java video javax.imageio

我尝试了以下两个选项:

1

BufferedImage Buffered_Image;
MemoryCacheImageOutputStream MemoryCache_OutputStream = 
     new MemoryCacheImageOutputStream(new FileOutputStream("C:/Test.mov",false));

while (notFinished)  // Main recording loop.
{
   Buffered_Image=robot.createScreenCapture();         // Capture Screen image.
   try { ImageIO.write(Buffered_Image,"png",MemoryCache_OutputStream); }
   catch (Exception e) { e.printStackTrace(); }
}

2

BufferedImage Buffered_Image;
ImageWriter writer;
try
{
  ImageOutputStream ios=ImageIO.createImageOutputStream(new File("C:/Test.mov"));
  Iterator writers=ImageIO.getImageWritersByFormatName("png");
  while (writers.hasNext())
  {
    writer=(ImageWriter)writers.next();
    writer.setOutput(ios);
    Out(writer.toString()+"  canInsertImage : "+writer.canInsertImage(0));
    // Got this: com.sun.imageio.plugins.png.PNGImageWriter@19fcc69  
    // canInsertImage : false
  }
}
catch (Exception e) { }

cntPics=0;
while (notFinished)  // Main recording loop.
{
   Buffered_Image=robot.createScreenCapture();         // Capture Screen image.
   writer.write(null,new IIOImage(Buffered_Image,null,null),null);
   if (writer.canInsertImage(-1)) {
         // Append image at highest index
         writer.writeInsert(-1,new IIOImage(Buffered_Image,null,null),null); 
   } else Out("Writer can’t append image Id : "+cntPics);
   cntPics++;
}

它们都不起作用,将多个PNG图像保存到文件的正确方法是什么?


修改

你是对的,我发现了一个名为Krut的java程序可以记录屏幕会话,但它使用JPEGImageEncoder,图像质量不如我想的那么好,所以我想知道我是否可以使用ImageIO来编码序列。

如果ImageIO无法做到,我的下一个问题是有一个独立的开源PNGImageEncoder,我可以用它来编码吗?我知道有开源的PNGImageEncoders,但是它们往往会混淆在项目中并且难以获得所有支持文件,任何想法?谢谢!

2 个答案:

答案 0 :(得分:2)

看起来您正在尝试通过连续写入多个PNG文件来创建视频(MOV)文件。这不会起作用。您可能必须找到第三方库,将图像编码为视频文件(这本身可能是一个很好的问题)。

编辑:我还应该注意到,您实际上可以通过连续编写多个JPG图像来获取视频以获得MJPEG (Motion JPEG)的形式,但对于其他格式(如MOV),您将需要一个实际编码器。

答案 1 :(得分:1)

你想做什么?重新发明MNG?即使您可以在同一个文件中写入多个PNG图像,它也可以使任何程序都能理解复合文件(除了您可能编写的文件)。

如果按照Marc的建议,你想制作一部电影,你可能想看看QuickTime for Java(QTJava)。它是Processing用于从动画/帧中制作电影的解决方案。它有多种质量/格式,从最差(但是小文件)到最高质量(结果是高文件大小)。