Gewusst wie: Verbessern der Leistung durch das Vermeiden der automatischen Skalierung

Aktualisiert: November 2007

GDI+ skaliert ein Bild möglicherweise automatisch, während Sie es zeichnen. Dadurch wird die Leistung verringert. Sie können das Skalieren des Bildes jedoch auch steuern, indem Sie die Abmessungen des Zielrechtecks an die DrawImage-Methode übergeben.

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

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 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 (in der Regel 96 Punkte pro Zoll) von der im Image-Objekt gespeicherten Auflösung abweicht, wird das Bild von der DrawImage-Methode skaliert. Angenommen, ein Image-Objekt hat eine Breite von 216 Pixel und einen gespeicherten Wert für die horizontale Auflösung von 72 Punkten pro Zoll. Da 216/72 gleich 3 ist, skaliert DrawImage das Bild, sodass es eine Breite von 3 Zoll bei einer Auflösung von 96 Punkten pro Zoll besitzt. Das heißt, DrawImage zeigt ein Bild mit einer Breite von 96 × 3 = 288 Pixel an.

Auch wenn Sie eine andere Bildschirmauflösung als 96 Punkte pro Zoll (DPI) verwenden, skaliert GDI+ das Bild in der Regel so, als ob die Bildschirmauflösung 96 Punkte pro Zoll betragen würde. Dies liegt daran, dass ein GDI+-Graphics-Objekt einem Gerätekontext zugeordnet ist. Wenn GDI+ den Gerätekontext für die Bildschirmauflösung abfragt, ist das Ergebnis unabhängig von der tatsächlichen Bildschirmauflösung in der Regel 96. Sie können die automatische Skalierung vermeiden, indem Sie das Zielrechteck in der DrawImage-Methode angeben.

Beispiel

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. In der folgenden Abbildung wurde das Bild zweimal gerendert.

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);

Kompilieren des Codes

Das vorhergehende Beispiel ist für die Verwendung mit Windows Forms konzipiert und erfordert PaintEventArgs e, einen Parameter des Paint-Ereignishandlers. Ersetzen Sie Texture.jpg mit einem Bildnamen und einem Pfad, die auf Ihrem System gültig sind.

Siehe auch

Weitere Ressourcen

Bilder, Bitmaps und Metadateien

Arbeiten mit Bildern, Bitmaps, Symbolen und Metadateien