Differenze tra le versioni di "Modificare il colore di sfondo di un'immagine GIF con le funzioni del API di GifLib"
Da Gambas-it.org - Wikipedia.
Riga 1: | Riga 1: | ||
− | La libreria ''GIFLIB'' consente di caricare, gestire, | + | La libreria ''GIFLIB'' consente di caricare, gestire, manipolare, creare ex novo e salvare file immagine in fomato GIF. |
E' possibile con alcune sue funzioni caricare un'immagine di tipo GIF, modificarne il colore di sfondo e quindi salvare il risultato in un nuovo file d tipo ''.gif'' . | E' possibile con alcune sue funzioni caricare un'immagine di tipo GIF, modificarne il colore di sfondo e quindi salvare il risultato in un nuovo file d tipo ''.gif'' . |
Versione delle 10:37, 24 dic 2014
La libreria GIFLIB consente di caricare, gestire, manipolare, creare ex novo e salvare file immagine in fomato GIF.
E' possibile con alcune sue funzioni caricare un'immagine di tipo GIF, modificarne il colore di sfondo e quindi salvare il risultato in un nuovo file d tipo .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 un semplice esempio:
Library "libgif:7.0.0" Private Const GIF_FONT_HEIGHT As Integer = 8 ' GifFileType * DGifOpenFileName(const char *FileName, int *Error) ' Open a new GIF file for read, given by its name. Private Extern DGifOpenFileName(FileName As String, ErrorP As Pointer) As Pointer ' int DGifSlurp(GifFileType *GifFile) ' Reads an entire GIF into core, hanging all its state info off the GifFileType pointer. Private Extern DGifSlurp(GifFileType As Pointer) As Integer ' GifFileType * EGifOpenFileName(const char *FileName, const bool TestExistence, int *Error) ' Open a new GIF file for write, specified by name. Private Extern EGifOpenFileName(FileName As String, TestExistence As Boolean, ErrorP As Pointer) As Pointer ' ColorMapObject * GifMakeMapObject (int ColorCount, const GifColorType * ColorMap) ' Allocate a color map of given size. Private Extern GifMakeMapObject(ColorCount As Integer, ColorMap As Pointer) As Pointer ' SavedImage * GifMakeSavedImage(GifFileType *GifFile, const SavedImage *CopyFrom) ' Append an image block to the SavedImages array. Private Extern GifMakeSavedImage(GifFileType As Pointer, CopyFrom As Pointer) As Pointer ' int EGifSpew(GifFileType *GifFileOut) Private Extern EGifSpew(GifFileType As Pointer) As Integer ' int DGifCloseFile(GifFileType *GifFile, int *ErrorCode) ' Close the GIF file. Private Extern DGifCloseFile(GifFileType As Pointer, ErrorP As Pointer) As Integer Public Sub Main() Dim fileGIFIn, fileGIFOut, p1, p2, p3, SavedImage As Pointer Dim SWidth, SHeight As Integer Dim SColorResolution, SBackGroundColor, ColorCount As Integer Dim stIn, colori, rgb, stOut As Stream Dim b As Byte ' Apre il file .gif in entrata: fileGIFIn = DGifOpenFileName("/percorso/del/file.gif", 0) If IsNull(fileGIFIn) Then Error.Raise("Impossibile creare il file GIF !") DGifSlurp(fileGIFIn) ' Apre il file .gif in uscita: fileGIFOut = EGifOpenFileName("/percorso/del/nuovo/file.gif", 0, 0) If IsNull(fileGIFOut) Then Error.Raise("Impossibile creare il file GIF !") ' Legge i valori RGB del colore di fondo dell'immagine gif caricata: stIn = Memory fileGIFIn For Read Write ' struct GifFileType Read #stIn, SWidth Read #stIn, SHeight Read #stIn, SColorResolution Read #stIn, SBackGroundColor Seek #stIn, 24 ' struct ColorMapObject *SColorMap Read #stIn, p1 Seek #stIn, 72 Read #stIn, SavedImage ' struct SavedImage stIn.Close Print "Dimensione: "; Null, SWidth; " pixel x "; SHeight; " pixel" Print "Risoluzione: "; Null, SColorResolution colori = Memory p1 For Read Write ' struct ColorMapObject *SColorMap Read #colori, ColorCount Seek #colori, 16 Read #colori, p2 colori.Close rgb = Memory p2 For Read ' struct GifColorType *Colors Print "\nColori dello sfondo:" Read #rgb, b Print "Rosso: "; Null, Null, b Read #rgb, b Print "Verde: "; Null, Null, b Read #rgb, b Print "Verde: "; Null, Null, b rgb.Close ' Scrive i nuovi valori RGB del colore di fondo dell'immagine gif caricata: stIn = Memory fileGIFIn For Read Seek #stIn, 24 Read #stIn, p1 stIn.Close colori = Memory p1 For Read Seek #colori, 16 Read #colori, p2 colori.Close rgb = Memory p2 For Write Write #rgb, 255 As Byte Write #rgb, 255 As Byte Write #rgb, 0 As Byte rgb.Close stOut = Memory fileGIFOut For Read Write Write #stOut, SWidth As Integer Write #stOut, SHeight As Integer Write #stOut, SColorResolution As Integer Write #stOut, SBackGroundColor As Integer p3 = Alloc(24) colori = Memory p3 For Write ' struct ColorMapObject Seek #colori, 16 Write #colori, GifMakeMapObject(ColorCount, p2) Seek #stOut, 24 ' struct ColorMapObject *SColorMap Write #stOut, p3 colori.Close stOut.Close GifMakeSavedImage(fileGIFOut, SavedImage) ' Va in chiusura: Free(p3) EGifSpew(fileGIFOut) DGifCloseFile(fileGIFIn, 0) End