2009-03-13 11 views
6

Tengo un conjunto de imágenes que quiero agregar una después de otra y crear una película. Usaré Quicktime para Java para esto (estoy en un Mac).¿Cómo creo una película a partir de un conjunto de imágenes usando qtj y java?

He buscado en la web he encontrado muchos ejemplos que muestran cómo reproducir películas usando qtj, pero no encuentro ningún fragmento de código o tutorial que muestre cómo puedo crear una película cuadro por cuadro usando qtj?

Respuesta

1

No es una pieza relacionada con la exportación del código de ejemplo aquí:

http://developer.apple.com/samplecode/ImportExport/listing1.html

Se muestra cómo se puede abrir una sola nativa película QuickTime para leer y luego ser transmitida a un componente MovieExporter para crear un nuevo Película QuickTime de ella.

Para el código para importar un archivo de como fuente para escribir, ver

void importMedia() 

Para el código para exportar la fuente a una película QuickTime, ver

void run() 

Debería ser posible sin embargo, abra un archivo de imagen usando el mismo enfoque, siempre que el formato de archivo del archivo de entrada sea compatible con QuickTime (como fe BMP).

Debería poder escribir una secuencia de archivos de imagen usando la mayor parte de este código también. El único punto que tendrá que investigar es a qué método deberá llamar al anexar fotogramas adicionales a una película existente. Puede funcionar usando la misma API, pero lo más probable es que necesite usar otra llamada.

Si usted tiene que buscar por otro método que debería ser capaz de encontrar en la documentación de Qt Java de referencia que se encuentra aquí:

http://developer.apple.com/Java/Reference/1.4/Java14API_QTJ/

Es un corte y lo más probable es pobre en el rendimiento, pero podría en realidad trabajo.

Y ... nunca intenté esto (soy un QuickTime for Windows chico por operación) así que: lo siento, no hay garantía =).


Editar: Si usted está buscando una manera de escribir tramas a un cuarto de galón de la película utilizando un buffer de entrada existente en lugar de leer los datos de archivo mediante la API de QT, no debería haber APIs para esto como bien. Solo echa un vistazo a la documentación de referencia.


Editar 2: En realidad podría ser útil para revisar la C/C++ documentación de la API aquí, como nombres de los componentes y las llamadas parece seguir más o menos las mismas convenciones de nomenclatura (es decir, esto podría ayudar a excavar en busca de las llamadas de la API de Java que necesita) y los documentos C/C++ parecen ser más minuciosos en términos de proporcionar Guías y Cómo hacerlo como punto de partida.El C/C++ Docs se puede encontrar aquí:

http://developer.apple.com/referencelibrary/QuickTime/index.html

Las secciones más interesantes deben ser

  1. importación & exportación
  2. compresión & descompresión

¡Diviértete!


7

que he hecho esto a través de QTJ con la clase de MovieMakerprocessing bibliotecas (GPL). El procesamiento es java puro, aunque puede ocultarlo para principiantes.

pequeño tutorial: Descargar procesamiento, abrirlo, vaya a Sketch -> Mostrar bosquejo carpeta, cree una carpeta llamada "datos", y puso todas sus imágenes dentro de esa carpeta, llamada "filename01.gif" a través de " filename09.gif ". Pegar el código siguiente en el editor, y pulsar el botón Reproducir:

/** 
* Makes a QuickTime movie out of an array of images. 
*/ 

import processing.video.*; 

MovieMaker mm; 
PImage[] imageFrames; 
int index; 

void setup() { 
    size(320, 240); 
    int numFrames = 9; 
    imageFrames = new PImage[numFrames]; 
    for(int i = 0; i < imageFrames.length; i++) 
    { 
    imageFrames[i] = loadImage("filename" + nf(i+1,2) + ".gif"); 
    } 
    // Save uncompressed, at 15 frames per second 
    mm = new MovieMaker(this, width, height, "drawing.mov"); 
    // Or, set specific compression and frame rate options 
    //mm = new MovieMaker(this, width, height, "drawing.mov", 30, 
    //     MovieMaker.ANIMATION, MovieMaker.HIGH); 
} 

void draw() { 
    if(index < imageFrames.length) 
    { 
    // show the image 
    image(imageFrames[index], 0, 0); 
    // Add window's pixels to movie 
    mm.addFrame(); 
    index++; 
    } 
    else 
    { 
    mm.finish(); 
    // Quit running the sketch once the file is written 
    exit();  
    } 
} 

Esto creará un archivo "drawing.mov" de sus imágenes en la carpeta de dibujo. Si va al archivo -> exportar aplicación, y luego abre la carpeta de bocetos y navega a la carpeta application.macosx/source o application.windows/source, debe haber un archivo .java que tenga el código real, que debería verse de esta manera:

import processing.core.*; 
import processing.xml.*; 

import processing.video.*; 

import java.applet.*; 
import java.awt.*; 
import java.awt.image.*; 
import java.awt.event.*; 
import java.io.*; 
import java.net.*; 
import java.text.*; 
import java.util.*; 
import java.util.zip.*; 
import java.util.regex.*; 

public class movie2 extends PApplet { 

/** 
* Makes a QuickTime movie out of an array of images. 
*/ 



MovieMaker mm; 
PImage[] imageFrames; 
int index; 

public void setup() { 
    size(320, 240); 
    int numFrames = 9; 
    imageFrames = new PImage[numFrames]; 
    for(int i = 0; i < imageFrames.length; i++) 
    { 
    imageFrames[i] = loadImage("filename" + nf(i+1,2) + ".gif"); 
    } 
    // Save uncompressed, at 15 frames per second 
    mm = new MovieMaker(this, width, height, "drawing.mov"); 
    // Or, set specific compression and frame rate options 
    //mm = new MovieMaker(this, width, height, "drawing.mov", 30, 
    //     MovieMaker.ANIMATION, MovieMaker.HIGH); 
} 

public void draw() { 
    if(index < imageFrames.length) 
    { 
    // show the image 
    image(imageFrames[index], 0, 0); 
    // Add window's pixels to movie 
    mm.addFrame(); 
    index++; 
    } 
    else 
    { 
    mm.finish(); 
    // Quit running the sketch once the file is written 
    //exit();  
    println("done"); 
    } 
} 

    static public void main(String args[]) { 
    PApplet.main(new String[] { "--bgcolor=#e0dfe3", "movie2" }); 
    } 
} 

utilizar java puro, que tendrá que utilizar core.jar y video.jar de la carpeta de la aplicación de procesamiento en su ruta de clase, y luego compilar el código java. Aquí hay un function reference y un javadoc para la biblioteca de procesamiento. Here are the javadocs for the MovieMaker class. Si lo desea, puede ver el source en la clase MovieMaker.

HTH

Cuestiones relacionadas