2

我尝试了以下两个选项:

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,但它们往往被项目缠结,很难从中获取所有支持文件,有什么想法吗?谢谢!

4

2 回答 2

2

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

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

于 2008-12-23T19:57:58.357 回答
1

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

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

于 2008-12-23T20:49:18.580 回答