Cancellare una immagine in una PictureBox o in una ImageView

Da Gambas-it.org - Wikipedia.
Versione del 8 nov 2021 alle 22:18 di Vuott (Discussione | contributi) (Creata pagina con "Per cancellare un'immagine caricata precedentemente in una ''PictureBox'' o in una ''ImageView'', si potranno adottare almeno due modalità. Gli esempi di seguito mostrati fa...")

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

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

Gli esempi di seguito mostrati faranno uso di una PictureBox, ma sono validi anche volendo utilizzare una ImageView.

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 Picture


Public Sub Form_Open()

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

 PictureBox1.Picture = pc

End


Public Sub Button1_Click()

' Distruggiamo l'Oggetto "Picture", assegnando alla sua variabile il valore "Null":
  pc = Null

' Verifichiamo l'effetto dell'assegnazione di "Null" all'Oggetto "Picture":
  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 moltiplicare le proprietà ".Width ", ".Height " e "(.Depth / 8) " 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
   .Image = im
 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 + (SizeOf(gb.Pointer) * 2))
  
' 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 * (im.Depth / 8)
   Write #st, 0 As Byte
 Next
 st.Close
  
' Ricarichiamo l'immagine ormai con i valori dei suoi pixel tutti azzerati:
 PictureBox1.Image = im
  
End