我尝试了以下两个选项:
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,但是它们往往会混淆在项目中并且难以获得所有支持文件,任何想法?谢谢!
答案 0 :(得分:2)
看起来您正在尝试通过连续写入多个PNG文件来创建视频(MOV)文件。这不会起作用。您可能必须找到第三方库,将图像编码为视频文件(这本身可能是一个很好的问题)。
编辑:我还应该注意到,您实际上可以通过连续编写多个JPG图像来获取视频以获得MJPEG (Motion JPEG)的形式,但对于其他格式(如MOV),您将需要一个实际编码器。
答案 1 :(得分:1)
你想做什么?重新发明MNG?即使您可以在同一个文件中写入多个PNG图像,它也可以使任何程序都能理解复合文件(除了您可能编写的文件)。
如果按照Marc的建议,你想制作一部电影,你可能想看看QuickTime for Java(QTJava)。它是Processing用于从动画/帧中制作电影的解决方案。它有多种质量/格式,从最差(但是小文件)到最高质量(结果是高文件大小)。