Mostrare un'immagine con funzioni del API di GStreamer
La risorsa GStreamer dà la possibilità anche semplicemente di caricare un file immagine e mostrarne il contenuto.
Per poter fruire delle risorse di GStreamer, sarà necessario avere installata nel sistema e richiamare in Gambas la libreria condivisa: "libgstreamer-1.0:0.2407.0 ".
L'immagine potrà essere mostrata in una finestra automaticamente creata dalla risorsa GStreamer, oppure in una DrawingArea.
Immagine mostrata in una finestra creata da GStreamer
Di seguito mostreremo un esempio, nel quale verrà caricato un file immagine in un'applicazione a riga di comando. L'immagine sarà mostrata in una finestra creata da GStreamer.
Private immago As Pointer Private ciclo As Byte = 1 Library "libgstreamer-1.0:0.2407.0" Private Enum GST_STATE_VOID_PENDING = 0, GST_STATE_NULL, GST_STATE_READY, GST_STATE_PAUSED, GST_STATE_PLAYING ' gst_init (int *argc, char **argv[]) ' Initializes the GStreamer library, setting up internal path lists, registering built-in elements, and loading standard plugins. Private Extern gst_init(argc As Pointer, argv As Pointer) ' GstElement * gst_element_factory_make(const gchar *factoryname, Const gchar * name) ' Create a new element of the type defined by the given element factory. Private Extern gst_element_factory_make(factoryname As String, name As String) As Pointer ' gchar * g_filename_to_uri (const gchar *filename, const gchar *hostname, GError **error) ' Converts an absolute filename to an escaped ASCII-encoded URI. Private Extern g_filename_to_uri(filename As String, hostname As String, GError As Pointer) As String ' void g_object_set(gpointer object, const gchar *first_property_name, ...) ' Sets properties on an object. Private Extern g_object_set(gobject As Pointer, key As String, value As String, tertium As String) ' GstStateChangeReturn gst_element_set_state(GstElement *element, GstState state) ' Sets the state of the element. Private Extern gst_element_set_state(gstelement As Pointer, state As Integer) As Integer ' void gst_object_unref(gpointer object) ' Decrements the reference count on object. Private Extern gst_object_unref(gobject As Pointer) Public Sub Main() Dim fileImmagine As String gst_init(0, 0) immago = gst_element_factory_make("playbin", "immagine") If IsNull(immago) Then Error.Raise("Impossibile creare un elemento 'playbin' !") fileImmagine = "/percorso/del/file/immagine" g_object_set(immago, "uri", g_filename_to_uri(fileImmagine, Null, 0), Null) ' Mostra l'immagine: gst_element_set_state(immago, GST_STATE_PLAYING) While ciclo Wait 0.01 Wend gst_object_unref(immago) Quit End Public Sub Application_Read() Dim s As String Input #File.In, s ' Arresta la riproduzione del file immagine: If s = "c" Then ciclo = 0 End
Immagine mostrata in una DrawingArea
Di seguito mostreremo un esempio, nel quale verrà caricato un file immagine in un'applicazione grafica.
L'immagine sarà mostrata in una DrawingArea. posta sul Form dell'applicazione Gambas.
Private immago As Pointer Library "libgstreamer-1.0:0.2407.0" Private Enum GST_STATE_VOID_PENDING = 0, GST_STATE_NULL, GST_STATE_READY, GST_STATE_PAUSED, GST_STATE_PLAYING ' gst_init (int *argc, char **argv[]) ' Initializes the GStreamer library, setting up internal path lists, registering built-in elements, and loading standard plugins. Private Extern gst_init(argc As Pointer, argv As Pointer) ' GstElement * gst_element_factory_make(const gchar *factoryname, Const gchar * name) ' Create a new element of the type defined by the given element factory. Private Extern gst_element_factory_make(factoryname As String, name As String) As Pointer ' gchar * g_filename_to_uri (const gchar *filename, const gchar *hostname, GError **error) ' Converts an absolute filename to an escaped ASCII-encoded URI. Private Extern g_filename_to_uri(filename As String, hostname As String, GError As Pointer) As String ' void g_object_set(gpointer object, const gchar *first_property_name, ...) ' Sets properties on an object. Private Extern g_object_set(gobject As Pointer, key As String, value As String, tertium As String) ' GstStateChangeReturn gst_element_set_state(GstElement *element, GstState state) ' Sets the state of the element. Private Extern gst_element_set_state(gstelement As Pointer, state As Integer) As Integer ' void gst_object_unref(gpointer object) ' Decrements the reference count on object. Private Extern gst_object_unref(gobject As Pointer) Library "libgstvideo-1.0:0.2403.0" ' void gst_video_overlay_set_window_handle (GstVideoOverlay *overlay, guintptr handle) ' Calls the video overlay's set_window_handle method. Private Extern gst_video_overlay_set_window_handle(overlay As Pointer, handle As Integer) Public Sub Form_Open() Dim fileImmagine As String gst_init(0, 0) immago = gst_element_factory_make("playbin", "immagine") If IsNull(immago) Then Error.Raise("Impossibile creare un elemento 'playbin' !") fileImmagine = "/percorso/del/file/immagine" g_object_set(immago, "uri", g_filename_to_uri(fileImmagine, Null, 0), Null) ' Imposta la "DrawingArea" come superficie per la riproduzione dell'immagine: gst_video_overlay_set_window_handle(immago, DrawingArea1.Handle) ' Mostra l'immagine: gst_element_set_state(immago, GST_STATE_PLAYING) End Public Sub Button1_Click() Me.Close End Public Sub Form_Close() gst_object_unref(immago) End