Effetto caleidoscopico di un'immagine PNG con il Componente gb.media

Da Gambas-it.org - Wikipedia.

Per ottenere un effetto caleidoscopico di un'immagine di formato PNG con le risorse del Componente gb.media, bisogna utilizzare l'elemento "kaleidoscope" della libreria di GStreamer.

Mostriamo un semplice esempio:

Private tb As ToggleButton
Private dr As DrawingArea
Private imm As String
Private pl As MediaPipeline


Public Sub _new()
 
 Dim w As Integer
 Dim h As Integer
 
 imm = "/percorso/del/file.png"
 
 w = ImageStat(imm).Width
 h = ImageStat(imm).Height
 
 With Me
   .W = w + 200
   .H = w + 100
 End With
 
 With tb = New ToggleButton(Me) As "Tasto"
   .X = Me.w - 30
   .Y = 10
   .W = 30
   .H = 40
   .Background = Color.Green
   .Text = "Start"
 End With
 
 With dr = New DrawingArea(Me)
   .X = 0
   .Y = 0
   .W = w
   .H = h
 End With
  
End


Public Sub Form_Open()
 
 Dim src, pdc, kal, con1, frz, con2, snk As MediaControl
 
 pl = New MediaPipeline
 
 src = New MediaControl(pl, "filesrc")
 src["location"] = imm
 pdc = New MediaControl(pl, "pngdec")
 kal = New MediaControl(pl, "kaleidoscope")
 kal["angle"] = Rad(45)
 kal["angle2"] = Rad(140)
 kal["sides"] = 10
 con1 = New MediaControl(pl, "videoconvert")
 frz = New MediaControl(pl, "imagefreeze")
 con2 = New MediaControl(pl, "videoconvert")
 snk = New MediaControl(pl, "xvimagesink")
 
 src.LinkTo(pdc)
 pdc.LinkTo(kal)
 kal.LinkTo(con1)
 con1.LinkTo(frz)
 frz.LinkTo(con2)
 con2.LinkTo(snk)
 
' L'immagine modificata viene mostrata nella "DrawingArea":
 snk.SetWindow(dr)
    
End


Public Sub Tasto_Click()          ' _
  
 If tb.Value Then
   pl.Play()
   tb.Background = Color.Red
   tb.Text = "Stop"
 Else
   pl.Stop()
   pl.Close()
   Me.Close
 Endif
  
End