GIF Animado. Socorroooooo !!!!

Iniciado por CsarGR, 5 Diciembre 2005, 17:13 PM

0 Miembros y 1 Visitante están viendo este tema.

CsarGR

Socorroooooo !!!!
Estoy desesperado.
¿Alguien sabe como controlar un gif animado?

No puedo utilizar el anigif.ocx ni ningun otro ocx q pida licencia.
Necesito poder parar la animacion gif, avanzar un frame ó retroceder un frame.
¿Alguien sabe como hacer esto con código?
¿Alguien conoce el código del anigif?

SOCORROOOOOOOOO!!!!!!!!!!!!!!!!!!

Gracias a todos

BenRu

Ehi chico no te pongas nervioso!!!
Utiliza el anigif, es una ocx (creo recordad) que le agregas al proyecto y te permite utilizar gifs.

Busca en el foro que yo puse un mensaje igual  ;)

programatrix

Si te dice que no puede usar ningún ocx tu vas y le pones un ocx es que..., no se como los puedes usar seguro que las apis tendrán la respuesta

BenRu

Desde cuando el anigif.ocx pide licencia?
Yo se lo puse sin ningun problema.

Si no puedes utilizar ocx tendras que irte a las apis como dice reydelmundo11

CsarGR

Hola BenRu

El problema es q no puedo utilizarlo en este proyecto en concreto, por lo q es un gran problema q todvia no sé cómo solucionar.

Habia visto un programa tuyo simulando el anigif, pero no lo entendí. No suelo trabajar con archivos binarios y lo q haces leyendo Strings de una imagen en binario, sinceramente no lo entiendo, aunque si pudieses explicarme t lo agradecería.

No necesito q el gif se anime con el tiempo, sino q yo lo controle indicandole cuando ha de pasar de un frame a otro.

El programa q encontré y q no entiendo es :

Se usa un control Image (con Index = 0 - previamente establecido para crear un array) y un Timer.


Código:
Dim RepeatTimes&
Dim RepeatCount&

Private Sub Form_Load()
    LoadAniGif App.Path & "\Ejemplo.Gif", Image1 'El Gif a reproducir en el mismo directorio del programa
End Sub

Private Sub LoadAniGif(xFile As String, xImgArray)
       
    Dim F1, F2
    Dim Image1s() As String
    Dim imgHeader As String
    Static buf$, picbuf$
    Dim fileHeader As String
    Dim imgCount
    Dim i&, j&, xOff&, yOff&, TimeWait&
    Dim GifEnd
    GifEnd = Chr(0) & "!ù"
   
    Timer1.Enabled = False
    For i = 1 To xImgArray.Count - 1
        Unload xImgArray(i)
    Next i
   
    F1 = FreeFile
