Differenze tra le versioni di "Cancellare una immagine in una PictureBox o in una ImageView"

Da Gambas-it.org - Wikipedia.
 
(6 versioni intermedie di uno stesso utente non sono mostrate)
Riga 4: Riga 4:
  
 
==Assegnare alla proprietà ''.Picture'' della ''PictureBox'' il valore ''Null''==
 
==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'', che in sostanza è il valore per ''annullare/distruggere'' ogni tipo di "Oggetto".
+
La prima modalità, molto semplice e rapida, prevede di assegnare alla Proprietà ".Picture" della ''PictureBox'' il valore ''Null'', che in sostanza è il valore per ''annullare'' o ''distruggere'' ogni tipo di "Oggetto".
  
 
Esempio pratico:
 
Esempio pratico:
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
   
 
   
   PictureBox1.Picture = Picture.Load("<FONT color=gray>''/percorso/del/file/immagine''</font>")  
+
   PictureBox1.Picture = Picture.Load("<FONT color=darkgreen>''/percorso/del/file/immagine''</font>")  
 
   
 
   
  '''End'''
+
  End
 
   
 
   
  '''Public''' Sub Button1_Click()
+
   
 +
Public Sub Button1_Click()
 
   
 
   
 
  <FONT color=gray>' ''Cancelliamo l'immagine precedentemente caricata:''</font>
 
  <FONT color=gray>' ''Cancelliamo l'immagine precedentemente caricata:''</font>
 
   PictureBox1.Picture = <FONT color=#B22222>Null</font>
 
   PictureBox1.Picture = <FONT color=#B22222>Null</font>
 
   
 
   
  '''End'''
+
  End
 
 
 
 
 
Questa modalità è valida anche per cancellare un'immagine precedentemente caricata in una variabile di tipo ''Picture'':
 
Questa modalità è valida anche per cancellare un'immagine precedentemente caricata in una variabile di tipo ''Picture'':
 
  Private pc As Picture
 
  Private pc As Picture
 
   
 
   
 
   
 
   
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
   
 
   
   pc = Picture.Load("<FONT color=gray>''/percorso/del/file/immagine''</font>")
+
   pc = Picture.Load("<FONT color=darkgreen>''/percorso/del/file/immagine''</font>")
 
   
 
   
 
   PictureBox1.Picture = pc
 
   PictureBox1.Picture = pc
 
   
 
   
  '''End'''
+
  End
 
   
 
   
  '''Public''' Sub Button1_Click()
+
   
 +
Public Sub Button1_Click()
 
   
 
   
 
  <FONT color=gray>' ''Distruggiamo l'Oggetto "Picture", assegnando alla sua variabile il valore "Null":''</font>
 
  <FONT color=gray>' ''Distruggiamo l'Oggetto "Picture", assegnando alla sua variabile il valore "Null":''</font>
  pc = <FONT color=#B22222>Null</font>
+
  pc = <FONT color=#B22222>Null</font>
 
   
 
   
 
  <FONT color=gray>' ''Verifichiamo l'effetto dell'assegnazione di "Null" all'Oggetto "Picture":''</font>
 
  <FONT color=gray>' ''Verifichiamo l'effetto dell'assegnazione di "Null" all'Oggetto "Picture":''</font>
  PictureBox1.Picture = pc
+
  PictureBox1.Picture = pc
 
   
 
   
  '''End'''
+
  End
 +
 
 +
====Differenza fra ".Picture.Clear" e l'assegnazione del valore "Null"====
 +
Il Metodo ".Picture.Clear" cancella solo il contenuto dell'immagine
 +
restituita dalla Proprietà, che è in qualche modo una copia dell'immagine interna di immagine interna della ''PictureBox'', che rimane invariata.
  
  
Riga 47: Riga 51:
 
La seconda modalità prevede di accedere all'area di memoria della Struttura "''GB_IMG'' ", dichiarata nei [[Configurazione,_organizzazione_ed_impostazione_dell'oggetto_Image_secondo_i_sorgenti_di_Gambas|sorgenti di Gambas per la gestione dell'Oggetto ''Image'']].
 
