Aufzeichnen von Metadateien

Mit der Metafile-Klasse , die von der Image-Klasse erbt, können Sie eine Sequenz von Zeichnungsbefehlen aufzeichnen. Die aufgezeichneten Befehle können im Arbeitsspeicher, in einer Datei oder in einem Stream gespeichert werden. Metadateien können Vektorgrafiken, Rasterbilder und Text enthalten.

Im folgenden Beispiel wird ein Metafile-Objekt erstellt. Der Code verwendet das Metafile-Objekt , um eine Sequenz von Grafikbefehlen aufzuzeichnen, und speichert dann die aufgezeichneten Befehle in einer Datei mit dem Namen SampleMetafile.emf. Beachten Sie, dass der Metafile-Konstruktor ein Gerätekontexthandle empfängt und der Grafikkonstruktor die Adresse des Metafile-Objekts empfängt. Die Aufzeichnung wird beendet (und die aufgezeichneten Befehle werden in der Datei gespeichert), wenn das Graphics-Objekt den Gültigkeitsbereich überschreitet. In den letzten beiden Codezeilen wird die Metadatei angezeigt, indem ein neues Graphics-Objekt erstellt und die Adresse des Metafile-Objekts an die DrawImage-Methode dieses Graphics-Objekts übergeben wird. Beachten Sie, dass der Code dasselbe Metafile-Objekt zum Aufzeichnen und Anzeigen (Wiedergeben) der Metadatei verwendet.

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);

Hinweis

Um eine Metadatei aufzuzeichnen, müssen Sie ein Graphics-Objekt basierend auf einem Metafile-Objekt erstellen. Die Aufzeichnung der Metadatei endet, wenn das Graphics-Objekt gelöscht wird oder den Gültigkeitsbereich überschreitet.

 

Eine Metadatei enthält einen eigenen Grafikzustand, der durch das Graphics-Objekt definiert wird, das zum Aufzeichnen der Metadatei verwendet wird. Alle Eigenschaften des Grafikobjekts (Clipbereich, Welttransformation, Glättungsmodus usw.), die Sie beim Aufzeichnen der Metadatei festgelegt haben, werden in der Metadatei gespeichert. Wenn Sie die Metadatei anzeigen, erfolgt die Zeichnung gemäß diesen gespeicherten Eigenschaften.

Im folgenden Beispiel wird davon ausgegangen, dass der Glättungsmodus während der Aufzeichnung der Metadatei auf SmoothingModeNormal festgelegt wurde. Obwohl der Glättungsmodus des für die Wiedergabe verwendeten Grafikobjekts auf SmoothingModeHighQuality festgelegt ist, wird die Metadatei gemäß der Einstellung SmoothingModeNormal wiedergegeben. Wichtig ist der während der Aufzeichnung festgelegte Glättungsmodus, nicht der Glättungsmodus, der vor der Wiedergabe festgelegt wurde.

graphics.SetSmoothingMode(SmoothingModeHighQuality);
graphics.DrawImage(&meta, 0, 0);