Ottenere un file png dalla mappa mostrata da una MapView

Da Gambas-it.org - Wikipedia.

Possiamo ottenere un file di formato PNG dalla mappa mostrata da una MapView, usando anche le risorse del Componente gb.media.

Mostriamo un esempio pratico (è necessario attivare anche i Componenti gb.map e gb.media ):

Private MapView1 As MapView


Public Sub Form_Open()

 Dim mp As New MapPoint(41.89030, 12.49237)

 With Me
   .W = Screen.AvailableWidth
   .H = Screen.AvailableHeight
   .Arrangement = Arrange.Fill
 End With

 With MapView1 = New MapView(Me) As "MapView1"
   .Map.AddTile("GoogleMap", "https://mt0.google.com/vt/lyrs=s&hl=&x={x}&y={y}&z={z}")
   .Map.Zoom = 15
   .Map.Center = mp
 End With

End


Public Sub MapView1_MouseUp()

' Se si clicca sulla "MapView" con il tasto destro del mouse, si avvierà la procedura per ottenere il file PNG:
 If Not Mouse.Right Then Return 

 Dim pl As MediaPipeline
 Dim src, con, png, snk As MediaControl

 pl = New MediaPipeline

 src = New MediaControl(pl, "ximagesrc")
 src["xid"] = MapView1.Id  ' Assegna il numero identificativo della "MapView", della quale si otterrà il file PNG
 con = New MediaControl(pl, "videoconvert")
 png = New MediaControl(pl, "pngenc")
 snk = New MediaControl(pl, "filesink")
 snk["location"] = "/tmp/immagine_mappa.png"

 src.LinkTo(con)
 con.LinkTo(png)
 png.LinkTo(snk)

' Crea il file PNG e poi chiude il flusso di dati:
 pl.Play()
 pl.Stop()
 pl.Close

End


Public Sub Form_Close()
 
 If Exist("/tmp/immagine_mappa_1.png") Then Kill "/tmp/immagine_mappa_1.png"

' Se viene chiuso il "Form" direttamente cliccando sul suo tastino [X] in alto a destra, si perderanno i dati PNG nel file immagine appena creato. La seguente soluzione impedirà la perdita del file PNG, creandone un altro identico, ma con diverso nome.
 Copy "/tmp/immagine_mappa.png" To "/tmp/immagine_mappa_1.png"

End