图元文件 (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 度旋转。