我尝试了以下两个选项:
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/