Convertire un'immagine da un formato ad un altro mediante le funzioni esterne del API di FreeImage
Da Gambas-it.org - Wikipedia.
FreeImage è una libreria open source per gli sviluppatori che desiderano gestire immagini grafiche di formato PNG, BMP, JPEG, TIFF e altri come richiesti dalle odierne applicazioni multimediali.
La libreria FreeImage consente anche di convertire numerosi formati immagine in altri formati.
Per poter fruire in Gambas delle risorse di FreeImage, è necessario avere installata nel sistema e richiamare la libreria condivisa: "libfreeimage-3.18.0.so "
Mostriamo un semplice ed essenziale esempio pratico, nel quale si convertirà un file immagine dal formato jpg nel formato tiff:
Library "libfreeimage-3.18.0" Private Enum FIF_UNKNOWN = -1, FIF_BMP, FIF_ICO, FIF_JPEG, FIF_JNG, FIF_KOALA, FIF_LBM, FIF_IFF = 5, FIF_MNG = 6, FIF_PBM, FIF_PBMRAW, FIF_PCD, FIF_PCX, FIF_PGM, FIF_PGMRAW, FIF_PNG, FIF_PPM, FIF_PPMRAW, FIF_RAS, FIF_TARGA, FIF_TIFF, FIF_WBMP, FIF_PSD, FIF_CUT, FIF_XBM, FIF_XPM, FIF_DDS, FIF_GIF, FIF_HDR, FIF_FAXG3, FIF_SGI, FIF_EXR, FIF_J2K, FIF_JP2, FIF_PFM, FIF_PICT, FIF_RAW Private Const JPEG_DEFAULT As Integer = 0 Private Const TIFF_DEFAULT As Integer = 0 ' void FreeImage_Initialise(BOOL FI_DEFAULT(FALSE)) ' Initialises the library. Private Extern FreeImage_Initialise(fi_default As Boolean) ' const char * FreeImage_GetCopyrightMessage(void) ' Returns a string containing a standard copyright message. Private Extern FreeImage_GetCopyrightMessage() As String ' FIBITMAP * FreeImage_Load(FREE_IMAGE_FORMAT fif, const char *filename, int flags FI_DEFAULT(0)) ' Load routines. Decodes a bitmap, allocates memory for it and then returns it as a FIBITMAP. Private Extern FreeImage_Load(fif As Integer, filename As String, flags As Integer) As Pointer ' BOOL FreeImage_Save(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, const char *filename, int flags FI_DEFAULT(0)) ' Saves a previously loaded FIBITMAP to a file. Private Extern FreeImage_Save(fif As Integer, dib As Pointer, filename As String, flags As Integer) As Boolean ' void FreeImage_Unload(FIBITMAP *dib) ' Unload routines. Private Extern FreeImage_Unload(dib As Pointer) ' void FreeImage_DeInitialise(void) ' Deinitialises the library. Private Extern FreeImage_DeInitialise() Public Sub Main() Dim cp As String Dim fbm As Pointer Dim bo As Boolean ' Inizializza la libreria "FreeImage": FreeImage_Initialise(False) cp = FreeImage_GetCopyrightMessage() Print cp fbm = FreeImage_Load(FIF_JPEG, "/percorso/del/file/immagine.jpg", JPEG_DEFAULT) bo = FreeImage_Save(FIF_TIFF, fbm, "/percorso/del/nuovo/file/immagine.tif", TIFF_DEFAULT) If bo = False Then Error.Raise("Impossibile salvare l'immagine !") ' Libera la memoria precedentemente allocata e deinizializza la libreria "FreeImage": FreeImage_Unload(fbm) FreeImage_DeInitialise() End