(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 度旋转。