Condividi tramite


Procedura: migliorare le prestazioni evitando l'adattamento automatico

In GDI+ è possibile che un'immagine venga automaticamente adattata mentre viene disegnata, con un conseguente calo delle prestazioni. In alternativa, è possibile controllare l'adattamento dell'immagine passando le dimensioni del rettangolo di destinazione al metodo DrawImage.

Nella chiamata al metodo DrawImage riportata di seguito viene ad esempio specificato che l'angolo superiore sinistro deve trovarsi nel punto (50, 30), ma non viene specificato un rettangolo di destinazione.

e.Graphics.DrawImage(image, 50, 30) ' upper-left corner at (50, 30)
e.Graphics.DrawImage(image, 50, 30);  // upper-left corner at (50, 30)

Sebbene si tratti della versione più semplice del metodo DrawImage, in termini di numero di argomenti obbligatori, non è necessariamente la più efficiente. Se la risoluzione utilizzata in GDI+ (in genere 96 punti per pollice) è diversa da quella memorizzata nell'oggetto Image, l'immagine verrà automaticamente adattata dal metodo DrawImage. Si supponga, ad esempio, che un oggetto Image abbia una larghezza di 216 pixel e un valore di risoluzione orizzontale memorizzato di 72 punti per pollice. Poiché 216/72 è uguale a 3, l'immagine verrà automaticamente adattata da DrawImage, in modo da ottenere una larghezza di 3 pollici con una risoluzione di 96 punti per pollice, ovvero l'immagine visualizzata da DrawImage avrà una larghezza di 96x3 = 288 pixel.

Anche se la risoluzione dello schermo è diversa da 96 punti per pollice, in GDI+ l'immagine verrà probabilmente adattata come se la risoluzione dello schermo fosse di 96 punti per pollice. In GDI+ Graphics è infatti associato a un contesto di dispositivo e, quando in GDI+ viene eseguita una query nel contesto di dispositivo per determinare la risoluzione dello schermo, il risultato è in genere 96, indipendentemente dalla risoluzione effettiva dello schermo. L'adattamento automatico può essere evitato specificando il rettangolo di destinazione nel metodo DrawImage.

Esempio

Nell'esempio che segue viene disegnata due volte la stessa immagine. Nel primo caso la larghezza e l'altezza del rettangolo di destinazione non sono specificate e l'immagine viene adattata automaticamente. Nel secondo caso la larghezza e l'altezza, misurate in pixel, del rettangolo di destinazione sono specificate in modo da essere uguali a quelle dell'immagine originale. Nell'illustrazione che segue si mostra l'immagine visualizzata due volte.

Trama ridimensionata

Dim image As New Bitmap("Texture.jpg")

e.Graphics.DrawImage(image, 10, 10)
e.Graphics.DrawImage(image, 120, 10, image.Width, image.Height)
Image image = new Bitmap("Texture.jpg");

e.Graphics.DrawImage(image, 10, 10);
e.Graphics.DrawImage(image, 120, 10, image.Width, image.Height);

Compilazione del codice

L'esempio riportato in precedenza è stato creato per essere utilizzato con Windows Form e richiede PaintEventArgs e, un parametro del gestore eventi Paint. Sostituire Texture.jpg con il percorso e il nome di un file di immagine validi per il sistema.

Vedere anche

Altre risorse

Immagini, bitmap e metafile

Utilizzo di immagini, bitmap, icone e metafile