Partager via


Métafichiers (GDI+)

Windows GDI+ fournit la classe Metafile afin que vous puissiez enregistrer et afficher des métafichiers. Un métafichier, également appelé image vectorielle, est une image stockée sous la forme d’une séquence de commandes de dessin et de paramètres. Les commandes et les paramètres enregistrés dans un métafichier objet peuvent être stockés en mémoire ou enregistrés dans un fichier ou un flux.

GDI+ peut afficher des métafichiers qui ont été stockés dans les formats suivants :

  • Format de métafichier Windows (WMF)
  • Métafichier amélioré (EMF)
  • EMF+

GDI+ peut enregistrer des métafichiers dans les formats EMF et EMF+, mais pas au format WMF.

EMF+ est une extension d’EMF qui permet aux enregistrements GDI+ d’être stockés. Il existe deux variantes au format EMF+ : EMF+ Uniquement et EMF+ Double. Les métafichiers EMF+ uniquement contiennent uniquement des enregistrements GDI+. Ces métafichiers peuvent être affichés par GDI+ mais pas par l’interface GDI (Windows Graphics Device Interface). Les métafichiers EMF+ doubles contiennent des enregistrements GDI+ et GDI. Chaque enregistrement GDI+ d’un métafichier DOUBLE EMF+ est associé à un autre enregistrement GDI. Ces métafichiers peuvent être affichés par GDI+ ou par GDI.

L’exemple suivant enregistre un paramètre et une commande de dessin dans un fichier disque. Notez que l’exemple crée un objet Graphics et que le constructeur de l’objet Graphics reçoit l’adresse d’un objet Metafile en tant qu’argument.

myMetafile = new Metafile(L"MyDiskFile.emf", hdc);
myGraphics = new Graphics(myMetafile);
   myPen = new Pen(Color(255, 0, 0, 200));
   myGraphics->SetSmoothingMode(SmoothingModeAntiAlias);
   myGraphics->DrawLine(myPen, 0, 0, 60, 40);
delete myGraphics;
delete myPen;
delete myMetafile;

Comme l’illustre l’exemple précédent, la classeGraphicsest la clé de l’enregistrement des instructions et des paramètres dans un objet Metafile. Tout appel effectué à une méthode d’un objet Graphics peut être enregistré dans un objet Metafile. De même, vous pouvez définir n’importe quelle propriété d’un objet Graphics et enregistrer ce paramètre dans un objet Metafile. L’enregistrement se termine lorsque l’objet Graphics est supprimé ou est hors de portée.

L’exemple suivant affiche le métafichier créé dans l’exemple précédent. Le métafichier s’affiche avec son coin supérieur gauche à (100, 100).

Graphics myGraphics(hdc);
Image myImage(L"MyDiskFile.emf");
myGraphics.DrawImage(&myImage, 100, 100);

L’exemple suivant enregistre plusieurs paramètres de propriété (région de découpage, transformation mondiale et mode de lissage) dans un Metafile objet. Ensuite, le code enregistre plusieurs instructions de dessin. Les instructions et les paramètres sont enregistrés dans un fichier de disque.

myMetafile = new Metafile(L"MyDiskFile2.emf", hdc); 
myGraphics = new Graphics(myMetafile);
   myGraphics->SetSmoothingMode(SmoothingModeAntiAlias);
   myGraphics->RotateTransform(30);

   // Create an elliptical clipping region.
   GraphicsPath myPath;
   myPath.AddEllipse(0, 0, 200, 100);
   Region myRegion(&myPath);
   myGraphics->SetClip(&myRegion);

   Pen myPen(Color(255, 0, 0, 255));
   myGraphics->DrawPath(&myPen, &myPath);

   for(INT j = 0; j <= 300; j += 10)
   {
      myGraphics->DrawLine(&myPen, 0, 0, 300 - j, j);
   }
delete myGraphics;
delete myMetafile;

L’exemple suivant affiche l’image de métafichier créée dans l’exemple précédent.

myGraphics = new Graphics(hdc);
myMetafile = new Metafile(L"MyDiskFile.emf");
myGraphics->DrawImage(myMetafile, 10, 10);

L’illustration suivante montre la sortie du code précédent. Notez l’anticrénelage, la région de découpage elliptique et la rotation de 30 degrés.

capture d’écran d’une fenêtre contenant une ellipse remplie de lignes provenant d’un point en dehors de l’ellipse