Sincronizza Indice |
Scarica il progetto |
Testo dell'articolo |
Stampa l'articolo |
Prendendo spunto dall'How-To per determinare il colore di un pixel sullo schermo svilupperemo un semplice progettino che funga da lente d'ingrandimento dello schermo. Sarà inquadrata una porzione dello schermo indicata dal cursore del mouse e in base al fattore di riproduzione sarà mostrata la sezione grafica.
Il progetto consiste di un solo form contenente quattro controlli:
La PictureBox Immagine conterrà la sezione grafica estratta dallo
schermo; la ComboBox conterrà l'elenco dei fattori di riproduzione
della grandezza ed il Timer provvederà ad aggiornare regolarmente
l'immagine estratta.
Alle righe 3-6 definiamo un nuovo tipo di dati di nome POINTAPI che consiste di due dati semplici: x e y. Esso viene utilizzato da alcune funzioni API. Alla riga 8 è presente la dichiarazione della funzione API GetCursorPos vista nell'altro HowTo. Essa ritrova la posizione del cursore del mouse e richiede la struttura 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 contiene la dichiarazione di una nuova funzione API: StretchBlt, letteralmente Stretch Bit Block Transfer. Essa permetterà di allargare e stringere un'immagine in base ai dati passati. Richiede un handle DC, le coordinate di sorgente e destinazione ed il tipo di disegnamento da effettuare, valore preso dall'enumerazione RasterOpConstants. Prima di vedere il codice vero e proprio abbiamo dichiarato una variabile di nome ScreenDC che verrà utilizzata per contenere l'handle del Device Context dello schermo.
Al caricamento del form verrà innanzitutto ritrovato l'hande DC dello schermo tramite funzione GetDC e salvato nella variabile ScreenDC (riga 16). La finestra 0 indicata da GetDC è lo schermo grafico.
Alle righe 17-24 viene riempita la ComboBox Fattore con dei valori percentuali che saranno utilizzati per determinare il fattore di riproduzione. Riempita la ComboBox sarà selezionato automaticamente il terzo elemento (l'array List ha base 0) ovvero il 100%. Alla riga 26 viene invece impostato il fattore di conversione delle dimensioni in pixel poiché le nostre funzioni API utilizzeranno i pixel e non i twips.
Prima di chiudere il programma sarà necessario deallocare l'handle DC ScreenDC riservato precedentemente. Ciò viene fatto mediante utilizzo della funzione ReleaseDC passandole come numero di finestra lo schermo ovvero 0 e l'handle DC da rilasciare ovvero ScreenDC. La funzione di estrazione dell'immagine dallo schermo è nella routine richiamata all'evento Timer di Tempo. Ad intervalli regolari sarà richiamata la funzione di aggiornamento dell'immagine e sarà calcolata la grandezza dell'immagine in base al fattore di riproduzione selezionato nella ComboBox.
Alle righe 34 e 35 sono dichiarate due variabili di tipo POINTAPI e di nome COORD, DIMENSIONE; la prima servirà per ritrovare le coordinate del cursore del mouse (riga 36) mentre la seconda sarà utilizzata per calcolare la dimensione dell'area da inquadrare e mostrare nella PictureBox (righe 37 e 38). Per calcolare la grandezza dell'area da inquadrare utilizzeremo una semplice formula di conversione: grandezza originale (quindi quella della PictureBox) diviso il fattore di conversione in percentuale. L'istruzione Val ignorerà il segno di percentuale e pertanto sarà necessario effettuare la moltiplicazione manualmente. La formula pertanto è data da GrandezzaOriginale / Fattore * 100. Possiamo adesso richiamare la funzione API StretchBitBlt in base al valore della CheckBox Invertito. Se essa è selezionata l'immagine sarà in negativo altrimenti sarà normale. Diamo uno sguardo più approfondito alla chiamata alla funzione StretchBitBlt:
La funzione StretchBitBlt richiede due serie di parametri:
Definiti i parametri di destinazione dei dati immagine da trasferire sarà necessario specificare lo stesso genere di parametri per l'immagine sorgente:
L'ultimo parametro è il tipo di disegnamento da effettuare. Le due chiamate differiscono soltanto per l'ultimo parametro: vbNotSrcCopy per i colori in negativo e vbSrcCopy per i colori normali; i due valori sono prelevati entrambi dall'enumerazione RasterOpConstants in base al valore della CheckBox Invertito. La prova del programma è d'obbligo ma l'utilizzo semplicissimo. Basta scegliere il corretto fattore di riproduzione dalla ComboBox ed attivare o disattivare l'unica CheckBox.
|
Il codice è alquanto semplice; l'unica riga che può creare qualche perplessità è quella riguardante la funzione StretchBitBlt. Basta studiare il significato dei parametri richiesti ed il suo utilizzo sarà immediatamente chiaro. Fibia
FBI
|
Torna all'indice degli HowTo |