元檔 (GDI+)
Windows GDI+ 提供 Metafile 類別,讓您可以記錄及顯示元檔。 元檔也稱為向量影像,是儲存為繪圖命令和設定序列的影像。 元檔 物件中記錄的命令和設定可以儲存在記憶體中,或儲存至檔案或數據流。
GDI+ 可以顯示已以下欄格式儲存的元檔:
- Windows 元檔格式 (WMF)
- 增強型元檔 (EMF)
- EMF+
GDI+ 可以記錄 EMF 和 EMF+ 格式的元檔,但不能以 WMF 格式錄製。
EMF+ 是 EMF 的延伸模組,允許儲存 GDI+ 記錄。 EMF+ 格式有兩種變化:EMF+ Only 和 EMF+ Dual。 EMF+ 僅限元檔只包含 GDI+ 記錄。 這類元檔可由 GDI+ 顯示,但不能由 Windows Graphics Device Interface (GDI) 顯示。 EMF+ 雙重元檔包含 GDI+ 和 GDI 記錄。 EMF+ 雙重元檔中的每個 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 物件的任何屬性,並將該設定記錄在 Metafile 物件中。 錄製會在刪除或超出範圍時,Graphics 對象結束。
下列範例會顯示在上述範例中建立的元檔。 元檔會以其左上角的 (100, 100) 顯示。
Graphics myGraphics(hdc);
Image myImage(L"MyDiskFile.emf");
myGraphics.DrawImage(&myImage, 100, 100);
下列範例會在 Metafile 物件中記錄數個屬性設定(裁剪區域、世界轉換和平滑模式)。 然後程式代碼會記錄數個繪圖指示。 指示和設定會儲存在磁碟檔案中。
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度旋轉。