À propos du rognage et de la mise à l’échelle d’images GDI+
Vous pouvez utiliser la méthode DrawImage de la classe Graphics pour dessiner et positionner des images. DrawImage étant une méthode surchargée, vous pouvez lui fournir des arguments de plusieurs façons. Une variante de la méthode Graphics::D rawImage reçoit l’adresse d’un objet Image et une référence à un objet Rect . Le rectangle spécifie la destination de l’opération de dessin ; autrement dit, il spécifie le rectangle dans lequel l’image sera dessinée. Si la taille du rectangle de destination est différente de la taille de l’image d’origine, l’image est mise à l’échelle pour s’adapter au rectangle de destination. L’exemple suivant dessine la même image trois fois : une fois sans mise à l’échelle, une fois avec une extension et une fois avec une compression.
Bitmap myBitmap(L"Spiral.png");
Rect expansionRect(80, 10, 2 * myBitmap.GetWidth(), myBitmap.GetHeight());
Rect compressionRect(210, 10, myBitmap.GetWidth() / 2,
myBitmap.GetHeight() / 2);
myGraphics.DrawImage(&myBitmap, 10, 10);
myGraphics.DrawImage(&myBitmap, expansionRect);
myGraphics.DrawImage(&myBitmap, compressionRect);
Le code précédent, ainsi qu’un fichier particulier, Spiral.png, ont produit la sortie suivante.
Certaines variantes de la méthode Graphics::D rawImage ont un paramètre rectangle source ainsi qu’un paramètre rectangle de destination. Le rectangle source spécifie la partie de l’image d’origine qui sera dessinée. Le rectangle de destination spécifie où cette partie de l’image sera dessinée. Si la taille du rectangle de destination est différente de celle du rectangle source, l’image est mise à l’échelle pour s’adapter au rectangle de destination.
L’exemple suivant construit un objet Bitmap à partir du fichier Runner.jpg. L’image entière est dessinée sans mise à l’échelle à (0, 0). Ensuite, une petite partie de l’image est dessinée deux fois : une fois avec une compression et une fois avec une expansion.
Bitmap myBitmap(L"Runner.jpg");
// The rectangle (in myBitmap) with upper-left corner (80, 70),
// width 80, and height 45, encloses one of the runner's hands.
// Small destination rectangle for compressed hand.
Rect destRect1(200, 10, 20, 16);
// Large destination rectangle for expanded hand.
Rect destRect2(200, 40, 200, 160);
// Draw the original image at (0, 0).
myGraphics.DrawImage(&myBitmap, 0, 0);
// Draw the compressed hand.
myGraphics.DrawImage(
&myBitmap, destRect1, 80, 70, 80, 45, UnitPixel);
// Draw the expanded hand.
myGraphics.DrawImage(
&myBitmap, destRect2, 80, 70, 80, 45, UnitPixel);
L’illustration suivante montre l’image non mise à l’échelle et les parties d’image compressées et développées.