Procedura: migliorare le prestazioni evitando l'adattamento automatico

GDI+ può ridimensionare automaticamente un'immagine durante il disegno, riducendo così le prestazioni. In alternativa, è possibile controllare il ridimensionamento dell'immagine passando le dimensioni del rettangolo di destinazione al DrawImage metodo .

Ad esempio, la chiamata seguente al DrawImage metodo specifica un angolo superiore sinistro di (50, 30) ma non specifica 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)

Anche se si tratta della versione più semplice del DrawImage metodo in termini di numero di argomenti obbligatori, non è necessariamente la più efficiente. Se la risoluzione usata da GDI+ (in genere 96 punti per pollice) è diversa dalla risoluzione archiviata nell'oggetto Image , il DrawImage metodo ridimensiona l'immagine. Si supponga, ad esempio, che un Image oggetto abbia una larghezza di 216 pixel e un valore di risoluzione orizzontale archiviato di 72 punti per pollice. Poiché 216/72 è 3, DrawImage ridimensiona l'immagine in modo che abbia una larghezza di 3 pollici a una risoluzione di 96 punti per pollice. Ovvero, DrawImage visualizzerà un'immagine con una larghezza di 96x3 = 288 pixel.

Anche se la risoluzione dello schermo è diversa da 96 punti per pollice, GDI+ probabilmente ridimensiona l'immagine come se la risoluzione dello schermo fosse di 96 punti per pollice. Ciò è dovuto al fatto che un oggetto GDI+ Graphics è associato a un contesto di dispositivo e quando GDI+ esegue una query sul contesto del dispositivo per la risoluzione dello schermo, il risultato è in genere 96, indipendentemente dalla risoluzione effettiva dello schermo. È possibile evitare il ridimensionamento automatico specificando il rettangolo di destinazione nel DrawImage metodo .

Esempio

L'esempio seguente disegna due volte la stessa immagine. Nel primo caso, la larghezza e l'altezza del rettangolo di destinazione non vengono specificate e l'immagine viene ridimensionata automaticamente. Nel secondo caso, la larghezza e l'altezza (misurata in pixel) del rettangolo di destinazione vengono specificate come la larghezza e l'altezza dell'immagine originale. La figura seguente mostra l'immagine di cui è stato eseguito il rendering due volte:

Screenshot that shows images with scaled texture.

Image image = new Bitmap("Texture.jpg");

e.Graphics.DrawImage(image, 10, 10);
e.Graphics.DrawImage(image, 120, 10, image.Width, image.Height);
Dim image As 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 precedente è progettato per l'uso con Windows Form e richiede PaintEventArgse, un parametro del gestore eventi Paint. Sostituire Texture.jpg con un nome e un percorso di immagine validi nel sistema.

Vedi anche