Creare file GIF con le funzioni esterne del API di Libplot

Da Gambas-it.org - Wikipedia.

La libreria Libplot fornisce risorse per creare svariati tipi di file di grafica 2-D sia vettoriali che bitmap.

In particolare, anche se questa libreria può produrre ciò che sembrano essere GIF e GIF animate, essa non trasgredisce alcun brevetto che copre l'algoritmo di compressione LZW. La ragione è che invece di codifica LZW, utilizza la codifica run-length encoding (RLE), che non è brevettabile. Per evitare confusione, i file prodotti da questa libreria vengono chiamati: "file pseudo-GIF".

Come già accennato, la libreria Libplot è in grado di generare vari tipi di file, compreso quello GIF, contenenti elementi grafici di base come testo e figure piane (cerchio, ellisse, quadrato, rettangolo, arco, linee, ed altro). Può essere impostata sia la trasparenza che il colore.

In questa pagina si procederà, per quanto possibile, a mostrare gradatamente le capacità principali e le funzioni essenziali e più rilevanti per la realizzazione delle GIF, spiegandone la caratterisica di ciascuna brevemente con una didascalia in commento prima dell'istruzione.


Va precisato che per fruire in Gambas delle risorse della libreria Libprot, va installata e richiamata la libreria dinamica condivisa: "libplot.so.2.2.4"


Creare una semplice GIF con solo sfondo colorato

Il primo esempio mostrerà come realizzate una GIF avente semplicemente lo sfondo di colore unico.

Per la creazione di una GIF essenziale e di base sono sufficienti poche istruzioni. Va subito sottolineato che la funzione della libreria Libprot utile per impostare le caratteistiche fondamentali dell'immagine GIF, è la funzione: pl_setplparam().

Questa funzione può essere omessa qualora si intenda lasciare peruna determinata caratteristica le impostazioni predefinite previste dalla libreria Libprot.

Così, per iniziare, se si vuole creare una semplice GIF con le sole impostazioni predefinite, si otterrà un'immagine di tipo GIF con fondo di colore bianco e delle dimensioni 570x570 pixel. Library "libplot:2.2.4"

' plPlotterParams * pl_newplparams (void)
' Constructor constructor for the plPlotterParams type.
Private Extern pl_newplparams() As Pointer

' plPlotter * pl_newpl_r (const char *type, FILE *infile, FILE *outfile, FILE *errfile, const plPlotterParams *plotter_params)
' Constructor for the plPlotter type.
Private Extern pl_newpl_r(type As String, infile As Pointer, outfile As Pointer, errfile As Pointer, plotter_params As Pointer) As Pointer

' int pl_openpl_r (plPlotter *plotter)
Private Extern pl_openpl_r(plPlotter As Pointer) As Integer

' int pl_closepl_r (plPlotter *plotter)
Private Extern pl_closepl_r(plPlotter As Pointer) As Integer

' int pl_deletepl_r (plPlotter *plotter)
' Destructor for the plPlotter type.
Private Extern pl_deletepl_r(plPlotter As Pointer) As Integer

' int pl_deleteplparams (plPlotterParams *plotter_params)
' Destructor for the plPlotterParams type.
Private Extern pl_deleteplparams(plotter_params As Pointer) As Integer


Library "libc:6"

' FILE *fopen(const char *filename, const char *mode)
' Opens the filename pointed to by filename using the given mode.
Private Extern fopen(filename As String, mode As String) As Pointer

' int fclose(FILE *stream)
' Closes the stream. All buffers are flushed.
Private Extern fclose(fs As Pointer) As Integer


Public Sub Main()

 Dim plotter, param, fl As Pointer

  fl = fopen("/percorso/del/file.gif", "wb")

' Imposta i parametri (in questo caso sono quelli predefiniti) del disegnatore della GIF:
  param = pl_newplparams()

' Crea un disegnatore di GIF con i parametri specificati (in questo caso sono quelli predefiniti):
  plotter = pl_newpl_r("gif", 0, fl, 0, param)
   
  pl_openpl_r(plotter)
   
' Va in chiusura:
  pl_deleteplparams(param)
  pl_closepl_r(plotter)
  pl_deletepl_r(plotter)
  fclose(fl)

End


Impostare parametri dell'immagine diversi da quelli predefiniti

Per impostare caratteristiche dell'immagine diverse da quelle predefinite, dopo la funzione pl_newplparams() si dovrà fare uso della funzione pl_setplparam().
Detta nuova funzione verrà così dichiarata con Extern:

' int pl_setplparam (plPlotterParams *plotter_params, const char *parameter, void *value)
' A function for setting a single Plotter parameter in a plPlotterParams instance.
Private Extern pl_setplparam(plotter_params As Pointer, parameter As String, value As String) As Integer

Va precisato che la funzione pl_setplparam() andrà utilizzata tante volte quanti sono i parametri che si intendono impostare.

Cambiare colore allo sfondo dell'immagine

Se si intende cambiare colore allo sfondo dell'immagine, allora nel secondo argomento della funzione pl_setplparam() si inserirà il parametro "BG_COLOR", e terzo argomento verrà impostato il colore di fondo con il nome oppure con il corrispondente valore numerico.
Quindi avremo:

......

  param = pl_newplparams()

  pl_setplparam(param, "BG_COLOR", "yellow")

......

Impostare le dimensioni dell'immagine

Se si intende impostare una dimensione della GIF diversa da quella predefinita (570x570 pixel), si imposterà nel secondo argomento della funzione pl_setplparam() il parametro "BITMAPSIZE", e nel terzo argomento una stringa contenente i valori desiderati separati da una "x" minuscola (ad esempio: "640x400").
Quindi avremo:

......

  param = pl_newplparams()

  pl_setplparam(param, "BITMAPSIZE", "640x400")

......



Pagina in costruzione !



Riferimenti