2011-04-11 17 views
10

Estoy usando NSImageView para mostrar un GIF animado con alrededor de 80 fotogramas, cada fotograma tiene 20ms de longitud. NSImageView puede mostrar la animación GIF 'fuera de la caja', pero el problema es que necesita demasiada CPU, alrededor del 10% continuamente (en mi núcleo i5 proc). Los instrumentos muestran que gasta una gran cantidad de tiempo de CPU decodificando el GIF.GIF animado en NSImageView

para que sea más eficiente, he intentado lo siguiente sin mucho éxito:

  • poner los marcos dentro de un QTMovie y jugarlo (utiliza un 4% de mi proceso y otro 15% para el QTKitServer proceso que reproduce la película)

  • dibujo directamente a la vista con CGContextDrawImage (~ 5% de uso de CPU) - no me di exportar fotogramas del GIF, que acaba de crear un CGImageRef de un 30x30px .png que tenía por ahí.

No sé qué más probar. Subclasificación NSImageView y de alguna manera el almacenamiento en caché de las imágenes suena como una buena idea pero, ay, soy un principiante en Cocoa ... Cualquier idea sería muy apreciada. ¡Gracias!

+2

¿Has probado '- [NSImage setCacheMode:]' con un argumento 'NSImageCacheAlways'? –

+2

Siguiendo su sugerencia, volví a escribir mi subclase NSImageView y terminé con el uso de CPU en aproximadamente la mitad de lo que era antes. He comprobado y usando 'setCacheMode:' en los marcos GIF individuales que estoy ciclando no hace ninguna diferencia visible. Tu opinión me ayudó, ¡así que gracias! –

+0

¿Cómo exactamente resolviste esto? Este es un problema interesante y estoy tratando de abordarlo también. ¿Qué cambiaste en tu subclase NSImageView? – AlexQueue

Respuesta

-3

Consulte this article por Raphael Schaad. Probablemente sea tan eficiente como sea posible sin nada súper complicado. El github repo parece solo iOS, pero no creo que sea difícil de portar.