Differenze tra le versioni di "Rendere trasparente una immagine in base ad un colore specifico"

Da Gambas-it.org - Wikipedia.
 
(2 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
E' possibile rendere trasparente un'immagine sulla base di un colore specifico. In tal modo verrà resa trasparente quella parte dell'immagine ove è presente quel colore specificato.
+
E' possibile rendere trasparente un'immagine sulla base di un colore specifico.
 +
<BR>In tal modo verrà resa trasparente quella parte dell'immagine ove è presente quel colore specificato.
  
Per ottenere questo effetto, si utilizzerà la funzione ''.Transparent'' della Classe ''Image''.
+
Per ottenere questo effetto, si utilizzerà il Metodo ".Transparent()" della Classe "Image".
  
La sintassi è:
 
Transparent([Color As Integer]) As Image
 
 
Esempio:
 
Esempio:
 
  '''Public''' Sub Button1_Click()
 
  '''Public''' Sub Button1_Click()
 
   
 
   
   Dim i as New Image
+
   Dim im as New Image
+
 
  With i = i.Load("''mia_immagine.xxx''")
+
  im = im.Load("<FONT color=gray>''/percorso/del/file/immagine''</font>")
    i = <FONT color=#B22222>.Transparent</font>(Color.Red)
+
 
  End With
+
  im = im<FONT color=#B22222>.Transparent</font>(Color.Red)
+
 
 
  '''End'''
 
  '''End'''
 
Più il pixel è un colore vicino al colore specificato, più diventa trasparente.
 
Più il pixel è un colore vicino al colore specificato, più diventa trasparente.
  
 
Se non viene specificato il colore, allora si presume sia il colore bianco.
 
Se non viene specificato il colore, allora si presume sia il colore bianco.
 +
 +
 +
====Uso dei ''Memory Stream''====
 +
E' possibile, usando la risorsa "''Memory Stream'' ", con un ciclo modificare il byte del canale ''Alfa'' di un pixel dell'immagine, assegnandogli il valore zero.
 +
 +
Mostriamo un esempio, nel quale verranno resi trasparenti i pixel di colore bianco (&FFFFFFFF&). In pratica verrà azzerato il canale ''Alfa'', ossia il 4° byte, del pixel: &FFFFFF<B>00</b>.
 +
'''Public''' Sub Button1_Click()
 +
 +
  Dim im As Image
 +
  Dim i As Integer
 +
  Dim st As Stream
 +
 
 +
  im = Image.FromString("<FONT color=gray>''/percorso/del/file/immagine''</font>")
 +
 
 +
  st = Memory im.Data For Write
 +
 
 +
  For i = 0 To im.Pixels.Max
 +
<FONT color=gray>''Se il pixel è bianco, allora azzera il suo canale "Alfa":''</font>
 +
    If im.Pixels[i] == CLong(&FFFFFFFF) Then
 +
<FONT color=gray>''Con "(i * 4)" individua il primo byte del pixel corrente da rendere trasparente; mentre con la somma "+ 3" individua il 4° byte (canale "Alfa") del pixel corrente:''</font>
 +
      Seek #st, (i * 4) + 3 
 +
      Write #st, 0 As Byte
 +
    Endif
 +
  Next
 +
  st.Close
 +
 
 +
  PictureBox1.Image = im
 +
 
 +
'''End'''

Versione attuale delle 00:59, 31 ott 2020

E' possibile rendere trasparente un'immagine sulla base di un colore specifico.
In tal modo verrà resa trasparente quella parte dell'immagine ove è presente quel colore specificato.

Per ottenere questo effetto, si utilizzerà il Metodo ".Transparent()" della Classe "Image".

Esempio:

Public Sub Button1_Click()

 Dim im as New Image
 
 im = im.Load("/percorso/del/file/immagine")
 
 im = im.Transparent(Color.Red)
 
End

Più il pixel è un colore vicino al colore specificato, più diventa trasparente.

Se non viene specificato il colore, allora si presume sia il colore bianco.


Uso dei Memory Stream

E' possibile, usando la risorsa "Memory Stream ", con un ciclo modificare il byte del canale Alfa di un pixel dell'immagine, assegnandogli il valore zero.

Mostriamo un esempio, nel quale verranno resi trasparenti i pixel di colore bianco (&FFFFFFFF&). In pratica verrà azzerato il canale Alfa, ossia il 4° byte, del pixel: &FFFFFF00.

Public Sub Button1_Click()

 Dim im As Image
 Dim i As Integer
 Dim st As Stream
 
 im = Image.FromString("/percorso/del/file/immagine")
 
 st = Memory im.Data For Write
 
 For i = 0 To im.Pixels.Max
Se il pixel è bianco, allora azzera il suo canale "Alfa":
   If im.Pixels[i] == CLong(&FFFFFFFF) Then
Con "(i * 4)" individua il primo byte del pixel corrente da rendere trasparente; mentre con la somma "+ 3" individua il 4° byte (canale "Alfa") del pixel corrente:
     Seek #st, (i * 4) + 3   
     Write #st, 0 As Byte
   Endif
 Next
 st.Close
 
 PictureBox1.Image = im
  
End