Connessione al database con Visual Basic NET? Lo trovi su Opentraining.it Visual Basic Italia
Guide e Tutorials:indexed
La funzione StretchBlt (Tutorial completo)
Innanzitutto definiamo velocemente il tipo di funzione. StretchBlt copia un'immagine da una sezione rettangolare di partenza e la trasferisce in un'ulteriore sezione rettangolare di destinazione, allungandola o comprimendola in modo da adattarla alle dimensioni più o meno rilevanti del rettangolo di destinazione. Niente di meglio quindi per agire su un'immagine con risultati professionali. Prima di continuare vediamo la sintassi della funzione. Ricordiamo che la dichiarazione seguente deve essere inserita, come già abbiamo spiegato nella guida completa sulla funzione BitBlt, nelle dichiarazioni generali di un modulo che vi sarete preoccupati di aprire prima di cominciare a scrivere il codice. Ecco dunque la dichiarazione di StretchBlt:

Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, _
ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, _
ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, _
ByVal ySrc As Long, ByVal nSrcWidth As Long, _
ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long

Adesso specifichiamo una cosa che vale sia per la funzione StretchBlt che per qualsiasi altra funzione API e cioè che inserire la dichiarazione nell'area di validità globale del singolo Form (ossia nella prima parte del codice, proprio in alto), non è una procedura valida in Visual Basic ed infatti generera un errore del tipo:
Errore di compilazione
Costanti, stringhe di lunghezza fissa, matrici, tipi definiti dall'utente e
istruzioni Declare non ammessi come membri Public di moduli di
oggetto.

Ed il caso sottolineato è per l'appunto il nostro caso.
Passiamo avanti. Quello che ci interessa considerare adesso sono i parametri della funzione. Come per qualsiasi altra funzione vista in precedenza, passiamoli in rassegna uno per uno:

hdc rappresenta il contesto univoco dell'immagine di destinazione
x è la coordinata X del punto più in alto a sinistra del rettangolo di destinazione
y è la coordinata Y del punto più in alto a sinistra del rettangolo di destinazione
nWidth specifica la lunghezza del rettangolo di destinazione
nHeight specifica l'altezza del rettangolo di destinazione
hSrcDC rappresenta il contesto univoco dell'immagine sorgente
XSrc è la coordinata X del punto più in alto a sinistra del rettangolo di partenza
YSrc è la coordinata Y del punto più in alto a sinistra del rettangolo di partenza
nSrcWidth imposta la lunghezza del rettangolo di partenza
nSrcHeight imposta l'altezza del rettangolo di partenza
dwRop specifica l'operazione che dev'essere perfezionata sull'immagine di partenza e su quella di destinazione

Come per BitBlt la tabella delle operazioni che possono essere compiute sulle immagini è la seguente:

SRCCOPY permette di copiare pari-pari l'intera immagine oppure una selezione della stessa
SRCAND combina i pixel dell'immagine di destinazione con quelli dell'immagine di partenza usando l'operatore Booleano AND
SRCINVERT combina i pixel dell'immagine di destinazione con quelli dell'immagine di partenza usando l'operatore Booleano XOR
SRCPAINT combina i pixel dell'immagine di destinazione con quelli dell'immagine di partenza usando l'operatore Booleano OR
SRCERASE inverte l'immagine di destinazione e la combina con l'immagine di partenza usando l'operatore Booleano AND
WHITENESS colora di bianco l'immagine di destinazione
BLACKNESS colora di nero l'immagine di destinazione

Per poter utilizzare questi parametri bisogna dichiararli e specificarne le costanti sempre all'interno (o meglio all'inizio) del modulo generale, proprio in questo modo:

Public Enum RasterOps
SRCCOPY = &HCC0020
SRCAND = &H8800C6
SRCINVERT = &H660046
SRCPAINT = &HEE0086
SRCERASE = &H4400328
WHITENESS = &HFF0062
BLACKNESS = &H42
End Enum

Ed ecco allora come si presenterà il nostro modulo finale:

Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, _
ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, _
ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, _
ByVal ySrc As Long, ByVal nSrcWidth As Long, _
ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
'elenco costanti dei parametri
Public Enum RasterOps
SRCCOPY = &HCC0020
SRCAND = &H8800C6
SRCINVERT = &H660046
SRCPAINT = &HEE0086
SRCERASE = &H4400328
WHITENESS = &HFF0062
BLACKNESS = &H42
End Enum

Come al solito presentiamo alla fine del corso un esempio. Questa volta l'esempio potrà sembrare per quanto riguarda il codice simile a quello che avete già usato per la funzione BitBlt ma in realtà non è così. Per comprendere meglio le funzionalità di StretchBlt abbiamo creato uno zoom di immagine veramente semplice ed immediato (ma utilissimo) che utilizza proprio questa funzione.
Ve ne diamo un'anticipazione in questa foto:

L'appuntamento rimane per la prossima lezione.
Grazie a tutti.

Scarica qui l'esempio

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
E-mail:
vbitalia@libero.it <% =Now %>