Cancellare una immagine in una PictureBox

Da Gambas-it.org - Wikipedia.

Per cancellare un'immagine caricata precedentemente in una PictureBox, si potranno adottare almeno due modalità.

Assegnare alla proprietà .Picture della PictureBox il valore Null

La prima modalità, molto semplice e rapida, prevede di assegnare alla proprietà .Picture della PictureBox il valore Null.

Esempio pratico:

Public Sub Form_Open()

 PictureBox1.Picture = Picture.Load("/percorso/del/file/immagine") 

End


Public Sub Button1_Click()

' Cancelliamo l'immagine precedentemente caricata:
  PictureBox1.Picture = Null

End


Questa modalità è valida anche per cancellare un'immagine precedentemente caricata in una variabile di tipo Picture:

Private pc As New Picture


Public Sub Form_Open()

 pc = pc.Load("/percorso/del/file/immagine")

 PictureBox1.Picture = pc

End


Public Sub Button1_Click()

' Cancelliamo dalla variabile di tipo picture l'immagine precedentemente caricata:
  pc = Null

' Per ottenere l'effetto finale, dovremo ricaricare i valori della variabile nella "PictureBox":
  PictureBox1.Picture = pc

End


Azzerando i valori afferenti ai pixel dell'immagine mediante i Memory Stream

La seconda modalità prevede di accedere all'area di memoria della Struttura "GB_IMG", dichiarata nei sorgenti di Gambas per la gestione dell'Oggetto Image.

Successivamente all'accesso all'area di memoria della Struttura "GB_IMG", si dovrà in particolare accedere all'area di memoria puntata dal Puntatore presente come secondo membro, denominato "unsigned char *data", nella predetta Struttura "GB_IMG", e si provvederà mediante i Memory Stream ad azzerare tutti i valori afferenti ai pixel dell'immagine caricata. Per la determinazione della quantità di byte da azzerare, si avrà cura di moltiplicarele proprietà ".Width", ".Height" e "Len(.Format)" dell'Oggetto Image.

Azzerati tutti i valori dei pixel, si provvederà a ricaricare nella PictureBox l'immagine, la quale, avendo ora il valore del canale Alfa impostato a zero, risulterà del tutto trasparente, lasciando così intravedere il colore di sfondo dell'oggetto PictureBox.

Mostriamo un esempio pratico:

Private im As Image


Public Sub Form_Open()
 
 im = Image.Load("/percorso/del/file/immagine")
 
 With PictureBox1
   .X = 10
   .Y = 10
   .W = im.W
   .H = im.H
   .Picture = im.Picture
 End With
  
End


Public Sub Button1_Click()
 
 Dim p1, p2 As Pointer
 Dim i As Integer
 Dim st As Stream
  
' Accediamo all'area di memoria riservata della Struttura "GB_IMG" costituente l'Oggetto "Image" corrente:
  p1 = Object.Address(im)
  
' Accediamo all'area di memoria riservata puntata dal 2° membro della Struttura "GB_IMG":
  p2 = Pointer@(p1 + 16)
  
' Utilizziamo i "Memory Stream" in scrittura per azzerare tutti i dati afferenti ai pixel dell'immagine:
  st = Memory p2 For Write
  For i = 0 To im.W * im.H * Len(im.Format)
    Write #st, 0 As Byte
  Next
  st.Close
  
' Ricarichiamo l'immagine ormai con i valori dei suoi pixel tutti azzerati:
  PictureBox1.Picture = im.Picture
  
End