Enregistrement des métafichiers
La classe Metafile , qui hérite de la classe Image , vous permet d’enregistrer une séquence de commandes de dessin. Les commandes enregistrées peuvent être stockées en mémoire, enregistrées dans un fichier ou enregistrées dans un flux. Les métafichiers peuvent contenir des graphiques vectoriels, des images raster et du texte.
L’exemple suivant crée un objet Metafile . Le code utilise l’objet Metafile pour enregistrer une séquence de commandes graphiques, puis enregistre les commandes enregistrées dans un fichier nommé SampleMetafile.emf. Notez que le constructeur Metafile reçoit un handle de contexte d’appareil et que le constructeur Graphics reçoit l’adresse de l’objet Metafile . L’enregistrement s’arrête (et les commandes enregistrées sont enregistrées dans le fichier) lorsque l’objet Graphics sort de l’étendue. Les deux dernières lignes de code affichent le métafichier en créant un objet Graphics et en transmettant l’adresse de l’objet Metafile à la méthode DrawImage de cet objet Graphics . Notez que le code utilise le même objet Metafile pour enregistrer et afficher (lire) le métafichier.
Metafile metafile(L"SampleMetafile.emf", hdc);
{
Graphics graphics(&metafile);
Pen greenPen(Color(255, 0, 255, 0));
SolidBrush solidBrush(Color(255, 0, 0, 255));
// Add a rectangle and an ellipse to the metafile.
graphics.DrawRectangle(&greenPen, Rect(50, 10, 25, 75));
graphics.DrawEllipse(&greenPen, Rect(100, 10, 25, 75));
// Add an ellipse (drawn with antialiasing) to the metafile.
graphics.SetSmoothingMode(SmoothingModeHighQuality);
graphics.DrawEllipse(&greenPen, Rect(150, 10, 25, 75));
// Add some text (drawn with antialiasing) to the metafile.
FontFamily fontFamily(L"Arial");
Font font(&fontFamily, 24, FontStyleRegular, UnitPixel);
graphics.SetTextRenderingHint(TextRenderingHintAntiAlias);
graphics.RotateTransform(30.0f);
graphics.DrawString(L"Smooth Text", 11, &font,
PointF(50.0f, 50.0f), &solidBrush);
} // End of recording metafile.
// Play back the metafile.
Graphics playbackGraphics(hdc);
playbackGraphics.DrawImage(&metafile, 200, 100);
Notes
Pour enregistrer un métafichier, vous devez construire un objet Graphics basé sur un objet Metafile . L’enregistrement du métafichier se termine lorsque cet objet Graphics est supprimé ou sort de l’étendue.
Un métafichier contient son propre état graphique, qui est défini par l’objet Graphics utilisé pour enregistrer le métafichier. Toutes les propriétés de l’objet Graphics (région de clip, transformation du monde, mode lissage, etc.) que vous définissez lors de l’enregistrement du métafichier seront stockées dans le métafichier. Lorsque vous affichez le métafichier, le dessin est effectué en fonction de ces propriétés stockées.
Dans l’exemple suivant, supposons que le mode de lissage a été défini sur SmoothingModeNormal pendant l’enregistrement du métafichier. Même si le mode de lissage de l’objet Graphics utilisé pour la lecture est défini sur SmoothingModeHighQuality, le métafichier sera lu en fonction du paramètre SmoothingModeNormal. C’est le mode de lissage défini pendant l’enregistrement qui est important, et non le mode de lissage défini avant la lecture.
graphics.SetSmoothingMode(SmoothingModeHighQuality);
graphics.DrawImage(&meta, 0, 0);