Sincronizza Indice |
Scarica il progetto |
Testo dell'articolo |
Stampa l'articolo |
Gli schermi dei nostri computer si fanno sempre più colorati. Come fare per determinare il colore di un punto sullo schermo? In questo How-To estrarremo il colore del pixel indicato dal cursore del mouse.
Il
progetto si compone di un solo form e poche righe di codice. Il funzionamento è molto semplice: mediante una funzione API otteniamo
le coordinate del punto in cui è posizionato il mouse e mediante
un'altra funzione leggiamo il colore del pixel in quel punto. Fatto questo
scomponiamo il numero ottenuto nella tripletta RGB
ed estraiamo i valori dei singoli colori.
Alle righe 3-6 definiamo un nuovo tipo di dati di nome POINTAPI. È un tipo di dati API e viene richiesto da svariate funzioni grafiche. Alla riga 8 abbiamo la dichiarazione della funzione API GetCursorPos che restituisce le coordinate del cursore del mouse. Richiede appunto il tipo di dati POINTAPI.
Le righe 9 e 10 contengono le dichiarazioni delle funzioni GetDC e ReleaseDC. La prima serve per ottenere il DC (Device Context) di una finestra, mentre la seconda serve per rilasciare (deallocare) un DC. La riga 11 include la dichiarazione della funzione API GetPixel che restituisce in uscita il colore del pixel indicato alle coordinate specificate. La funzione richiede anche il DC cui si fa riferimento. Alle righe 13 e 14 definiamo due variabili che utilizzeremo più
volte all'interno del nostro progetto. La prima è ScreenDC,
ovvero l'handle del DC dello schermo; ciò significa che il punto
di origine sarà l'angolo in alto a sinistra dello schermo; se avessimo
scelto un altro DC l'origine sarebbe stato l'angolo in alto a sinistra
della finestra cui appartiene il DC. Il Device Context dello schermo contiene
tutto ciò che è visibile all'utente, ma non contiene la
grafica che al momento è nascosta.
All'avvio del programma estrarremo il DC dello schermo tramite la funzione GetDC. La finestra 0 denota lo schermo. Memorizzeremo tale DC nella variabile ScreenDC (riga 17). Altresì alla chiusura del programma rilasceremo tale handle DC, tramite la funzione ReleaseDC (riga 21). Il mancato rilascio di un DC comporta il blocco di un handle e alla lunga anche il blocco del sistema.
Tutto il codice principale è contenuto nella funzione legata all'evento Timer di Tempo. Alla riga 25 dichiariamo la variabile ColoreEstratto che utilizzeremo per memorizzare il valore del colore ottenuto. Alla riga 26 reperiamo le coordinate del cursore tramite la funzione
GetCursorPos.
Ottenuto il colore possiamo procedere alla sua scissione. Alla riga 28 mostriamo dentro la PictureBox ColorePixel il colore del pixel estratto, impostando per essa la proprietà BackColor. Alla riga 29 convertiamo il colore estratto in esadecimale tramite funzione Hex. L'operazione di concatenazione usata assieme alla funzione Right è una soluzione molto comune per assicurarsi che il risultato della conversione in esadecimale sia esattamente 6 caratteri. Il risultato sarà mostrato nella Label Colore. La scomposizione del colore in tripletta RGB sarà effettuato mediante
estrazione di coppie di caratteri dalla Label Colore. La prima
coppia indicherà il blu, la seconda il verde e la terza il rosso
(righe 30-32). La
prova del programma è semplicissima, infatti il programma farà
tutto da solo tramite il Timer. Lanciamo il programma, muoviamo
il mouse sullo schermo e vedremo nella PictureBox il colore del
punto che stiamo indicando. |
Il progetto è molto semplice e non pone alcun rischio particolare. Fibia
FBI
|
Torna all'indice degli HowTo |