Differenze tra le versioni di "Estrarre e salvare singole immagini durante l'esecuzione di un file video mediante il Componente gb.media"
Riga 2: | Riga 2: | ||
− | + | ==Uso delle sole risorse del Componente ''gb.media''== | |
Usando le sole risorse del Componente ''gb.media'', per catturare singole immagini, si farà uso della sotto-proprietà "''.Image''" della proprietà "''Video''" della Classe ''MediaPlayer''. | Usando le sole risorse del Componente ''gb.media'', per catturare singole immagini, si farà uso della sotto-proprietà "''.Image''" della proprietà "''Video''" della Classe ''MediaPlayer''. | ||
Riga 80: | Riga 80: | ||
− | ===Uso della Classe ''DesktopWindow'' | + | ====Con applicazione a ''riga di comando''==== |
+ | Vediamo un paio di esempi simili al precedente però con un'applicazione a ''riga di comando''. | ||
+ | <BR>Nel primo esempio sarà possibile cattura un'immagine per volta scrivendo nello spazio della console il carattere "c" e successivamente premendo il tasto "Invio" della tastiera. Se si premerà solo e semplicemente il tasto "Invio", il programma verrà terminato. | ||
+ | Private bo As Boolean | ||
+ | Private mp As New MediaPlayer | ||
+ | Private i As Integer | ||
+ | |||
+ | |||
+ | '''Public''' Sub Main() | ||
+ | |||
+ | mp.URL = Media.URL("<FONT Color=gray>''/percorso/del/file/video''</font>") | ||
+ | |||
+ | mp.Play | ||
+ | |||
+ | Repeat | ||
+ | Wait 0.01 | ||
+ | Until (mp.Position >= mp.Duration) Or (bo = True) | ||
+ | |||
+ | mp.Close | ||
+ | Quit | ||
+ | |||
+ | '''End''' | ||
+ | |||
+ | |||
+ | '''Public''' Sub Application_Read() | ||
+ | |||
+ | Dim img As Image | ||
+ | Dim s As String | ||
+ | |||
+ | Input s | ||
+ | If s = "c" Then | ||
+ | img = mp.Video.Image | ||
+ | Inc i | ||
+ | s = CStr(i) | ||
+ | img.Save("/tmp/imm/foto_" & s & ".png", 100) | ||
+ | Print "Immagine catturata: " & s | ||
+ | Print | ||
+ | Else | ||
+ | bo = True | ||
+ | Endif | ||
+ | |||
+ | '''End''' | ||
+ | |||
+ | |||
+ | In quest'altro esempio la cattura sarà continua sino al termine del video: | ||
+ | Private mp As New MediaPlayer | ||
+ | Private i As Integer | ||
+ | |||
+ | |||
+ | '''Public''' Sub Main() | ||
+ | |||
+ | mp.URL = Media.URL("<FONT Color=gray>''/percorso/del/file/video''</font>") | ||
+ | |||
+ | mp.Play | ||
+ | |||
+ | Repeat | ||
+ | Wait 0.001 | ||
+ | Until (mp.Position >= mp.Duration) | ||
+ | |||
+ | mp.Close | ||
+ | Quit | ||
+ | |||
+ | '''End''' | ||
+ | |||
+ | |||
+ | '''Public''' Sub Application_Read() | ||
+ | |||
+ | Dim img As Image | ||
+ | |||
+ | img = mp.Video.Image | ||
+ | Inc i | ||
+ | s = CStr(i) | ||
+ | img.Save("/tmp/imm/foto_" & s & ".png", 100) | ||
+ | Print "Immagine catturata: " & s | ||
+ | |||
+ | '''End''' | ||
+ | |||
+ | |||
+ | ==Uso della Classe ''DesktopWindow''== | ||
Si potrà fare uso anche del Metodo "''.GetScreenshot( )''" della Classe "''DesktopWindow''". Bisognerà attivare anche i Componenti "''gb.desktop''" e "''gb.desktop.x11''". | Si potrà fare uso anche del Metodo "''.GetScreenshot( )''" della Classe "''DesktopWindow''". Bisognerà attivare anche i Componenti "''gb.desktop''" e "''gb.desktop.x11''". | ||
Riga 156: | Riga 234: | ||
− | + | ==Uso della Classe ''Desktop''== | |
Si potrà anche fare uso del Metodo "''.Screenshot( )''" della Classe "''Desktop''". Anche in questo caso bisognerà attivare i Componenti "''gb.desktop''" e "''gb.desktop.x11''". | Si potrà anche fare uso del Metodo "''.Screenshot( )''" della Classe "''Desktop''". Anche in questo caso bisognerà attivare i Componenti "''gb.desktop''" e "''gb.desktop.x11''". | ||
<BR>Facendo riferimento all'esempio di codice precedente, la sub-routine dell'evento "''Button2_Click( )''" dovrà essere modificata come segue: | <BR>Facendo riferimento all'esempio di codice precedente, la sub-routine dell'evento "''Button2_Click( )''" dovrà essere modificata come segue: |
Versione delle 08:39, 4 ago 2019
Per estrarre e salvare mediante il Componente gb.media singole immagini da un file video durante la sua esecuzione all'interno di un Oggetto DrawingArea, si posono adottare almeno tre modalità.
Indice
Uso delle sole risorse del Componente gb.media
Usando le sole risorse del Componente gb.media, per catturare singole immagini, si farà uso della sotto-proprietà ".Image" della proprietà "Video" della Classe MediaPlayer.
Mostriamo un esempio pratico, nel quale si farà uso di una DrawingArea, nella quale sarà mostrato il video:
Private mp As MediaPlayer Private i As Integer Public Sub Form_Open() Dim da As DrawingArea ' Crea una "DrawingArea" come oggetto GUI da usare per l'uscita video: With da = New DrawingArea(Me) .X = 10 .Y = 10 .W = 300 .H = 300 .Background = Color.Black End With With mp = New MediaPlayer .URL = Media.URL("/percorso/del/file/video") ' Imposta il controllo dell'uscita video da usare: .SetWindow(da) End With End Public Sub Button1_Click() ' Esegue il file video: mp.Play() Do ' Una brevissima pausa consente di mostrare e di agire sugli eventuali oggetti posti sul Form: Wait 0.01 Label1.Text = "\rDurata del video: " & CStr(Date(0, 0, 0, 0, 0, 0, mp.Duration * 1000)) & " - Tempo trascorso: " & CStr(Date(0, 0, 0, 0, 0, 0, mp.Position * 1000)) Loop Until mp.Position >= mp.Duration End Public Sub Button2_Click() mp.Stop mp.Close End Public Sub ToggleButton1_Click() If ToggleButton1.Value Then mp.Pause Else mp.Play Endif End Public Sub Button3_Click() Dim img As Image Dim s As String img = mp.Video.Imag Inc i s = CStr(i) img.Save("/tmp/foto_" & s & ".png", 100) Write #File.out, "\rImmagine catturata: " & s End
Con applicazione a riga di comando
Vediamo un paio di esempi simili al precedente però con un'applicazione a riga di comando.
Nel primo esempio sarà possibile cattura un'immagine per volta scrivendo nello spazio della console il carattere "c" e successivamente premendo il tasto "Invio" della tastiera. Se si premerà solo e semplicemente il tasto "Invio", il programma verrà terminato.
Private bo As Boolean Private mp As New MediaPlayer Private i As Integer Public Sub Main() mp.URL = Media.URL("/percorso/del/file/video") mp.Play Repeat Wait 0.01 Until (mp.Position >= mp.Duration) Or (bo = True) mp.Close Quit End Public Sub Application_Read()
Dim img As Image Dim s As String Input s If s = "c" Then img = mp.Video.Image Inc i s = CStr(i) img.Save("/tmp/imm/foto_" & s & ".png", 100) Print "Immagine catturata: " & s Print Else bo = True Endif End
In quest'altro esempio la cattura sarà continua sino al termine del video:
Private mp As New MediaPlayer Private i As Integer Public Sub Main() mp.URL = Media.URL("/percorso/del/file/video") mp.Play Repeat Wait 0.001 Until (mp.Position >= mp.Duration) mp.Close Quit End Public Sub Application_Read()
Dim img As Image
img = mp.Video.Image Inc i s = CStr(i) img.Save("/tmp/imm/foto_" & s & ".png", 100) Print "Immagine catturata: " & s End
Uso della Classe DesktopWindow
Si potrà fare uso anche del Metodo ".GetScreenshot( )" della Classe "DesktopWindow". Bisognerà attivare anche i Componenti "gb.desktop" e "gb.desktop.x11".
Mostriamo un esempio pratico:
Private mp As MediaPlayer Private da As DrawingArea Private pc As New Picture[] Public Sub Form_Open() ' Crea una "DrawingArea" come oggetto GUI da usare per l'uscita video: With da = New DrawingArea(Me) .X = 10 .Y = 10 .W = 480 .H = 320 .Background = Color.Black End With With mp = New MediaPlayer .URL = Media.URL("/percorso/del/file/video") ' Imposta il controllo dell'uscita video da usare: .SetWindow(da) End With End Public Sub Button1_Click() ' Avvia l'esecuzione del video: mp.Play() End Public Sub Button2_Click() Dim dw As DesktopWindow dw = New DesktopWindow(da.Handle) ' Cattura una schermata del contenuto video mostrato in quel momento dalla "DrawingArea": pc.Push(dw.GetScreenshot(True)) End Public Sub Button3_Click() Dim i As Integer Dim drc, s As String ' Arresta l'esecuzione del file video nella "DrawingArea": mp.Stop() drc = "/tmp/imago" If Not Exist(drc) Then Mkdir drc Else For Each s In Dir(drc, "picture_*", gb.file) Kill drc &/ s Next Endif ' Genera infine i vari file immagine di formato .png: For i = 0 To pc.Max pc[i].Save(drc &/ "picture_" & CStr(i) & ".png", 100) Next End
Uso della Classe Desktop
Si potrà anche fare uso del Metodo ".Screenshot( )" della Classe "Desktop". Anche in questo caso bisognerà attivare i Componenti "gb.desktop" e "gb.desktop.x11".
Facendo riferimento all'esempio di codice precedente, la sub-routine dell'evento "Button2_Click( )" dovrà essere modificata come segue:
Public Sub Button2_Click() ' Cattura una schermata del contenuto video mostrato in quel momento dalla "DrawingArea": pc.Push(Desktop.Screenshot(da.ScreenX, da.ScreenY, da.W, da.H)) End