Para obtener un efecto caleidoscópico de una imagen de formato PNG con los recursos del Componente
gb.media, es necesario utilizar el elemento "
kaleidoscope" de la libreria de
Gstreamer.
Ejemplo práctico muy sencillo:
Código:
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 = "/ruta/del/archivo/imagen.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
.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)
snk.SetWindow(dr)
End
Public Sub Tasto_Click() ' _
If tb.Value Then
pl.Play()
tb.Text = "Stop"
Else
pl.Stop()
pl.Close()
Me.Close
Endif
End