Freigeben über


Vorgehensweise: Verbessern der Leistung durch Vermeiden der automatischen Skalierung

GDI+ kann ein Bild automatisch skalieren, während Sie es zeichnen, was die Leistung verringern würde. Alternativ können Sie die Skalierung des Bilds steuern, indem Sie die Abmessungen des Zielrechtecks an die DrawImage Methode übergeben.

Der folgende Aufruf der DrawImage Methode gibt beispielsweise eine obere linke Ecke von (50, 30) an, gibt jedoch kein Zielrechteck an.

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

Obwohl dies die einfachste Version der DrawImage Methode in Bezug auf die Anzahl der erforderlichen Argumente ist, ist sie nicht unbedingt die effizienteste. Wenn sich die von GDI+ verwendete Auflösung (in der Regel 96 Punkte pro Zoll) von der Auflösung unterscheidet, die im Image-Objekt gespeichert ist, wird das Bild durch die DrawImage-Methode skaliert. Angenommen, ein Image Objekt hat eine Breite von 216 Pixeln und einen gespeicherten horizontalen Auflösungswert von 72 Punkten pro Zoll. Da 216/72 3 ist, wird das Bild so skaliert, DrawImage dass es eine Breite von 3 Zoll bei einer Auflösung von 96 Punkten pro Zoll hat. Dies bedeutet, DrawImage dass ein Bild mit einer Breite von 96x3 = 288 Pixel angezeigt wird.

Selbst wenn sich die Bildschirmauflösung von 96 Punkten pro Zoll unterscheidet, skaliert GDI+ wahrscheinlich das Bild so, als wäre die Bildschirmauflösung 96 Punkte pro Zoll. Das liegt daran, dass ein GDI+ Graphics -Objekt einem Gerätekontext zugeordnet ist und wenn GDI+ den Gerätekontext für die Bildschirmauflösung abfragt, ist das Ergebnis in der Regel 96, unabhängig von der tatsächlichen Bildschirmauflösung. Sie können die automatische Skalierung vermeiden, indem Sie das Zielrechteck in der DrawImage Methode angeben.

Beispiel

Das folgende Beispiel zeichnet dasselbe Bild zweimal. Im ersten Fall werden die Breite und Höhe des Zielrechtecks nicht angegeben, und das Bild wird automatisch skaliert. Im zweiten Fall werden die Breite und Höhe (in Pixel gemessen) des Zielrechtecks so angegeben, dass sie mit der Breite und Höhe des ursprünglichen Bilds identisch sind. Die folgende Abbildung zeigt das zweimal gerenderte Bild:

Screenshot, der Bilder mit skalierter Textur zeigt.

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)

Code kompilieren

Das vorangehende Beispiel wurde für die Verwendung mit Windows Forms entwickelt und erfordert PaintEventArgse, bei dem es sich um einen Parameter des Paint-Ereignishandlers handelt. Ersetzen Sie Texture.jpg durch einen Bildnamen und Pfad, der auf Ihrem System gültig ist.

Siehe auch