Differenze tra le versioni di "Ridimensionare un'immagine mediante le funzioni esterne del API di ImageMagick"

Da Gambas-it.org - Wikipedia.
Riga 20: Riga 20:
 
    
 
    
 
  <FONT Color=gray>' ''MagickWand *NewMagickWand(void)''
 
  <FONT Color=gray>' ''MagickWand *NewMagickWand(void)''
  ' Returns a wand required for all other methods in the API.''</font>
+
  ' ''Returns a wand required for all other methods in the API.''</font>
 
  Private Extern NewMagickWand() As Pointer
 
  Private Extern NewMagickWand() As Pointer
 
    
 
    
 
  <FONT Color=gray>' ''MagickBooleanType MagickReadImage(MagickWand *wand,const char *filename)''
 
  <FONT Color=gray>' ''MagickBooleanType MagickReadImage(MagickWand *wand,const char *filename)''
  ' Reads an image or image sequence.''</font>
+
  ' ''Reads an image or image sequence.''</font>
 
  Private Extern MagickReadImage(wand As Pointer, filename As String) As Boolean
 
  Private Extern MagickReadImage(wand As Pointer, filename As String) As Boolean
 
   
 
   
 
  <FONT Color=gray>' ''MagickBooleanType MagickResizeImage(MagickWand *wand, const size_t columns,const size_t rows,const FilterType filter)''
 
  <FONT Color=gray>' ''MagickBooleanType MagickResizeImage(MagickWand *wand, const size_t columns,const size_t rows,const FilterType filter)''
  ' Scales an image to the desired dimensions with a filter.''</font>
+
  ' ''Scales an image to the desired dimensions with a filter.''</font>
 
  Private Extern MagickResizeImage(wand As Pointer, columns As Long, rows As Long, filter As Integer, blur As Float) As Boolean
 
  Private Extern MagickResizeImage(wand As Pointer, columns As Long, rows As Long, filter As Integer, blur As Float) As Boolean
 
   
 
   
 
  <FONT Color=gray>' ''MagickBooleanType MagickWriteImages(MagickWand *wand, const char *filename,const MagickBooleanType adjoin)''
 
  <FONT Color=gray>' ''MagickBooleanType MagickWriteImages(MagickWand *wand, const char *filename,const MagickBooleanType adjoin)''
  ' Writes an image or image sequence.''</font>
+
  ' ''Writes an image or image sequence.''</font>
 
  Private Extern MagickWriteImages(wand As Pointer, filename As String, adjoin As Boolean) As Boolean
 
  Private Extern MagickWriteImages(wand As Pointer, filename As String, adjoin As Boolean) As Boolean
 
   
 
   
 
  <FONT Color=gray>' ''MagickWand *DestroyMagickWand(MagickWand *wand)''
 
  <FONT Color=gray>' ''MagickWand *DestroyMagickWand(MagickWand *wand)''
  ' Deallocates memory associated with an MagickWand.''</font>
+
  ' ''Deallocates memory associated with an MagickWand.''</font>
 
  Private Extern DestroyMagickWand(wand As Pointer) As Pointer
 
  Private Extern DestroyMagickWand(wand As Pointer) As Pointer
 
   
 
   
 
  <FONT Color=gray>' ''void MagickWandTerminus(void)''
 
  <FONT Color=gray>' ''void MagickWandTerminus(void)''
  ' Terminates the MagickWand environment.''</font>
+
  ' ''Terminates the MagickWand environment.''</font>
 
  Private Extern MagickWandTerminus()
 
  Private Extern MagickWandTerminus()
 
   
 
   
Riga 46: Riga 46:
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
    
 
    
  Dim bo As Boolean
+
  Dim bo As Boolean
  Dim magickwand As Pointer
+
  Dim magickwand As Pointer
  Dim fileimmagine, nuovofile As String   
+
  Dim fileimmagine, nuovofile As String   
 
    
 
    
 
   fileimmagine = "<FONT Color=gray>''/percorso/del/file/immagine''</font>"
 
   fileimmagine = "<FONT Color=gray>''/percorso/del/file/immagine''</font>"
