Disegnare sopra un video

Da Gambas-it.org - Wikipedia.

Mostriamo di seguito una modalità di disegnare sopra un video.

Va precisato che la modalità mostrata non inciderà sui fotogrammi del video, poiché il disegno sarà effettuato su una superficie posta al di sopra di quella adoperata per eseguire il video medesimo. In particolare si utilizzeranno le capacità dell'Oggetto WebView di eseguire un file audio/video, soprapponendovi quindi una DrawingArea per disegnare qualcosa.

L'Oggetto WebView fornisce automaticamente, fra l'altro, una risorsa per arrestare, porre in pausa e riprendere l'esecuzione del video.

Vediamo un esempio pratico:

Private WebView1 As WebView
Private da As DrawingArea
Private OldX As Single   
Private OldY As Single   
Private StartX As Single   
Private StartY As Single   
Private punti As New Integer[] 


Public Sub Form_Open()
 
' Crea una "WebView" come oggetto GUI da usare per l'uscita video:
  With WebView1 = New WebView(Me)
    .X = 10
    .Y = 10
    .W = 480
    .H = 480
  End With
  
' Crea una DrawingArea sulla quale disegnare delle linee rosse:
  With da = New DrawingArea(Me) As "da"
    .X = WebView1.X
    .Y = WebView1.Y
    .W = WebView1.W
    .H = WebView1.H - 80
    .Background = Color.Transparent
  End With
 
End


Public Sub Button1_Click()
 
' Carica ed esegue il file video:
  WebView1.Url = "/percorso/del/file/video"
  
End


Public Sub da_Draw()   
  
  Dim i As Integer 
  
  With Draw
    .Foreground = Color.Red
    .Line(StartX, StartY, OldX, OldY)             
    For i = 0 To punti.Max Step 4 
      .Line(punti[i], punti[i + 1], punti[i + 2], punti[i + 3])         
    Next           
    .End         
  End With       
  
End  
 
 
Public Sub da_MouseDown()     
  
  StartX = Mouse.X   
  StartY = Mouse.Y   
  OldX = StartX   
  OldY = StartY         
 
End

 
Public Sub da_MouseMove() 
 
 OldX = Mouse.X   
 OldY = Mouse.Y   
 
 da.Refresh()     
 
End   


Public Sub da_MouseUp() 
  
  punti.Push(StartX) 
  punti.Push(StartY) 
  punti.Push(OldX) 
  punti.Push(OldY) 
   
End