Freigeben über


Verbessern der Leistung durch das Vermeiden der automatischen Skalierung

Wenn Sie nur die obere linke Ecke eines Bildes an die DrawImage-Methode übergeben, wird das Bild von GDI+ u. U. skaliert, was die Leistung herabsetzen könnte.

Durch den folgenden Aufruf der DrawImage-Methode wird für die obere linke Ecke zwar die Position (50, 30), jedoch kein Zielrechteck festgelegt:

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

Obwohl dies im Hinblick auf die Anzahl der erforderlichen Argumente die einfachste Version der DrawImage-Methode ist, muss sie nicht gleichzeitig auch die effizienteste sein. Wenn die von GDI+ verwendete Auflösung (i. d. R. 96 DPI) sich von der im Image-Objekt gespeicherten unterscheiden, wird das Bild von DrawImage skaliert. Angenommen, ein Bild hat eine Breite von 216 Pixel und einen gespeicherte Wert für die horizontale Auflösung von 72 DPI. Da 216/72 gleich 3 ist, skaliert DrawImage das Bild, so dass es eine Breite von 3 Zoll bei einer Auflösung von 96 DPI besitzt. Das heißt, DrawImage zeigt ein Bild mit einer Breite von 96x3 = 288 Pixel an.

Auch wenn Sie eine andere Bildschirmauflösung als 96 DPI verwenden, skaliert GDI+ das Bild i. d. R., als ob die Bildschirmauflösung 96 DPI beträgt. Dies liegt daran, dass ein GDI+-Grafikobjekt einem Gerätekontext zugeordnet ist. Wenn GDI+ den Gerätekontext für die Bildschirmauflösung abfragt, ist das Ergebnis unanbhängig von der tatsächlichen Bildschirmauflösung i. d. R. 96.

Wenn Sie eine derartige Skalierung verhindern möchten, übergeben Sie Breite und Höhe eines Zielrechtecks an die DrawImage-Methode. Im folgenden Beispiel wird zweimal dasselbe Bild gezeichnet. Im ersten Fall wurden Breite und Höhe des Zielrechtecks nicht festgelegt, und das Bild wird automatisch skaliert. Im zweiten Fall wurden Breite und Höhe des Zielrechtecks (in Pixel) so festgelegt, dass sie der Breite und Höhe des Originalbilds entsprechen.

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

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

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

In der folgenden Abbildung wurde das Bild zweimal gerendert.