Riga 75: Riga 75:
 
    
 
    
 
  '''End'''
 
  '''End'''
 
 
   
 
   
 
  '''Private''' Procedure Chiude(mw As Pointer)
 
  '''Private''' Procedure Chiude(mw As Pointer)

Versione delle 18:58, 22 feb 2022

Il sistema ImageMagick consente di creare, modificare e convertire immagini bitmap. Può altresì leggere e scrivere immagini di oltre 200 formati.

Per poter fruire in Gambas delle risorse, è necessario avere installata nel sistema e richiamare la seguente libreria condivisa: "libMagickWand-6.Q16.so.6.0.0 ".


Mostriamo di seguito un semplice esempio pratico per creare da una immagine iniziale una sua copia ridimensionata come un thumbnail:

Library "libMagickWand-6.Q16:6.0.0"

Private Enum MagickFalse = 0, MagickTrue
Private Enum UndefinedFilter = 0, PointFilter, BoxFilter, TriangleFilter, HermiteFilter,
  HanningFilter, HammingFilter, BlackmanFilter, GaussianFilter, QuadraticFilter,
  CubicFilter, CatromFilter, MitchellFilter, JincFilter, SincFilter, SincFastFilter,
  KaiserFilter, WelshFilter, ParzenFilter, BohmanFilter, BartlettFilter, LagrangeFilter,
  LanczosFilter, LanczosSharpFilter, Lanczos2Filter, Lanczos2SharpFilter, RobidouxFilter,
  RobidouxSharpFilter, CosineFilter, SplineFilter, LanczosRadiusFilter, SentinelFilter
 
' void MagickWandGenesis(void)
' Initializes the MagickWand environment.
Private Extern MagickWandGenesis()
 
' MagickWand *NewMagickWand(void)
' Returns a wand required for all other methods in the API.
Private Extern NewMagickWand() As Pointer
 
' MagickBooleanType MagickReadImage(MagickWand *wand,const char *filename)
' Reads an image or image sequence.
Private Extern MagickReadImage(wand As Pointer, filename As String) As Boolean

' MagickBooleanType MagickResizeImage(MagickWand *wand, const size_t columns,const size_t rows,const FilterType filter)
' Scales an image to the desired dimensions with a filter.
Private Extern MagickResizeImage(wand As Pointer, columns As Long, rows As Long, filter As Integer, blur As Float) As Boolean

' MagickBooleanType MagickWriteImages(MagickWand *wand, const char *filename,const MagickBooleanType adjoin)
' Writes an image or image sequence.
Private Extern MagickWriteImages(wand As Pointer, filename As String, adjoin As Boolean) As Boolean

' MagickWand *DestroyMagickWand(MagickWand *wand)
' Deallocates memory associated with an MagickWand.
Private Extern DestroyMagickWand(wand As Pointer) As Pointer

' void MagickWandTerminus(void)
' Terminates the MagickWand environment.
Private Extern MagickWandTerminus()


Public Sub Main()
 
  Dim bo As Boolean
  Dim magickwand As Pointer
  Dim fileimmagine, nuovofile As String  
 
  fileimmagine = "/percorso/del/file/immagine"
  nuovofile = "/percorso/del/file/immagine/ridimensionata"
  
  MagickWandGenesis()
  
  magickwand = NewMagickWand()
  
  bo = MagickReadImage(magickwand, fileimmagine)
  If bo = MagickFalse Then
    Error.Raise("Impossibile caricare il file immagine !")
    Chiude(magickwand)
  Endif
  
' Ridimensiona l'immagine:
  MagickResizeImage(magickwand, 106, 80, LanczosFilter, 1.0)
     
  bo = MagickWriteImages(magickwand, nuovofile, MagickTrue)
  If bo = MagickFalse Then
    Error.Raise("Impossibile creare il nuovo file dell'immagine ridimensionata !")
    Chiude(magickwand)
  Endif
 
  Chiude(magickwand)
  
End

Private Procedure Chiude(mw As Pointer)
 
' Libera la memoria e chiude la libreria "ImageMagick":
  DestroyMagickWand(mw)
  Wait 0.01
  MagickWandTerminus()
  
End


Riferimenti