2008-12-23 13 views
2

J'ai essayé les deux options suivantes:Comment utiliser ImageIO pour enregistrer plusieurs BufferedImages dans un fichier

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: [email protected] 
    // 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++; 
} 

Aucun d'entre eux a travaillé, ce qui est la bonne façon d'enregistrer plusieurs images PNG dans un fichier?


Edit:

Vous avez raison, je trouve un programme java appelé Krut qui peut enregistrer des sessions d'écran, mais il utilise JPEGImageEncoder, la qualité d'image est pas aussi bon que je veux, donc Je me demande si je peux utiliser ImageIO pour encoder la séquence.

Si ImageIO ne peut pas le faire, ma question suivante serait de savoir s'il existe un PNGImageEncoder open source autonome que je peux utiliser pour le coder? Je sais qu'il y a des PNGImageEncoders open source, mais ils ont tendance à être embrouillés dans des projets et difficiles à obtenir tous les fichiers de support, des idées? Merci!

Répondre

2

Il semble que vous essayez de créer un fichier vidéo (MOV) en écrivant plusieurs fichiers PNG à la suite. Cela ne va pas fonctionner. Vous devrez probablement trouver une bibliothèque tierce pour encoder vos images dans un fichier vidéo (ce qui peut être une bonne question SO).

EDIT: Je devrais également noter que vous pouvez réellement obtenir la vidéo en écrivant plusieurs images JPG dans une rangée pour obtenir une forme de MJPEG (Motion JPEG) mais pour d'autres formats tels que MOV vous aurez besoin d'un codeur réel.

1

Qu'est-ce que vous essayez de faire? Ré-inventer MNG? Même si vous pouvez écrire plusieurs images PNG dans le même fichier, un fichier composé est compris par aucun programme (à l'exception de ceux que vous pourriez écrire). Si, comme suggéré par Marc, vous voulez faire un film, vous pouvez regarder QuickTime pour Java (QTJava). C'est la solution utilisée par Processing pour faire des films à partir d'animations/cadres. Il a plusieurs qualité/formats, du pire (mais petits fichiers) à la plus haute qualité (taille de fichier élevée comme résultat).

+0

Oh, je n'en ai jamais entendu parler, peut-il enregistrer des sessions d'écran et du son depuis un PC? Si vous regardez une vidéo avec son sur PC, est-ce qu'il peut enregistrer cela dans un film? Ou si vous voulez faire une vidéo d'instruction sur la façon d'utiliser un programme PC avec des clics de souris et votre voix à partir d'un microphone peut-il l'enregistrer? – Frank

+0

Avez-vous vraiment besoin de coder cela (par exemple pour intégrer dans certains logiciels)? Sinon, vous avez déjà beaucoup d'outils. Par exemple http://stackoverflow.com/questions/280362 ou http://stackoverflow.com/questions/24555 – PhiLho

Questions connexes