Differenze tra le versioni di "Estrarre i fotogrammi che compongono un file immagine di tipo GIF animata"

Da Gambas-it.org - Wikipedia.
Riga 4: Riga 4:
  
 
In grandi linee possiamo dire che del file immagine GIF animata vanno prese in considerazione:
 
In grandi linee possiamo dire che del file immagine GIF animata vanno prese in considerazione:
<BR>1) una parte iniziale che va dal primo byte del file medesimo sino al byte immediatamente precedente al byte del blocco chiamato "''Graphic Control Extension''". Va detto che il byte che precede i dati del "''Graphic Control Extension''" è sempre uguale a zero (&h00), e che i primi due byte del blocco "''Graphic Control Extension''" sono sempre &h21 e &hF9. Questi tre byte sono necessari e sufficienti per individuare efficacemente e in modo certo il blocco di dati in questione.
+
<BR>1) una parte iniziale che va dal primo byte del file medesimo sino al byte immediatamente precedente al byte del blocco chiamato "''Graphic Control Extension''" dei dati appartenenti alla prima mono-immagine GIF costituente la GIF animata.
 +
<BR>Va precisato che il byte che precede i dati del "''Graphic Control Extension''" è sempre uguale a zero (&h00), e che i primi due byte del blocco "''Graphic Control Extension''" sono sempre &h21 e &hF9. Questi tre byte sono necessari e sufficienti per individuare efficacemente e in modo certo il blocco di dati in questione.
 
<BR>2) i dati afferenti a ciascuna mono-immagine di tipo GIF costituente la GIF animata. Tali dati vanno dal primo byte del blocco "''Graphic Control Extension''" della mono-immagine in questione sino al byte immediatamente precedente al byte del blocco "''Graphic Control Extension''" ovviamente appartenente alla mono-immagine GIF successiva.
 
<BR>2) i dati afferenti a ciascuna mono-immagine di tipo GIF costituente la GIF animata. Tali dati vanno dal primo byte del blocco "''Graphic Control Extension''" della mono-immagine in questione sino al byte immediatamente precedente al byte del blocco "''Graphic Control Extension''" ovviamente appartenente alla mono-immagine GIF successiva.
 
<BR>Nel caso in cui tali dati si riferiscano all'ultima mono-immagine GIF, costituente la GIF animata, essi sono quelli compresi dal primo byte del blocco "''Graphic Control Extension''" della mono-immagine in questione sino al byte finale della GIF animata, chiamato "''Trailer''", che corrisponde al valore &h3B.
 
<BR>Nel caso in cui tali dati si riferiscano all'ultima mono-immagine GIF, costituente la GIF animata, essi sono quelli compresi dal primo byte del blocco "''Graphic Control Extension''" della mono-immagine in questione sino al byte finale della GIF animata, chiamato "''Trailer''", che corrisponde al valore &h3B.
  
 
+
Ricavate così le suddette parti, ad ogni blocco di dati estratti (di cui al precedente punto 2), cioè quelli appartenenti a ciascuna mono-immagine GIF costituente la GIF animata, si aggiungerà in testa il blocco generico di cui al precedente punto 1).
Ricavate le suddette parti, al ogni blocco di dati estratti, appartenenti a ciascuna mono-immagine GIF costituente la GIF animata, si aggiungerà il primo blocco, di cui al precedentre punto 1).
 
  
  

Versione delle 09:40, 15 set 2017

Un file immagine di tipo GIF animata è formato, come ogni media capace di rappresentare e riprodurre virtualmente e visivamente movimento, da due o più immagini (fotogrammi). Pertanto tale file immagine GIF animata contiene i dati immagine di ciascuna immagine facente parte del video. Per estrarre ed ottenere un file mono-immagine di ciascuna immagine, che costituisce la GIF animata, sarà necessario evidentemente individuare il byte iniziale e il byte finale dei dati di ogni predetta mono-immagine gif.

Un file immagine di tipo GIF, sia esso unico-statico o animato, è comunque organizzato da vari blocchi di dati. [Nota 1]

In grandi linee possiamo dire che del file immagine GIF animata vanno prese in considerazione:
1) una parte iniziale che va dal primo byte del file medesimo sino al byte immediatamente precedente al byte del blocco chiamato "Graphic Control Extension" dei dati appartenenti alla prima mono-immagine GIF costituente la GIF animata.
Va precisato che il byte che precede i dati del "Graphic Control Extension" è sempre uguale a zero (&h00), e che i primi due byte del blocco "Graphic Control Extension" sono sempre &h21 e &hF9. Questi tre byte sono necessari e sufficienti per individuare efficacemente e in modo certo il blocco di dati in questione.
2) i dati afferenti a ciascuna mono-immagine di tipo GIF costituente la GIF animata. Tali dati vanno dal primo byte del blocco "Graphic Control Extension" della mono-immagine in questione sino al byte immediatamente precedente al byte del blocco "Graphic Control Extension" ovviamente appartenente alla mono-immagine GIF successiva.
Nel caso in cui tali dati si riferiscano all'ultima mono-immagine GIF, costituente la GIF animata, essi sono quelli compresi dal primo byte del blocco "Graphic Control Extension" della mono-immagine in questione sino al byte finale della GIF animata, chiamato "Trailer", che corrisponde al valore &h3B.

Ricavate così le suddette parti, ad ogni blocco di dati estratti (di cui al precedente punto 2), cioè quelli appartenenti a ciascuna mono-immagine GIF costituente la GIF animata, si aggiungerà in testa il blocco generico di cui al precedente punto 1).


Mostriamo di seguito un semplice esempio:

Public Sub Main()
 
 Dim s, parz1, parz2 As String
 Dim i As Integer
 Dim ii As New Integer[]
 
  s = File.Load("/percorso/del/file/animato.gif")
  
  Do   ' Applichiamo un ciclo per ottenenre tutte le ricorrenze dell'inizio del blocco "Graphics Control Extension"
    i = InStr(s, Chr(&00) & Chr(&21) & Chr(&F9), i + 1)
    If i = 0 Then Break
    ii.Push(i)
  Loop
  
  For i = 0 To ii.Max
    parz1 = Mid(s, 1, ii[0])
    If i = ii.Max Then
      parz2 = Mid(s, ii[ii.Max] + 1, Len(s) - ii[ii.Max])
    Else
      parz2 = Mid(s, ii[i] + 1, ii[i + 1] - ii[i]) & Chr(&3B)
    Endif
    File.Save("/percorso/di/ciascun/fotogramma" & CStr(i) & ".gif", parz1 & parz2)
  Next
  
End



Note

[1] Al riguardo si rinvia a quest'altra pagina della Wiki: Struttura del formato GIF.



Pagina in costruzione !