Differenze tra le versioni di "Modificare i colori dei pixel di un'immagine con la proprietà .Data della Classe Image ed i Memory Stream"

Da Gambas-it.org - Wikipedia.
(Creata pagina con 'E' possibile modificare i colori dei pixel di un'immagine utilizzando la proprietà ''.Data'' della Classe ''Image'' ed i ''Memory Stream''. La proprietà ''.Data'' della Cla...')
 
Riga 10: Riga 10:
 
  '''Public''' Sub Form_Open()
 
  '''Public''' Sub Form_Open()
 
    
 
    
  With PictureBox1
+
  im = Image.Load("<FONT Color=gray>''/percorso/del/file/immagine''</font>")
    .X = 50
+
 
    .Y = 50
+
  With PictureBox1
    .W = 40
+
    .X = 50
    .H = 40
+
    .Y = 50
    .Stretch = True
+
    .W = im.W
  End With
+
    .H = im.H
+
  End With
  im = Image.Load("<FONT Color=gray>''/percorso/del/file/immagine''</font>")
+
 
 
+
  PictureBox1.Picture = im.Picture
  PictureBox1.Picture = im.Picture
+
 
 
 
 
  '''End'''
 
  '''End'''
 
   
 
   

Versione delle 18:03, 14 nov 2015

E' possibile modificare i colori dei pixel di un'immagine utilizzando la proprietà .Data della Classe Image ed i Memory Stream.

La proprietà .Data della Classe Image ritorna un Puntatore ai dati della variabile di tipo Image. Si potrà, quindi, per mezzo dei Memory Stream leggere all'interno dell'area puntata dal predetto Puntatore.
Sarà possibile altresì scrivervi modificando quindi il colore di uno o di più pixel dell'immagine.

Nell'esempio che segue abbiamo una semplice immagine formata da 2 x 2 pixel dei seguenti colori: blu, giallo, rosso e verde. Si procederà con il vedere quei quattro pixel e cambiando, poi, il colore del pixel rosso nel colore blu:

Private im As Image


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


Public Sub Button1_Click()

 Dim st As Stream
 Dim fo, b As Byte
 Dim j As Integer
 Dim s As String
  
  fo = Len(im.Format)
 
' Viene dereferenziato il "Puntatore", mostrando così tutti i valori dei colori dei pixel della variabile immagine:
  st = Memory im.Data For Read Write
 
  For j = 0 To (im.H * im.W * fo) - 1   ' La dimensione in byte effettiva di un'immagine si ottiene moltiplicando i pixel per la quantità di byte che compongono un singolo pixel (formato dei pixel)
    Read #st, b
    If j Mod 4 = 0 Then Print "------------------"
    Print j;; b;; Hex(b, 2)
  Next


  Print "------------------"

' Viene modificato il colore del pixel che occupa 4 byte a partire dal 9° byte:
  Seek #st, 8
' Viene impostato il colore blu (se il formato è diverso dal "BGR", allora il primo byte è relativo al valore "alfa" !):
  s = Right("FF0000FF", fo * 2)
  Write #st, Val("&" & s) As Integer

' Vengono nuovamente letti i valori dei colori dopo la modifica del terzo pixel:
  Seek #st, 0
  For j = 0 To (im.H * im.W * fo) - 1
    Read #st, b
    If j Mod 4 = 0 Then Print "------------------"
    Print j;; b;; Hex(b, 2)
  Next

  st.Close
 
' Mostra l'immagine come modificata:
  PictureBox1.Picture = im.Picture

End