Compartir a través de


Metarchivos de grabación

La clase Metafile , que hereda de la clase Image , permite registrar una secuencia de comandos de dibujo. Los comandos grabados se pueden almacenar en memoria, guardarse en un archivo o guardarse en una secuencia. Los metarchivos pueden contener gráficos vectoriales, imágenes ráster y texto.

En el ejemplo siguiente se crea un objeto Metafile . El código usa el objeto Metafile para registrar una secuencia de comandos gráficos y, a continuación, guarda los comandos grabados en un archivo denominado SampleMetafile.emf. Tenga en cuenta que el constructor de metarchivo recibe un identificador de contexto del dispositivo y el constructor Graphics recibe la dirección del objeto Metafile . La grabación se detiene (y los comandos grabados se guardan en el archivo) cuando el objeto Graphics sale del ámbito. Las dos últimas líneas de código muestran el metarchivo creando un nuevo objeto Graphics y pasando la dirección del objeto Metafile al método DrawImage de ese objeto Graphics . Tenga en cuenta que el código usa el mismo objeto Metafile para grabar y mostrar (reproducir) el metarchivo.

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

Nota

Para registrar un metarchivo, debe construir un objeto Graphics basado en un objeto Metafile. La grabación del metarchivo finaliza cuando se elimina ese objeto Graphics o sale del ámbito.

 

Un metarchivo contiene su propio estado gráfico, que se define mediante el objeto Graphics usado para registrar el metarchivo. Cualquier propiedad del objeto Graphics (región del clip, transformación del mundo, modo de suavizado y similar) que establezca mientras graba el metarchivo se almacenará en el metarchivo. Al mostrar el metarchivo, el dibujo se realizará según esas propiedades almacenadas.

En el ejemplo siguiente, supongamos que el modo de suavizado se estableció en SmoothingModeNormal durante la grabación del metarchivo. Aunque el modo de suavizado del objeto Graphics usado para la reproducción se establece en SmoothingModeHighQuality, el metarchivo se reproducirá según la configuración SmoothingModeNormal. Es el modo de suavizado establecido durante la grabación que es importante, no el modo de suavizado establecido antes de la reproducción.

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