Differenze tra le versioni di "Individuare i colori dei pixel di una immagine"

Da Gambas-it.org - Wikipedia.
(Creata pagina con 'Per individuare i colori dei pixel di una immagine, sono possibili almeno tre modalità. Si raccomanda la lettura - per le informazioni generali sulla gestione dei pixel in G...')
 
Riga 96: Riga 96:
 
La terza modalità prevede l'individuazione del colore di ciascun pixel dell'immagine identificandolo attraverso le sue coordinate x ed y con la sintassi:
 
La terza modalità prevede l'individuazione del colore di ciascun pixel dell'immagine identificandolo attraverso le sue coordinate x ed y con la sintassi:
 
  Image[x, y]
 
  Image[x, y]
Per analogia con questa modalità rinviamo alla [[Individuare_il_colore_di_un_determinato_pixel|seguente pagina della WIKI]].
+
 
 +
 
 +
Esempio:
 +
'''Public''' Sub Form_Open()
 +
 +
  Dim x, y As Byte
 +
  Dim im As Image
 +
 
 +
  im = Image.Load("''/percorso/del/file/immagine''")
 +
 
 +
  For x = 0 To im.W - 1
 +
    For y = 0 To im.h - 1
 +
      Print Hex$(im[x, y], 6)
 +
    Next
 +
  Next
 +
 +
'''End'''
 +
Per analogia con questa modalità segnaliamo anche la [[Individuare_il_colore_di_un_determinato_pixel|seguente pagina della WIKI]].

Versione delle 11:04, 11 ott 2014

Per individuare i colori dei pixel di una immagine, sono possibili almeno tre modalità.

Si raccomanda la lettura - per le informazioni generali sulla gestione dei pixel in Gambas - della seguente pagina della documentazione ufficiale: Image Management In Gambas.


con la proprietà .Pixels della Classe Image

La proprietà .Pixels della Classe Image ritorna un vettore di tipo Integer[] contenente in ciascun elemento il valore del colore di un pixel dell'immagine.

Esempio:

Public Sub Form_Open()

 Dim im As Image
 Dim ii As Integer[]
 Dim j As Short
 
  im = Image.Load("/percorso/del/file/immagine")

  ii = im.Pixels

  For j = 0 To ii.Max
' Mostra il valore del colore in rappresentazione esadecimale:
    Print Hex(ii[j], 8)
  Next

End


con 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 prcederà a vedere i valori di quei quattro pixel, ed infine a cambiare il colore del pixel rosso nel colore blu:

Public Sub Form_Open()
 
 With PictureBox1
   .X = 50
   .Y = 50
   .W = 40
   .H = 40
   .Stretch = True
 End With
 
End


Public Sub Button1_Click()

 Dim im As Image
 Dim st As Stream
 Dim fo, b As Byte
 Dim j As Short
 Dim s As String
 
  im = Image.Load("/percorso/del/file/immagine")

  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
    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

' Salva l'immagine come modificata:
  im.Save("/percorso/ove/salvare/il/nuovo/file/immagine")

' Mostra l'immagine come modificata:
  PictureBox1.Picture = Picture["/percorso/del/nuovo/file/immagine"]

End


individuando il colore di ciascun pixel mediante le sue coordinate x ed y

La terza modalità prevede l'individuazione del colore di ciascun pixel dell'immagine identificandolo attraverso le sue coordinate x ed y con la sintassi:

Image[x, y]


Esempio:

Public Sub Form_Open()

 Dim x, y As Byte
 Dim im As Image
 
  im = Image.Load("/percorso/del/file/immagine")
  
  For x = 0 To im.W - 1
    For y = 0 To im.h - 1
      Print Hex$(im[x, y], 6)
    Next
  Next

End

Per analogia con questa modalità segnaliamo anche la seguente pagina della WIKI.