La seconda modalità prevede di accedere all'area di memoria della Struttura "''GB_IMG'' ", dichiarata nei [[Configurazione,_organizzazione_ed_impostazione_dell'oggetto_Image_secondo_i_sorgenti_di_Gambas|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''.
+
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''.
 
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''.
Riga 55: Riga 59:
 
   
 
   
 
   
 
   
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
+
   im = Image.Load("<FONT color=gray>''/percorso/del/file/immagine''</font>")
+
   im = Image.Load("<FONT color=darkgreen>''/percorso/del/file/immagine''</font>")
 
    
 
    
 
   With PictureBox1
 
   With PictureBox1
Riga 67: Riga 71:
 
   End With
 
   End With
 
    
 
    
  '''End'''
+
  End
 +
 +
 +
Public Sub Button1_Click()
 
   
 
   
'''Public''' Sub Button1_Click()
 
 
 
 
   Dim p1, p2 As Pointer
 
   Dim p1, p2 As Pointer
 
   Dim i As Integer
 
   Dim i As Integer
Riga 91: Riga 96:
 
   PictureBox1.Image = im
 
   PictureBox1.Image = im
 
    
 
    
  '''End'''
+
  End
 +
Oppure evitando l'uso di una variabile di tipo ''Image'' e usando invece direttamente la Proprietà ".Image" della ''PictureBox'':
 +
Public Sub Form_Open()
 +
 +
  With PictureBox1
 +
    .X = 10
 +
    .Y = 10
 +
    .Image = Image.Load("<FONT color=darkgreen>''/percorso/del/file/immagine''</font>")
 +
    .W = .Image.W
 +
    .H = .Image.H
 +
  End With
 +
 +
End
 +
 +
 +
Public Sub Button1_Click()
 +
 +
  Dim p1, p2 As Pointer
 +
  Dim i As Integer
 +
  Dim st As Stream
 +
 
 +
  p1 = Object.Address(PictureBox1.Image)
 +
 
 +
  p2 = Pointer@(p1 + (SizeOf(gb.Pointer) * 2))
 +
 
 +
  st = Memory p2 For Write
 +
  For i = 0 To PictureBox1.Image.W * PictureBox1.Image.H * (PictureBox1.Image.Depth / 8)
 +
    Write #st, 0 As Byte
 +
  Next
 +
  st.Close
 +
 +
<FONT color=gray>' ''Rinnoviamo l'esposizione dell'immagine ormai con i valori dei suoi pixel tutti azzerati:''</font>
 +
  PictureBox1.Refresh
 +
 
 +
End

Versione attuale delle 02:29, 18 gen 2024

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, che in sostanza è il valore per annullare o distruggere ogni tipo di "Oggetto".

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

Differenza fra ".Picture.Clear" e l'assegnazione del valore "Null"

Il Metodo ".Picture.Clear" cancella solo il contenuto dell'immagine restituita dalla Proprietà, che è in qualche modo una copia dell'immagine interna di immagine interna della PictureBox, che rimane invariata.


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

Oppure evitando l'uso di una variabile di tipo Image e usando invece direttamente la Proprietà ".Image" della PictureBox:

Public Sub Form_Open()

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

End


Public Sub Button1_Click()

 Dim p1, p2 As Pointer
 Dim i As Integer
 Dim st As Stream
 
 p1 = Object.Address(PictureBox1.Image)
 
 p2 = Pointer@(p1 + (SizeOf(gb.Pointer) * 2))
 
 st = Memory p2 For Write
 For i = 0 To PictureBox1.Image.W * PictureBox1.Image.H * (PictureBox1.Image.Depth / 8)
   Write #st, 0 As Byte
 Next
 st.Close

' Rinnoviamo l'esposizione dell'immagine ormai con i valori dei suoi pixel tutti azzerati:
 PictureBox1.Refresh
 
End