Differenze tra le versioni di "Ruotare e ribaltare sul proprio asse una immagine con le funzioni del API di FreeImage"
Da Gambas-it.org - Wikipedia.
(Una versione intermedia di uno stesso utente non è mostrata) | |||
Riga 12: | Riga 12: | ||
FIF_TARGA, FIF_TIFF, FIF_WBMP, FIF_PSD, FIF_CUT, FIF_XBM, FIF_XPM, FIF_DDS, FIF_GIF, FIF_HDR, FIF_FAXG3, | 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 | FIF_SGI, FIF_EXR, FIF_J2K, FIF_JP2, FIF_PFM, FIF_PICT, FIF_RAW | ||
+ | |||
Private Const PNG_DEFAULT As Integer = 0 | Private Const PNG_DEFAULT As Integer = 0 | ||
Riga 72: | Riga 73: | ||
im = "<FONT Color=gray>''/percorso/del/file/immagine.png''</font>" | im = "<FONT Color=gray>''/percorso/del/file/immagine.png''</font>" | ||
− | If Exist(im) = False Then Error.Raise("File immagine inesistente !") | + | If Exist(im) = False Then Error.Raise("File immagine '" & im & "' inesistente !") |
fbm = FreeImage_Load(FIF_PNG, im, PNG_DEFAULT) | fbm = FreeImage_Load(FIF_PNG, im, PNG_DEFAULT) |
Versione attuale delle 11:42, 1 giu 2017
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.
Per poter fruire in Gambas delle risorse di FreeImage, è necessario avere installata nel sistema e richiamare la libreria dinamica condivisa: "libfreeimage-3.15.4.so"
Questa libreria consente, fra l'altro, di ruotare e di ribaltare un'immagine sui propri assi orizzontale e verticale.
Mostriamo un esempio pratico:
Library "libfreeimage-3.15.4" 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 PNG_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 ' unsigned FreeImage_GetWidth(FIBITMAP *dib) ' Returns the width of the bitmap in pixel units. Private Extern FreeImage_GetWidth(dib As Pointer) As Integer ' unsigned FreeImage_GetHeight(FIBITMAP *dib) ' Returns the height of the bitmap in pixel units. Private Extern FreeImage_GetHeight(dib As Pointer) As Integer ' FIBITMAP * FreeImage_RotateClassic(FIBITMAP *dib, double angle) ' Rotates a 1-, 8-bit greyscale or a 24-, 32-bit color image by means of 3 shears. Private Extern FreeImage_RotateClassic(dib As Pointer, angle As Float) As Pointer ' BOOL FreeImage_FlipHorizontal(FIBITMAP *dib) ' Flip the input dib horizontally along the vertical axis. Private Extern FreeImage_FlipHorizontal(dib As Pointer) As Boolean ' BOOL FreeImage_FlipVertical(FIBITMAP *dib) ' Flip the input dib vertically along the horizontal axis. Private Extern FreeImage_FlipVertical(dib As Pointer) As Boolean ' 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, im As String Dim fbm As Pointer Dim bo As Boolean ' Inizializza la libreria "FreeImage": FreeImage_Initialise(False) cp = FreeImage_GetCopyrightMessage() Print cp im = "/percorso/del/file/immagine.png" If Exist(im) = False Then Error.Raise("File immagine '" & im & "' inesistente !") fbm = FreeImage_Load(FIF_PNG, im, PNG_DEFAULT) If fbm = 0 Then Error.Raise("Impossibile caricare l'immagine " & im) ' Mostra alcune informazioni sul file immagine caricato: Print "\nFile immagine: "; im Print "Dimensione: "; FreeImage_GetWidth(fbm); "x"; FreeImage_GetHeight(fbm) ' Ruota l'immagine di 45°: fbm = FreeImage_RotateClassic(fbm, 45) ' Ribalta l'immagine sul proprio asse orizzontale: FreeImage_FlipHorizontal(fbm) ' Ribalta l'immagine sul proprio asse verticale: FreeImage_FlipVertical(fbm) bo = FreeImage_Save(FIF_PNG, fbm, "/percorso/del/nuovo/file/immagine.png", PNG_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