Guide e Tutorials:indexed | ||||||||||||||
La funzione BitBlt: Tutorial completo BitBlt è l'acronimo di Bit Block Tansfer contenuta nella libreria GDI32.dll che permette il trasferimento di una sezione rettangolare di un'immagine, in un'altra area rettangolare di pari dimensioni. Questo permette di eseguire tutte le operazioni tipiche delle applicazioni grafiche come ad esempio Copia, Incolla, Taglia. La prima cosa importante da tenere a mente è che Visual Basic non riconosce quando state invocando la funzione: se infatti state tentando di compiere un'operazione utilizzando BitBlt su un'immagine (la cosiddetta bltting operation), la cui proprietà AutoRedraw è settata su True, dovrete necessariamente richiamare un Refresh dell'immagine in modo tale da permettere al programma di effettuare l'aggiornamento dell'immagine. Infatti quando la proprietà AutoRedraw è impostata su True, il sistema colloca l'immagine contenuta nella PictureBox (la cosiddetta persistant bitmap) in memoria e dunque tutte le modifiche potranno essere apportate solamente all'immagine esistente in memoria e non su quella che si vede sullo schermo. Per poter eseguire modifiche sull'immagine visibile bisogna, come già detto, dire al sistema operativo di aggiornare l'immagine visibile con quella presente in memoria. Per fare ciò basta un semplicissimo:
Dichiarazioni generali (Modulo): Il codice seguente mostra le dichiarazioni generali da inserire in un modulo (scopo globale), in modo che siano richiamate da ogni parte del codice.
Passiamo oltre le costanti elencate, quelle cioè comprese tra Public Enum ed End Enum e concentriamoci sulle vere dichiarazioni della funzione BitBlt. Prendiamo in considerazione i parametri della funzione ed in particolare:
Gli oggetti della tabella soprastante sono rispettivamente l'oggetto di destinazione (hDC) e l'oggetto sorgente o primitivo (hSrcDC). Ciò significa che la funzione BitBlt trasferirà un'immagine passandola da un'area di memoria ad un'altra. Il sistema operativo avrà però bisogno di essere informato sulla posizione nella quale troverà l'immagine di partenza e quella nella quale trasferirla. E sarà proprio allora che l'hDC entrerà in gioco. Che cosa vuol dire hDC? Il sistema operativo assegna un contesto univoco ad ogni controllo PictureBox dell'applicazione che si sta sviluppando. Si può quindi usare l'hDC per riferirsi al contesto univoco assegnato ad ogni PictureBox. Questo passerà un valore che sarà poi trasferito alla funzione API. Non è quindi sufficiente utilzzare un'istruzione del tipo:
Quello che invece potremo fare è una cosa del genere:
Tavola dei parametri della funzione BitBlt
Diamo ora un'occhiata ai parametri seguenti, cioè x e y:
I parametri x ed y permettono di specificare l'esatta posizione dell'oggetto di destinazione in cui trasferire l'immagine di partenza, proprio come qualsiasi altro oggetto all'interno di un secondo oggetto contenitore (ad esempio una label all'interno di una Form. Dunque x ed y hanno in pratica le stesse funzionalità dei parametri Left e Top. Tuttavia, se si vuole essere precisi, non sono la stessa cosa. Ecco perchè conviene fare riferimento al seguente specchietto riassuntivo: C'è una sola cosa da tenere bene in mente quando si impostano i valori di x ed y e cioè che la loro unità di misura è settata in pixels e non in pollici o in centimetri. Vediamo adesso i parametri:
xSrc e ySrc permettono di individuare la posizione dei pixels all'interno dell'immagine sorgente che devono essere trasferiti in memoria. Quindi rappresentano una specifica ancora maggiore e più profonda rispetto ai parametri x ed y. Inoltre si possono indicare nello stesso modo che abbiamo già visto per x ed y: Notare che anche i valori xSrc ed ySrc sono rappresentati in unità di misura pixels. I successivi parametri da vedere sono:
Come avrete già capito nWidth ed nHeight rappresentano le dimensioni del rettangolo di partenza che si "stacca" dall'oggetto sorgente che deve essere trasferito in memoria. Adesso che i parametri che definiscono sorgente e destinazione sono stati studiati, vediamo il modo in cui il sistema operativo compie le operazioni che ci interessano, ossia quelle di trasferimento di pixels tra un'immagine visibile ed una locata in memoria. La funzione BitBlt permette un passaggio di pixel in molti modi, che possono essere controllati e specificati specificando l'operazione da compiere sull'immagine. Prendiamo in considerazione il seguente parametro:
La prima cosa da sapere è che il colore del pixel è un valore puramente numerico. Ciò significa che ogni operazione sui pixel è soggetto all'applicazione dei principi dell'Algebra Booleana. Il parametro in questione permette di specificare quale tipo di operazione compiere sia sull'immagine di partenza che su quella di destinazione. Vediamo le operazioni più comuni:
Facciamo un breve esempio per capire meglio come si comporta BitBlt in presenza di questo o di quell'operatore algebrico. Se il pixel dell'immagine di partenza è bianco e lo si vuole sovrapporre ad un pixel nero dell'immagine di destinazione, i parametri appena sopra elencati daranno questi risultati: Un'ultima considerazione: non si possono utilizzare in modo troppo disinvolto le notazioni .Top, .Height ecc. in quanto come già visto le unità di misura devono necessariamente corrispondere, in quanto il valore ritornato sarà espresso in Twips. Dunque bisognerà convertire tutta la misurazione degli oggetti in pixels. L'oggetto Screen è dotato di proprietà che consentono proprio quest'operazione ossia:
Queste due proprietà ritornano il numero di Twips contenuti rispettivamente orizzontalmente e verticalmente in un Pixel, tenendo conto della risoluzione impostata dall'utente. Dunque per convertire un valore in Twips in Pixels basta dividere il valore in Twips per TwipsPerPixel_ . Ad esempio:
Per finire ecco un esempio che potrete scaricare e consultare. |
Archivio: | ||||
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 |