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


Riferimenti