Differenze tra le versioni di "Creare un file immagine trasparente di tipo GIF con le funzioni del API di GIFLIB"

Da Gambas-it.org - Wikipedia.
(Pagina sostituita con '<FONT Color=Red>Pagina in costruzione</font>')
Riga 1: Riga 1:
Come si sa, salvare un'immagine in un file di formato ''.GIF'' (''Graphics Interchange Format''), in Gambas non è attualmente possibile. Gambas possiede, sì, risorse per caricare file immagine di tipo ''.gif'', ma non per salvarle.
+
<FONT Color=Red>Pagina in costruzione</font>
 
 
Un aiuto, però, per la generazione di file immagine di tipo ''GIF'' può giungerci dalle risorse della libreria ''GIFLIB'', la quale consente di caricare, gestire, maniplare, creare ''ex novo'' e salvare file immagine in fomato ''GIF''.
 
 
 
Per poter utilizzare al meglio le risorse della libreria ''GifLib'' con Gambas, suggeriamo di utilizzare la relativa libreria dinamica condivisa nella seguente versione: ''libgif.so.7.0.0''
 
 
 
 
 
Mostriamo di seguito un breve esempio per generare ''ex novo'' un semplice file immagine trasparente di tipo ''.gif'':
 
Private Const QuantitasColori As Integer = 256
 
Private Const DimMappaColori As Integer = 8
 
 
 
Library "libgif:7.0.0"
 
 
Private Enum GIF_ERROR = 0, GIF_OK
 
 
<FONT Color=gray>' ''ColorMapObject * GifMakeMapObject (int ColorCount, const GifColorType * ColorMap)''
 
' ''Allocate a color map of given size.''</font>
 
Private Extern GifMakeMapObject(ColorCount As Integer, ColorMap As Pointer) As Pointer
 
 
<FONT Color=gray>' ''GifFileType * EGifOpenFileName(const char *FileName, const bool TestExistence, int *Error)''
 
' ''Open a new GIF file for write, specified by name.''</font>
 
Private Extern EGifOpenFileName(FileName As String, TestExistence As Boolean, ErrorP As Pointer) As Pointer
 
 
<FONT Color=gray>' ''int EGifPutScreenDesc(GifFileType *GifFile, const int Width, const int Height, const int ColorRes, const int BackGround, const ColorMapObject *ColorMap)''
 
' ''This routine should be called immediately following the GIF file opening.''</font>
 
Private Extern EGifPutScreenDesc(GifFileType As Pointer, wI As Integer, hI As Integer, ColorRes As Integer, BackGround As Integer, ColorMap As Pointer) As Integer
 
 
<FONT Color=gray>' ''int EGifPutImageDesc(GifFileType *GifFile, const int Left, const int Top, const int Width, const int Height, const bool Interlace, const ColorMapObject *ColorMap)''
 
' ''This routine should be called before any attempt to dump an image - any call to any of the pixel dump routines.''</font>
 
Private Extern EGifPutImageDesc(GifFileType As Pointer, LeftI As Integer, Top As Integer, wI As Integer, hI As Integer, Interlace As Boolean, ColorMap As Pointer) As Integer
 
 
<FONT Color=gray>' ''int EGifCloseFile(GifFileType *GifFile, int *ErrorCode)''
 
' ''Closes the GIF file.''</font>
 
Private Extern EGifCloseFile(GifFileType As Pointer, ErrorCode As Pointer) As Integer
 
 
 
'''Public''' Sub Main()
 
 
  Dim Width, Height, err As Integer
 
  Dim MappaColori, fileGIF As Pointer
 
 
<FONT Color=gray>' ''Impostiamo a piacere le dimensioni in pixel dell'immagine da creare:''</font>
 
  Width = 640
 
  Height = 400
 
 
 
  MappaColori = GifMakeMapObject(QuantitasColori, Null)
 
  If IsNull(MappaColori) Then Error.Raise("Impossibile allocare memoria !")
 
   
 
  fileGIF = EGifOpenFileName("''/percorso/del/file.gif''", 0, 0)
 
  If IsNull(fileGIF) Then Error.Raise("Impossibile creare il file GIF !")
 
 
  err = EGifPutScreenDesc(fileGIF, Width, Height, DimMappaColori, 0, MappaColori)
 
  If err = GIF_ERROR Then Error.Raise("Errore alla funzione 'EGifPutScreenDesc()' !")
 
   
 
  err = EGifPutImageDesc(fileGIF, 0, 0, Width, Height, False, Null)
 
  If err = GIF_ERROR Then Error.Raise("Errore alla funzione 'EGifPutImageDesc()' !")
 
 
  If EGifCloseFile(fileGIF, 0) = GIF_ERROR Then Error.Raise("Errore nella chiusura del file GIF !")
 
   
 
'''End'''
 
 
 
 
 
 
 
 
 
=Riferimenti=
 
* [http://giflib.sourceforge.net/gif_lib.html The GIFLIB Library]
 
* [http://fossies.org/dox/giflib-5.1.0/index.html giflib API Documentation]
 

Versione delle 13:29, 10 dic 2014

Pagina in costruzione