APNG Object Plugin

Esta sección esta especialmente diseñada para todos aquellos usuarios que estés desarrollando plugins o aplicaciones y quieran ayuda para dichos plugins o aplicaciones.
Bueno, abro este post para ver quien se anima a entrarle a este plugin. Estoy trabajando con las librerías de XNVIEWER las cuales son FREEWARE pero aún no doy con la rutina para leer los apng (animated png). Según entiendo debo crear un HDC y trabajar sobre él con varias rutinas de Loadbitmap pero la verdad que estoy algo atorado en dichas rutinas. No hay problema con la estuctura, ya que entiendo bien como estan formados los chunks del IADT, AFTL, ACTL, ADTL, etc. Si alguien desea contribuir responda a este post.

PD: Los apng son como los gif animados, pero con la calidad, peso y transparencia de los PNG. Es decir que con un APO que soporte los APNG podríamos usar las animaciones del Particle Illusion sin crear rutinas ni timers y usando un solo archivo que contenga todos los frames.
Bueno, ya no se ni que usar jajaja. Al parecer con la librería gdi se pueden cargar los apng pero solo dí con este source:

http://www.vbforums.com/showthread.php?t=598771

Tendré que revisar la documentación de luagd una vez más o ver si tendré que hacer llamadas a la librería en si.
@webultra, hace poco he publicado varios trozos de codigo para usar GDI+ en un obejct plugin justo aqui: http://www.indigorose.com/forums/thread ... post167402

La diferencia con PNG y APNG es que vas a tener que extraer cada frame en un buffer Image* Para eso existen librerias como libpng (dependiente de zlib) la puede encontrar aqui: http://www.libpng.org/pub/png/libpng.html
Imagen
Aqui puedes ver como se comporta el formato APNG lo que tendras que hacer con libpng es contar el numero de frames, definirlo en una variable publica, y usar Image::FromStream para cargar cada fotograma en el buffer, para ello deberas tener muchos bufferes previamente creados (por ejemplo 255) e ir llenandolos. Otra cosa que pudes hacer es ir modificando solamente un buffer, esto reduciria drasticamente el peso en memoria fisica pero no se como funcionaría en cuanto a performance.

A la clase PictureBox deberias añadirle un afx_message OnTimer y ejecutar el timer en la carga de la imagen para que realice el proceso de cambio del buffer Image*, Luego OnDraw se debe encargar siempre de puntar sobre el HDC, recuerda hacer un PictureBox::Invalidate() cada fotograma para limpiar el buffer anterior.

Otro problema que te vas a encontar es algo llamado flickering, que hara que se vean como saltos y el dibujo no se punta progresivo, o durante pequeños lapsos de tiempo la imagen se borra completamente, perdiendose el efecto por completo, tienes que hacer unos hacks en la clase, pero no recuerdo bien como se hacia, era elgo de devolver NULL en OnEraseBkgnd (activando su correspondiente mensaje AFX)

Creo que es todo lo que necesitas... Saludos

PS: Aqui te dejo un ejemplo con fuente del uso de libpng veras que sencillito http://www.ucancode.net/CPP_Library_Con ... e-code.htm
PS2: por cierto se me olvidaba, pnglib no incluye soporte para apng, podrias utilizar la libreria que comentas pero yo preferiria usar este parche para libpng http://littlesvr.ca/apng/diff/libpng-1.4.4-apng.patch encontrado en http://littlesvr.ca/apng/
Worale, super buena info. Justo un ocx que tengo cuenta los frames de las imagenes, así que por ese lado no hay tanto problema. La imagen acerca de la estructura de los png ayer justo la estaba viendo y el ponerlos en un stream no parece ser problema. Leer los links que me dejas y posteare los avances o retrocesos que tenga.