图元文件 (GDI+)

Windows GDI+ 提供 图元文件 类,以便你可以记录和显示图元文件。 图元文件(也称为矢量图像)是存储为绘图命令和设置序列的图像。 图元文件 对象中记录的命令和设置可以存储在内存中或保存到文件或流中。

GDI+ 可以显示以以下格式存储的图元文件:

  • Windows 图元文件格式 (WMF)
  • 增强型图元文件 (EMF)
  • EMF+

GDI+ 可以记录 EMF 和 EMF+ 格式的图元文件,但不能以 WMF 格式进行记录。

EMF+ 是 EMF 的扩展,允许存储 GDI+ 记录。 EMF+ 格式有两种变体:EMF+ 仅限 EMF+和 EMF+ 双。 EMF+ 仅图元文件仅包含 GDI+ 记录。 此类图元文件可以由 GDI+ 显示,但不能由 Windows 图形设备接口(GDI)显示。 EMF+ 双图元文件包含 GDI+ 和 GDI 记录。 EMF+ 双元文件中的每个 GDI+ 记录都与备用 GDI 记录配对。 此类图元文件可由 GDI+ 或 GDI 显示。

以下示例在磁盘文件中记录一个设置和一个绘图命令。 请注意,该示例创建一个 Graphics 对象,Graphics 对象的构造函数接收 图元文件 对象的地址作为参数。

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;

如前面的示例所示,Graphics 类是记录 图元文件 对象中的说明和设置的关键。 对 图形 对象方法的任何调用都可以记录在 图元文件 对象中。 同样,可以设置 图形 对象的任何属性,并在 图元文件 对象中记录该设置。 图形 对象被删除或超出范围时,录制结束。

以下示例显示在前面的示例中创建的图元文件。 图元文件以左上角(100,100)显示。

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

以下示例在 图元文件 对象中记录多个属性设置(剪辑区域、世界转换和平滑模式)。 然后,代码会记录多个绘图指令。 说明和设置保存在磁盘文件中。

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;

以下示例显示在前面的示例中创建的图元文件图像。

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

下图显示了上述代码的输出。 请注意抗锯齿、椭圆剪裁区域和 30 度旋转。

窗口的屏幕截图,该窗口包含一个用椭圆填充的线条的椭圆,这些线条源自椭圆外部的某个点