Comment : améliorer les performances en évitant la mise à l'échelle automatique
Mise à jour : novembre 2007
GDI+ peut automatiquement mettre à l'échelle une image que vous dessinez, ce qui diminue les performances. Par ailleurs, vous pouvez contrôler la mise à l'échelle de l'image en passant les dimensions du rectangle de destination à la méthode DrawImage.
Par exemple, l'appel suivant à la méthode DrawImage spécifie un coin supérieur gauche de (50, 30), mais ne spécifie pas de rectangle de destination.
e.Graphics.DrawImage(image, 50, 30) ' upper-left corner at (50, 30)
e.Graphics.DrawImage(image, 50, 30); // upper-left corner at (50, 30)
Bien qu'il s'agisse de la version la plus simple de la méthode DrawImage en termes de nombre d'arguments requis, elle n'est pas nécessairement la plus efficace. Si la résolution utilisée par GDI+ (habituellement 96 points par pouce) est différente de la résolution stockée dans l'objet Image, la méthode DrawImage dimensionnera l'image. Par exemple, supposons qu'un objet Image ait une largeur de 216 pixels et une valeur de résolution horizontale stockée de 72 points par pouce. Comme 216/72 est égal à 3, DrawImage dimensionnera l'image pour qu'elle ait une largeur de 3 pouces à une résolution de 96 points par pouce. Autrement dit, DrawImage affichera une image d'une largeur de 96 x 3 = 288 pixels.
Même si votre résolution d'écran est différente de 96 points par pouce, GDI+ dimensionnera sans doute l'image comme si la résolution de l'écran était de 96 points par pouce. Cela tient au fait qu'un objet GDI+Graphics est associé à un contexte de périphérique (Device Context) et, lorsque GDI+ interroge le contexte de périphérique sur la résolution de l'écran, le résultat est habituellement 96, quelle que soit la résolution réelle de l'écran. Vous pouvez éviter la mise à l'échelle automatique en spécifiant le rectangle de destination dans la méthode DrawImage.
Exemple
L'exemple suivant dessine deux fois la même image. Dans le premier cas, la largeur et la hauteur du rectangle de destination ne sont pas spécifiées et l'image est automatiquement dimensionnée. Dans le deuxième cas, la largeur et la hauteur (mesurées en pixels) du rectangle de destination sont spécifiées comme étant les mêmes que la largeur et la hauteur de l'image d'origine. L'illustration suivante montre l'image rendue deux fois.
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);
Compilation du code
L'exemple précédent est destiné à une utilisation avec Windows Forms et nécessite PaintEventArgs e, qui est un paramètre du gestionnaire d'événements Paint. Remplacez Texture.jpg par le nom et le chemin d'accès d'une image valides sur votre système.