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.
Riga 4: | Riga 4: | ||
<BR>Sarà possibile altresì scrivervi modificando quindi il colore di uno o di più pixel dell'immagine. | <BR>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: | + | Nell'esempio che segue abbiamo una semplice immagine formata da 2 x 2 pixel dei seguenti colori: rosso, verde, blu e giallo. Si procederà con il vedere quei quattro pixel ed a cambiare - subito dopo - il colore del pixel blu nel colore rosso: |
Private im As Image | Private im As Image | ||
Riga 29: | Riga 29: | ||
Dim fo, b As Byte | Dim fo, b As Byte | ||
Dim j As Integer | Dim j As Integer | ||
− | |||
fo = Len(im.Format) | fo = Len(im.Format) | ||
Riga 47: | Riga 46: | ||
<FONT Color=gray>' ''Viene modificato il colore del pixel che occupa 4 byte a partire dal 9° byte:''</font> | <FONT Color=gray>' ''Viene modificato il colore del pixel che occupa 4 byte a partire dal 9° byte:''</font> | ||
Seek #st, 8 | Seek #st, 8 | ||
− | <FONT Color=gray>' ''Viene | + | <FONT Color=gray>' ''Viene cambiato il colore blu nel colore rosso (se il formato è "diverso" dal "BGR", allora il primo byte a sinistra è relativo al valore "alfa" !):''</font> |
− | + | Write #st, &FFFF0000 As Integer | |
− | Write #st, | + | |
− | |||
<FONT Color=gray>' ''Vengono nuovamente letti i valori dei colori dopo la modifica del terzo pixel:''</font> | <FONT Color=gray>' ''Vengono nuovamente letti i valori dei colori dopo la modifica del terzo pixel:''</font> | ||
Seek #st, 0 | Seek #st, 0 |
Versione delle 09:52, 14 ott 2016
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: rosso, verde, blu e giallo. Si procederà con il vedere quei quattro pixel ed a cambiare - subito dopo - il colore del pixel blu nel colore rosso:
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 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 cambiato il colore blu nel colore rosso (se il formato è "diverso" dal "BGR", allora il primo byte a sinistra è relativo al valore "alfa" !): Write #st, &FFFF0000 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