(GDI+) 图元文件

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

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

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

GDI+ 能够以 EMF 和 EMF+ 格式记录图元文件,但不能以 WMF 格式记录。

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

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

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 类是录制 图元文件 对象中的说明和设置的关键。 对 Graphics 对象的方法进行的任何调用都可以记录在 图元文件 对象中。 同样,可以设置 Graphics 对象的任意属性,并在 图元文件 对象中记录该设置。 当 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 度旋转。

窗口的屏幕截图,该窗口包含一个椭圆,其中填充了源自椭圆外某一点的线条