java - 如何使用ImageIO将多个BufferedImage保存到文件中

标签 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程序可以记录屏幕 session ,但它使用JPEGImageEncoder,图像质量没有我想要的那么好,所以我想知道是否可以使用ImageIO来编码序列。

如果 ImageIO 做不到,我的下一个问题是是否有一个独立的开源 PNGImageEncoder 可以用来对其进行编码?我知道有开源的 PNGImageEncoders,但它们往往在项目中纠结,很难从中获取所有支持文件,有什么想法吗?谢谢!

最佳答案

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

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

关于java - 如何使用ImageIO将多个BufferedImage保存到文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/389831/

相关文章:

java - Gluon JavaFX 中有文件导航吗?

video - ffmpeg mkv 到 mp4 的转换有颜色

html - HTML5视频未在Chrome(ium)上显示包含非常大(本地)文件的图像

java - 在不知道图像名称的情况下将图像读入 ArrayList

java - SHP 打开 : datastore DataStoreFactorySpi is not an ImageIO SPI class

java - IllegalArgumentException 输入 == null

java - 在 Spring Boot 应用程序之间传递文件/流

java - 编写此代码块的更有效方法是什么

Java - 调用ArrayList中对象的方法

javascript - 当我将鼠标悬停在缩略图上时,如何为不同的视频进行视频交换?