【问题标题】:How to use ImageIO to save multiple BufferedImages to a file如何使用 ImageIO 将多个 BufferedImage 保存到一个文件中
【发布时间】:2008-12-23 19:29:13
【问题描述】:

我尝试了以下两个选项:

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

【问题讨论】:

    标签: java video javax.imageio


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 哦,我从来没有听说过,它可以从电脑录制屏幕会话和声音吗?如果您在PC上观看有声视频,可以将其录制成电影吗?或者,如果您想制作一个关于如何通过鼠标点击使用 PC 程序并通过麦克风发出声音的教学视频,它可以录制吗?
      • 您真的需要编写代码(例如,集成到某些软件中)吗?如果没有,你已经有很多工具了。例如stackoverflow.com/questions/280362stackoverflow.com/questions/24555
      猜你喜欢
      • 1970-01-01
      • 2012-09-22
      • 1970-01-01
      • 2019-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多