Necesito crear una película a partir de una serie de imágenes generadas. (Estoy creando las imágenes basadas en la salida de un programa de modelado de física.)¿Cómo puedo crear una película de Quicktime a partir de una serie de imágenes generadas?
Encontré la muestra de Apple en QtKitCreateMovie y la usé como punto de partida. En lugar de cargar jpgs desde el paquete de aplicaciones, dibujo un NSImage y luego agrego ese NSImage al objeto de película. Aquí está el código básico que usé para probar. mMovie
es una instancia de QTMovie
:
NSImage *anImage = [[NSImage alloc] initWithSize:NSMakeSize(frameSize, frameSize)];
[anImage lockFocus];
float blendValue;
for (blendValue = 0.0; blendValue <= 1.0; blendValue += 0.05) {
[[[NSColor blueColor] blendedColorWithFraction:blendValue ofColor:[NSColor redColor]] setFill];
[NSBezierPath fillRect:NSMakeRect(0, 0, frameSize, frameSize)];
[mMovie addImage:anImage forDuration:duration withAttributes:myDict];
}
[anImage unlockFocus];
[anImage release];
Esto funciona en OS X 10.5, pero en OS X 10.6 puedo obtener un índice gama allá de los límites excepción de la llamada a addImage:forDuration:withAttributes
: (http://openradar.appspot.com/radar?id=1146401)
Lo que es la forma correcta de crear una película en 10.6?
Además, aunque esto funciona por debajo de 10.5, me quedo sin memoria si intento crear una película con miles de fotogramas. Eso también me hace pensar que no estoy usando el enfoque correcto.
Puede hacer que su color se llena un poco más rápido mediante el uso de la función 'NSRectFill', que utiliza' NSCompositeCopy ', en lugar de' + [NSBezierPath fillRect:] ', que por defecto es' NSCompositeSourceOver'. El resultado no se verá diferente (dado que todos los colores con los que se llena tienen 1.0 alfa), pero Copiar, la última vez que lo marqué, fue considerablemente más rápido. –
Además, no hay muchas razones para establecer si el contexto debe ser anti-alias cuando no se está rellenando una ruta curva. –
Gracias, Peter. Cambié mis llamadas de '+ [NSBezierPath fillRect:]' a 'NSRectFill'. En mi código real, estoy dibujando caminos curvos. – SSteve