Как использовать ImageIO для сохранения нескольких BufferedImages в файл - PullRequest
2 голосов
/ 23 декабря 2008

Я пробовал оба следующих варианта:

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-изображений в файл?


Изменить:

Вы правы, я нашел java-программу под названием Krut , которая может записывать сеансы экрана, но использует JPEGImageEncoder, качество изображения не такое хорошее, как я хочу, поэтому мне интересно, могу ли я использовать ImageIO для кодирования последовательности.

Если ImageIO не может этого сделать, мой следующий вопрос будет в том, есть ли автономный PNGImageEncoder с открытым исходным кодом, который я могу использовать для его кодирования? Я знаю, что существуют PNGImageEncoders с открытым исходным кодом, но они, как правило, запутываются в проектах, и из них трудно извлечь все вспомогательные файлы, есть идеи? Спасибо!

Ответы [ 2 ]

2 голосов
/ 23 декабря 2008

Похоже, вы пытаетесь создать видео (MOV) файл, записав несколько файлов PNG подряд. Это не сработает. Возможно, вам придется найти стороннюю библиотеку для кодирования ваших изображений в видеофайл (что само по себе может быть хорошим вопросом).

РЕДАКТИРОВАТЬ: Я также должен отметить, что вы можете получить видео, записав несколько изображений JPG подряд, чтобы получить форму MJPEG (Motion JPEG) , но для других форматов, таких как MOV, вы нам понадобится реальный кодировщик.

1 голос
/ 23 декабря 2008

Что вы пытаетесь сделать? Повторно изобретать МНГ? Даже если вы можете записать несколько изображений PNG в один и тот же файл, составной файл не будет понятен ни одной программе (кроме тех, которые вы можете написать).

Если, по предложению Марка, вы хотите снять фильм, вы можете посмотреть QuickTime для Java (QTJava). Это решение, используемое Обработка для создания фильмов из анимации / кадров. Он имеет несколько форматов / качества, от худшего (но небольших файлов) до самого высокого качества (как результат, с большими размерами файлов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...