Ottenere alcune informazioni sul file immagine con le funzioni del API di GTK+3 e GDK-PixBuf

Da Gambas-it.org - Wikipedia.

GTK+3 è una libreria per la creazione di interfacce grafiche utente. GDK-PixBuf è una libreria grafica per il caricamento e la manipolazione delle immagini.

Fra molteplici potenzialità esse consentono di ottenere alcune informazioni sui file immagine.

Sarà necessario avere installata nel sistema la libreria: "libgdk_pixbuf-2.0.so.0.4200.8 ".

Mostriamo un semplice esempio pratico:

Library "libgdk_pixbuf-2.0:0.4200.8"

Public Struct GdkPixbufFormat
  name As Pointer
  signature As Pointer
  domain As Pointer
  description As Pointer
  mime_types As Pointer
  extensions As Pointer
  flags As Integer
  disabled As Boolean
  license As Pointer
End Struct

' GdkPixbuf * gdk_pixbuf_new_from_file (const char *filename, GError **error)
' Creates a new pixbuf by loading an image from a file.
Private Extern gdk_pixbuf_new_from_file(filename As String, GError As Pointer) As Pointer

' guchar * gdk_pixbuf_get_pixels (const GdkPixbuf *pixbuf)
' Queries a pointer to the pixel data of a pixbuf.
Private Extern gdk_pixbuf_get_pixels(GdkPixbuf As Pointer) As Pointer

' int gdk_pixbuf_get_width (const GdkPixbuf *pixbuf)
' Queries the width of a pixbuf.
Private Extern gdk_pixbuf_get_width(GdkPixbuf As Pointer) As Integer

' int gdk_pixbuf_get_height (const GdkPixbuf *pixbuf)
' Queries the height of a pixbuf.
Private Extern gdk_pixbuf_get_height(GdkPixbuf As Pointer) As Integer

' int gdk_pixbuf_get_n_channels (const GdkPixbuf *pixbuf)
' Queries the number of channels of a pixbuf.
Private Extern gdk_pixbuf_get_n_channels(GdkPixbuf As Pointer) As Integer

' gboolean gdk_pixbuf_get_has_alpha (const GdkPixbuf *pixbuf)
' Queries whether a pixbuf has an alpha channel (opacity information).
Private Extern gdk_pixbuf_get_has_alpha(GdkPixbuf As Pointer) As Boolean

' int gdk_pixbuf_get_bits_per_sample (const GdkPixbuf *pixbuf)
' Queries the number of bits per color sample in a pixbuf.
Private Extern gdk_pixbuf_get_bits_per_sample(pixbuf As Pointer) As Integer

' int gdk_pixbuf_get_rowstride (const GdkPixbuf *pixbuf)
' Queries the rowstride of a pixbuf.
Private Extern gdk_pixbuf_get_rowstride(pixbuf As Pointer) As Integer

' gsize gdk_pixbuf_get_byte_length (const GdkPixbuf *pixbuf)
' Returns the length of the pixel data, in bytes.
Private Extern gdk_pixbuf_get_byte_length(pixbuf As Pointer) As Long

' GdkPixbufFormat * gdk_pixbuf_get_file_info (const gchar *filename, gint *width, gint *height)
' Parses an image file far enough to determine its format and size.
Private Extern gdk_pixbuf_get_file_info(filename As String, width As Pointer, height As Pointer) As Pointer

' void g_object_unref (gpointer object)
' Decreases the reference count of object.
Private Extern g_object_unref(gobject As Pointer)


Public Sub Main()

 Dim nomefile As String = "/percorso/del/file/immagine"
 Dim i, wi, hi As Integer
 Dim l As Long
 Dim pixbuf As Pointer
 Dim bo As Boolean
 Dim PixbufFormat As New GdkPixbufFormat

 pixbuf = gdk_pixbuf_new_from_file(nomefile, 0)
 If pixbuf == 0 Then Error.Raise("Errore !")
 
 Print "File immagine:            "; nomefile
 i = gdk_pixbuf_get_width(pixbuf)
 Print "Larghezza:                "; i; " pixel"
 i = gdk_pixbuf_get_height(pixbuf)
 Print "Altezza:                  "; i; " pixel"
 i = gdk_pixbuf_get_rowstride(pixbuf)
 Print "Numero di byte per riga:  "; i
 i = gdk_pixbuf_get_n_channels(pixbuf)
 Print "Canali:                   "; i
 bo = gdk_pixbuf_get_has_alpha(pixbuf)
 Print "Canale Alfa:              "; bo
 i = gdk_pixbuf_get_bits_per_sample(pixbuf)
 Print "Risoluzione:              "; i; " bit"
 l = gdk_pixbuf_get_byte_length(pixbuf)
 Print "Lunghezza dei dati pixel: "; l; " byte"
 
 g_object_unref(pixbuf)
 
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
 PixbufFormat = gdk_pixbuf_get_file_info(nomefile, VarPtr(wi), VarPtr(hi))
 
 With PixbufFormat
   Print "\nName:        "; String@(.name)                  ' Il nome del formato immagine
   Print "Domain:      "; String@(.domain)                ' Il contrassegno del modulo
   Print "Description: "; String@(.description)           ' Il dominio del messaggio per la descrizione
   Print "Mime-Type:   "; String@(Pointer@(.mime_types))  ' Una descrizione del formato immagine
   Print "Extension:   "; String@(Pointer@(.extensions))  ' Un array di MIME-types del formato immagine
   Print "Flag:        "; .flags             ' Combinazione di flags che specifica ulteriori dettagli sulle operazioni supportate
   Print "License:     "; String@(.license)  ' Informazione sulla licenza relativa al formato immagine
 End With
 
End



Riferimenti