On Error GoTo badFile:
    Open xFile For Binary Access Read As F1
        buf = String(LOF(F1), Chr(0))
        Get #F1, , buf
    Close F1
   
    i = 1
    imgCount = 0
   
    j = (InStr(1, buf, GifEnd) + Len(GifEnd)) - 2
    fileHeader = Left(buf, j)
    i = j + 2
   
    RepeatTimes& = Asc(Mid(fileHeader, 126, 1)) + (Asc(Mid(fileHeader, 127, 1)) * 256)
   
    Do
        imgCount = imgCount + 1
        j = InStr(i, buf, GifEnd) + Len(GifEnd)
        If j > Len(GifEnd) Then
            F2 = FreeFile
            Open "tmp.gif" For Binary As F2
                picbuf = String(Len(fileHeader) + j - i, Chr(0))
                picbuf = fileHeader & Mid(buf, i - 1, j - i)
                Put #F2, 1, picbuf
                imgHeader = Left(Mid(buf, i - 1, j - i), 16)
            Close F2
           
            TimeWait = ((Asc(Mid(imgHeader, 4, 1))) + (Asc(Mid(imgHeader, 5, 1)) * 256)) * 10
            If imgCount > 1 Then
                xOff = Asc(Mid(imgHeader, 9, 1)) + (Asc(Mid(imgHeader, 10, 1)) * 256)
                yOff = Asc(Mid(imgHeader, 11, 1)) + (Asc(Mid(imgHeader, 12, 1)) * 2561)
                Load xImgArray(imgCount - 1)
                xImgArray(imgCount - 1).ZOrder 0
                xImgArray(imgCount - 1).Left = xImgArray(0).Left + (xOff * 15)
                xImgArray(imgCount - 1).Top = xImgArray(0).Top + (yOff * 15)
            End If
            xImgArray(imgCount - 1).Tag = TimeWait
            xImgArray(imgCount - 1).Picture = LoadPicture("tmp.gif")
            Kill ("tmp.gif")
           
            i = j
        End If
    Loop Until j = Len(GifEnd)
   
    If i < Len(buf) Then
        F2 = FreeFile
        Open "tmp.gif" For Binary As F2
            picbuf = String(Len(fileHeader) + Len(buf) - i, Chr(0))
            picbuf = fileHeader & Mid(buf, i - 1, Len(buf) - i)
            Put #F2, 1, picbuf
            imgHeader = Left(Mid(buf, i - 1, Len(buf) - i), 16)
        Close F2

        TimeWait = ((Asc(Mid(imgHeader, 4, 1))) + (Asc(Mid(imgHeader, 5, 1)) * 256)) * 10
        If imgCount > 1 Then
            xOff = Asc(Mid(imgHeader, 9, 1)) + (Asc(Mid(imgHeader, 10, 1)) * 256)
            yOff = Asc(Mid(imgHeader, 11, 1)) + (Asc(Mid(imgHeader, 12, 1)) * 2561)
            Load xImgArray(imgCount - 1)
            xImgArray(imgCount - 1).ZOrder 0
            xImgArray(imgCount - 1).Left = xImgArray(0).Left + (xOff * 15)
            xImgArray(imgCount - 1).Top = xImgArray(0).Top + (yOff * 15)
        End If
        xImgArray(imgCount - 1).Tag = TimeWait
        xImgArray(imgCount - 1).Picture = LoadPicture("tmp.gif")
        Kill ("tmp.gif")
    End If
   
On Error GoTo badTime
    Timer1.Interval = CInt(xImgArray(0).Tag)
badTime:
    Timer1.Enabled = True
Exit Sub
badFile:
    MsgBox "File not found.", vbExclamation, "File Error"

End Sub

Private Sub Timer1_Timer()

    For i = 0 To Image1.Count
        If i = Image1.Count Then
            If RepeatTimes > 0 Then
                RepeatCount = RepeatCount + 1
                If RepeatCount > RepeatTimes Then
                    Timer1.Enabled = False
                    Exit Sub
                End If
            End If
            For j = 1 To Image1.Count - 1
                Image1(j).Visible = False
            Next j
On Error GoTo badTime
            Timer1.Interval = CLng(Image1(0).Tag)
badTime:
            Exit For
        End If
        If Image1(i).Visible = False Then
            Timer1.Interval = CLng(Image1(i).Tag)
On Error GoTo badTime2
            Image1(i).Visible = True
badTime2:
            Exit For
        End If
    Next i

End Sub

:P


CsarGR

De hecho tienes q crackearlo para poderlo utilizar.
Sino no puedes utilizar el anigif.

¿Entendeis el programa q os decía?

krispin

BuenaX!!
puede que este ejemplillo te sirva:
http://usuarios.lycos.es/p4n0r4mix/VB/index.php
el fichero: ControlGIF.rar
saludox!!

BenRu

No me acuerdo de que code dices, si lo pones quizas te pueda echar un cable.

Si es un gif facil puedes hacerlo cambiar con un timer, y que el picturebox cambie cada x tiempo....