Ir al contenido



Foto

[MULTILENGUAJE] TGifViewer un visor versátil de animaciones Gif


  • Por favor identifícate para responder
6 respuestas en este tema

#1 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 3.801 mensajes
  • LocationMadrid - España

Escrito 28 febrero 2010 - 06:33

TGifViewer es un control para visualizar imágenes GIF estáticas o en movimiento. Está basado en la clase TGif, que ya publiqué en el foro. He realizado alguna mejora en dicha clase y descubierto un pequeño bug que está solucionado.

He de aclarar que el estándar Gif es bastante complejo y que no todas las imágenes que existen lo siguen escrupulosamente, quizás porque los decodificadores se han ido adaptando a la relajación de las normas. Es un formato lo suficientemente plástico como para permitir esas licencias.  El control que propongo trata de seguir las especificaciones Gif originales pero consciente de la cantidad de imágenes existentes, incorpora propiedades para adaptarse a dichas imágenes. Quizás hubiese sido más práctico dar menos opciones, pero el control sería menos plástico y menos pedagógico.

En concreto, he encontrado falta de rigurosidad en dos temas importantes. El primero es el de las transparencias y el segundo, el modo en como se eliminan las imágenes después de cumplir el tiempo durante el que se deben mostrar. Esto último viene definido en una bandera localizada en el Graphic Control Extension de cada imagen, con los siguientes valores:

0 – Sin especificar, el decodificador no hará acciones tras terminar la visualización de la imagen.
1 – Sin acción, la imagen no se elimina
2 – Se restaura el color de fondo
3 – Se restaura la imagen previa.

Las opciones 0 y 1 en la práctica son lo mismo. Todos estos valores pueden tomarse por defecto del Gif o forzarlos en el visualizador TGifViewer, para este caso, disponemos de las propiedades necesarias desplegadas en la propiedad Plus (sus valores realmente tienen sumada una unidad porque considero el cero para el valor por defecto del Gif). Así mismo podemos forzar las transparencias y elegir el color que será transparente, aunque esta propiedad no es visual puede ser accedida por código (Plus->TransparentColor). El valor clNone para este color indica que se tomará el que tenga por defecto la imagen Gif a tratar.

La instalación del componente se hará de forma manual: Component->Install Component... También puede abrirse el proyecto del Package y compilarlo. En un principio está previsto que se incorpore a una paleta llamada "Mios" pero podemos cambiar esto.
 


cpp
  1. RegisterComponents("Mios", classes, 0);

Inicialmente el código está escrito en C/C++ para Builder (ya sabéis que es mi debilidad  :p) pero cuando disponga de un poco mas de tiempo lo migraré a delphi.  :)


Adjunto la clase TGif modificada, el control TGifViewer, una aplicación de ejemplo y un grupo de imágenes Gif

Espero que os sea de utilidad.
 

 

 

¡ATENCIÓN!   Con motivo de la actualización de la clase TGIF, también he actualizado este componente y añadido la versión para Lazarus. La actualización se encuentra AQUÍ.

 

 

 

Saludos.

Archivos adjuntos


  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.400 mensajes
  • LocationRepública Dominicana

Escrito 01 marzo 2010 - 06:52

Hostia hombre, usted se merece muchas reverencias, esa es un clase super útil, insisto en que cuando sea grande quiero ser como tú :p :p (y).

Saludos.
  • 0

#3 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 3.801 mensajes
  • LocationMadrid - España

Escrito 01 marzo 2010 - 02:02

Muchas gracias a vosotros por el interés mostrado en el tema.

Lo prometido es deuda :D. He migrado el componente a delphi y actualizado la clase TGif que ahora está mejor enfocada hacia el tema de las transparencias en los Gif.

Lo dicho para la versión Builder C++ es válido para delphi, la clase es la misma. La aplicación de ejemplo es similar también. En el primer mensaje tenéis unas cuantas imágenes de ejemplo.

Subo la clase TGif y el control TGifViewer juntos en un archivo. La aplicación de ejemplo va por separado.

Espero que os sea de utilidad.

Saludos.

Archivos adjuntos


  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.857 mensajes
  • LocationMéxico

Escrito 01 marzo 2010 - 02:14

Ah vaya, usted es rápido amigo escafandra, muchas gracias :)

Salud OS
  • 0

#5 sir.dev.a.lot

sir.dev.a.lot

    Advanced Member

  • Miembros
  • PipPipPip
  • 545 mensajes
  • Location127.0.0.1

Escrito 13 julio 2016 - 06:27

Gracias por la Informacion, TGifViewer al repositorio para uso con Delphi 7 (y) :)


  • 0

#6 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 3.801 mensajes
  • LocationMadrid - España

Escrito 23 septiembre 2018 - 10:10

Con motivo de la actualización de la clase TGIF he actualizado el componente TGifViewer para Builder, delphi, Berlin y Lazarus, cada uno en su versión. He de decir que el mismo código escrito para delphi 7 es válido para Berlin, lo mismo sucede con Builder. La propiedad Plus desaparece del componente. Lazarus tiene una versión propia para proporcionar soporte a Bitmaps de color indexado, que son los que usa Gif. En el caso de Lazarus, no llegué a publicar un componente como tal, cosa que si hago ahora.
 
Resumen:
1. Se simplifica la funcionalidad del componente y corrigen errores
2. Se da soporte a versiones modernas de delphi y Builder
3. Se da soporte a Lazarus,
 
 

Adjunto los proyectos, tened en cuenta que las librerías generadas deberían estar accesibles al IDE para que el componente sea visible y pueda usarse.

No puedo adjuntar un ejecutable Lazarus por motivos de restricciones de espacio en los archivos adjuntos. Sobre Lazarus tengo que añadir que funciona compilando para 32 y 64 bits. Las pruebas las hice con la versión 32 bits compliando e instalando el componente normalmente y después construyendo el ejemplo tanto para 32 bits como para 64.

 

 

 

Saludos.

Archivos adjuntos


  • 1

#7 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.857 mensajes
  • LocationMéxico

Escrito 24 septiembre 2018 - 12:53

Excelente amigo. (y)

 

Saludos


  • 0