Vorgehensweise: Verbessern der Leistung durch das Vermeiden der automatischen Skalierung
Während Sie ein Bild zeichnen, kann GDI+ dieses automatisch skalieren, wodurch die Leistung verringert wird. Alternativ können Sie die Skalierung des Bilds auch steuern, indem Sie die Dimensionen 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 es nicht unbedingt die effizienteste. Wenn die von GDI+ verwendete Auflösung (normalerweise 96 Punkte pro Zoll) sich von der Auflösung unterscheidet, die im Image-Objekt gespeichert ist, wird die DrawImage-Methode das Bild skalieren. Angenommen, ein Image-Objekt besitzt eine Breite von 216 Pixeln und einen gespeicherten horizontalen Auflösungswert von 72 Punkten pro Zoll. Da 216/72 das Ergebnis 3 ergibt, wird das Bild von DrawImage skaliert, sodass es eine Breite von 3 Zoll mit einer Auflösung von 96 Punkten pro Zoll aufweist. Das heißt, DrawImage zeigt ein Bild an, das eine Breite von 96 × 3 = 288 Pixel aufweist.
Auch wenn sich die Bildschirmauflösung von 96 Punkten pro Zoll unterscheidet, skaliert GDI+ vermutlich das Bild so, als wäre die Bildschirmauflösung 96 Punkte pro Zoll. Das liegt daran, dass ein Graphics-Objekt von GDI+ einem Gerätekontext zugeordnet ist, und wenn GDI+ den Gerätekontext für die Bildschirmauflösung abfragt, ist das Ergebnis normalerweise 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
Im folgenden Beispiel wird dasselbe Bild zweimal gezeichnet. 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 (gemessen in Pixel) des Zielrechtecks als die Breite und Höhe des ursprünglichen Bilds angegeben. Die folgende Abbildung zeigt das Bild, der zweimal gerendert wurde:
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)
Kompilieren des Codes
Das obige Beispiel ist für die Verwendung mit Windows Forms konzipiert und erfordert PaintEventArgs e
, einen Parameter des Paint-Ereignishandlers. Ersetzen Sie „Texture.jpg“ durch einen Bildnamen und Pfad, der auf Ihrem System gültig ist.
Siehe auch
.NET Desktop feedback