Spostare il contenuto all'interno di un'immagine mediante le funzioni esterne del API di ImageMagick

Da Gambas-it.org - Wikipedia.

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 ".


Le risorse di questa libreria ci consentono - fra l'altro - di spostare il contenuto all'interno di un'immagine lungo uno o entrambi gli assi di spostamento x, y. Così, se l'immagine presenta, come disegno al suo interno, la lettera "A":

[ A ]

essa potrà essere spostata all'interno del campo dell'immagine medesima lungo il suo asse di spostamento x, ad esempio, così:

[  A]

Mostriamo un esempio pratico:

Library "libMagickWand-6.Q16:6.0.0"

Private Enum MagickFalse = 0, MagickTrue

' 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 MagickRollImage(MagickWand *wand,const ssize_t x, const size_t y)
' Offsets an image as defined by x_offset and y_offset.
Private Extern MagickRollImage(wand As Pointer, x As Long, y As Long) 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/nuovo/file/dell'immagine/spostata"
  
  MagickWandGenesis()
     
  magickwand = NewMagickWand()
  
  bo = MagickReadImage(magickwand, fileimmagine)
  If bo = MagickFalse Then
    Termina(magickwand, pw)
    Error.Raise("Impossibile caricare l'immagine !")
  Endif
  
' Sposta tutto il disegno all'interno dell'immagine lungo il solo asse di spostamento x:
  MagickRollImage(magickwand, 120, 0)
  
  bo = MagickWriteImages(magickwand, nuovofile, MagickTrue)
  If bo = MagickFalse Then
    Termina(magickwand, pw)
    Error.Raise("Impossibile creare il nuovo file dell'immagine spostata !")
  Endif
  
  Termina(magickwand, pw)
  
End
 
Private Procedure Termina(mw As Pointer)    ' Libera la memoria e termina il programma
  
  DestroyMagickWand(mw)
  Wait 0.01
  MagickWandTerminus()
  
End


Riferimenti