Connessione al database con Visual Basic NET? Lo trovi su Opentraining.it Visual Basic Italia
Guide e Tutorials:indexed
La funzione SetPixel (Tutorial completo)

La funzione SetPixel viene utilizzata per impostare il colore di ogni singolo pixel sullo schermo, all'interno della finestra che si sta progettando. A causa però del possibile differente grado di compatibilità dei colori della periferica sulla quale si sta lavorando (ricordiamo che anche una finestra è considerata una PERIFERICA), il colore che viene impostato con la suddetta funzione, può differire leggermente dal colore effettivamente visualizzato sullo schermo. Inoltre un fallimento nel lavoro dell'API può essere causato dal fatto che il pixel non sia visibile o sia fuori dai limiti previsti dallo schermo. In questi casi la funzione ritornerà il valore -1. Per visualizzare una finestra di messaggio indicante l'intero restituito dall'API basterà la seguente linea di codice (dopo aver chiaramente dichiarato la funzione):

MsgBox NomeFunzione (parametro1, parametro2, ... ,parametron)

In caso di successo la funzione restituirà il codice RGB (Red, Green, Blue) utilizzato per impostare il colore del singolo pixel in esame. Sottolineamo prima di analizzare la funzione che la SetPixel è molto più laboriosa della BitBlt e della StretchBlt per cui, pur rimanendo la soluzione migliore per piccole/piccolissime porzioni dello schermo, può causare gravi problemi (leggi: applicazione bloccata irreversibilmente) nel caso si voglia estendere l'area di operatività di qest'API. Ad esempio se avessimo sul piano un quadrato delle dimensioni di 10x10 pixels, e lo si volesse copiare all'interno di un controllo PictureBox, la funzione SetPixel forse sarebbe più precisa e permetterebbe di gestire meglio anche eventuali modifiche al colore di quest'area. Ma se le dimensioni aumentano notevolmente, la SetPixel diventa realmente inutilizzabile.

Ecco la dichiarazione della funzione:

Declare Function SetPixel Lib "gdi32.dll" (ByVal hdc As Long, ByVal X As _
Long, ByVal Y As Long, ByVal crColor As Long) As Long

Prima di vedere i parametri della funzione appena dichiarata, come è nostro uso, analizziamo nel dettaglio le singole componenti della dichiarazione. Da quanto scritto qui sopra si deduce che la funzione SetPixel è contenuta nel file gdi32.dll (posto nella directory "C:\Windows\System" del proprio computer. Necessita inoltre di quattro parametri, che vedremo meglio in seguito. Tutti e quattro gli interi (As Long) da passare alla funzione, sono assegnati ad essa col metodo ByVal. La funzione inoltre ritorna a sua volta un intero che come già visto può essere -1 in caso di fallimento o il codice RGB del pixel.

Come promesso vediamo anche i parametri associati alla funzione:

hDc E' l'indicatore della finestra contenente il pixel sul quale si intende operare un cambio di colore.
x la coordinata orizzontale del pixel in questione
y la coordinata verticale del pixel in questione
crColor il codice RGB che indica il colore da utilizzare sul pixel.


Adesso è giunto il momento del consueto esempio. Un esempio che permette di riempire tutto il piano con puntini colorati, alla sola pressione di un tasto del mouse sulla form stessa. Vediamolo più da vicino.

'dichiarazione della funzione. Si può inserire nel codice di Form1 invece 'che nel modulo aggiungendo la parola Private che delimita l'area di 'visibilità della funzione:
Private Declare Function SetPixel Lib "gdi32.dll" (ByVal hdc As Long, ByVal X As _
Long, ByVal Y As Long, ByVal crColor As Long) As Long
'adesso impostiamo le dimensioni della form in modo che non sia troppo 'grande, per evitare un lavoro eccessivo da parte della funzione:
Private Sub Form_Load()
Me.Height = 2880
Me.Width = 3840
End Sub
Private Sub Form_Click()
evento secondo cui l'utente preme un pulsante del mouse sul piano
For ii = 1 To 350
For i = 1 To 240
generiamo un codice RGB casuale:
RGBCasuale = RGB(Int(256 * Rnd), Int(256 * Rnd), Int(256 * Rnd))
applichiamo il colore ad ogni singolo pixel del piano:
SetPixel Form1.hdc, ii, i, RGBCasuale
Next i
Next ii
End Sub

ecco in conclusione il risultato di questo progetto:



Archivio:ndexed
Lezioni Commenta questa lezione Invia la tua guida Avviso per le nuove lezioni
Proponi un argomento

Visual Basic Italia© copyright 2000 - tutti i diritti riservati
E-mail:
vbitalia@libero.it