複製鏈接
請複製以下鏈接發送給好友

圖元文件

鎖定
圖元文件:擴展名是.wmf(Windows 圖元文件格式 (WMF),Windows 兼容計算機的一種矢量圖形和光柵圖格式,通常用於字處理剪貼畫。
中文名
圖元文件
外文名
Windows Metafile
平    台
Windows平台
屬    性
文件格式

圖元文件格式介紹

wmf格式是什麼?
---- Wmf是Windows Metafile 的縮寫,簡稱圖元文件,它是微軟公司定義的一種Windows平台下的圖形文件格式。我們先來解釋幾個名詞:
---- 圖元文件頭(metafile header): 是一個數據結構,它定義了儲存在圖元文件中圖象的尺寸、圖元文件的大小、調色板的數目、圖元文件中記錄數、指向圖元文件描述的指針(如果存在的話)、指向圖元文件調色板的指針(如果存在的話)。
---- 圖元文件設備上下文(metafile DC): 是一個用户圖元文件操作的設備上下文。
---- 圖元文件句柄表(metafile handle table): 是標識用來建立存儲在圖元文件中的筆、刷子、字體以及其它對象的一組句柄。
---- 圖元文件調色板(metafile palette): 是一組紅、綠、藍的值,這些值表示建立存儲在圖元文件中的圖象時所使用的顏色。
---- 圖元文件記錄(metafile record): 是一個可變長的結構,結構中包含了諸如建立圖象時設備的分辨率、圖象的大小以及建立圖象時所需要的GDI函數。
---- 有了上面的概念,我們就可以給wmf格式文件一個定義:
---- 圖元文件是一個以二進制編碼的、設備無關格式的多個結構的集合,這些結構包括圖元文件頭、調色板(可選的)、圖元文件內容的文本描述(可選的)、圖元文件記錄。
---- 圖元文件分為內存圖元文件和磁盤圖元文件。內存圖元文件是僅在內存某一個區域進行操作並存放的,大多用於圖象的繪製、拷貝或者進程間的剪切板圖形共享;磁盤圖元文件則主要用於將繪製圖象保存到磁盤文件中,以便事後重看。

圖元文件格式特點

wmf格式的特點
---- wmf格式文件的特點如下:
---- 1. wmf格式文件是Microsoft Windows操作平台所支持的一種圖形格式文件,目前,其它操作系統尚不支持這種格式,如UnixLinux等。
---- 2. 與bmp格式不同,wmf格式文件是設備無關的,即它的輸出特性不依賴於具體的輸出設備
---- 3. 其圖象完全由Win32 API所擁有的GDI函數來完成。
---- 4. wmf格式文件所佔的磁盤空間比其它任何格式的圖形文件都要小得多。
---- 5. 在建立圖元文件時,不能實現即畫即得,而是將GDI調用記錄在圖元文件中,之後,在GDI環境中重新執行,才可顯示圖象。
---- 6. 顯示圖元文件的速度要比顯示其它格式的圖象文件慢,但是它形成圖元文件的速度要遠大於其它格式。

圖元文件格式應用

wmf格式的應用場合
---- 由圖元文件的特點,可知圖元文件與其它格式的圖象文件差別很大。
---- 首先,由於圖元文件是以圖象繪製操作序列來存放數據的,因此,它不適合於圖象處理領域;其次,由於圖元文件的圖象顯示速度慢,因此也不適合於需要快速顯示的場合。
---- 但是,微軟之所以設計了這種格式,自然有它獨特的地方,這就是wmf格式文件所佔的磁盤空間比其它任何格式的圖形文件都要小得多。也就是説,只要用對場合,只這一條,便可擊敗所有格式無對手。
---- 一般地,圖元文件的適用場合如下:
---- 1. 由採集數據繪製曲線的圖象快速保存。
---- 2. 進程間的圖象剪切板數據交換。
其實,wmf格式也有着它獨特的優越性
關於應用實例
1. 功能設計
---- (1) 建立圖元文件 為減少程序篇幅,這裏假設將產生的圖元文件保存到一指定的文件名Myfile.wmf,另外,將圖形假設為一正弦波。
---- (2) 顯示圖元文件 打開圖元文件MyFile.wmf,將剛才產生的圖形恢復到顯示器上。
---- 2. 軟件結構
---- 在Windows 98平台下,採用Visual C++ 6.0 開發工具,其軟件結構使用MFC的單文檔(SDI)框架。
---- 3. 程序實現
---- (1) 使用MFC AppWizard嚮導產生一應用框架
---- 在VC++的“File”菜單中,單擊“New”,彈出一New對話框。在“Projects”頁中選擇“MFC AppWizard [exe]”,在“Project name”編輯框中填入“MyWMF”,按“OK”按鈕,退出New對話框。
---- 在“MFC AppWizard Step 1”對話框中選擇單選鈕“Single document”,按“Finish”按鈕即可完成應用框架的定製。
---- (2) 在視類的頭文件MyWMFView.h中增加成員變量
---- HMETAFILE m_hMetaFile;
---- (3) 增加“建立圖元文件”和“顯示圖元文件”菜單
---- 在“ResourceView”中,雙擊“Menu”下的“IDR_MAINFRAME”,在右邊的窗口裏,增加菜單“建立圖元文件”,其標識為“ID_CREATEMETAFILE”;增加菜單“顯示圖元文件”,其標識為“ID_DISPMETAFILE”。
---- (4) 增加兩個菜單所對應的消息處理函數
---- 在VC++的“New”菜單中,單擊“ClassWizard”,彈出一“MFC ClassWizard”對話框。在“Class Name”組合框中選擇“CMyWMFView”,在“Object IDs”列表框中選擇“ID_CREATEMETAFILE”,在右邊的“Messages”列表框中雙擊“COMMAND”,之後彈出一對話框,點擊 “OK”按鈕,即建立了一個消息處理函數“OnCreateWMF()”;使用同樣的方法建立“ID_DISPMETAFILE”的消息處理函數 “OnDispWMF()”。
---- (5) 在視類的執行文件MyWMFView.cpp的開始中增加頭文件定義
---- #include “math.h”
---- (5) 在消息處理函數“OnCreateWMF()”中增加代碼如下:
----
//類CMetaFileDC的實例化
CMetaFileDC metaFileDC;
//建立圖元的輸出文件
metaFileDC.Create("MyFile.wmf");
//設置文本顏色和筆顏色
metaFileDC.SetTextColor(RGB(255,0,0,));
CPen thePen(PS_SOLID,1,RGB(0,0,255,));
CPen * pOldPen=metaFileDC.SelectObject(&thePen);
//在圖元文件中繪製矩形框
metaFileDC.Rectangle(15, 15, 530, 230);
//在圖元文件中繪製正弦波
for (int i=1; i< 500; i++)
{
metaFileDC.MoveTo(20+i-1, 120-80*sin(0.1*(i-1)));
metaFileDC.LineTo(20+i, 120-80*sin(0.1*i));
}
//在圖元文件中繪製文本
metaFileDC.TextOut(200,250,"圖6
電機載荷正弦波曲線圖");
//恢復缺省的筆
metaFileDC.SelectObject(pOldPen);
//將以上繪製寫入圖元文件MyFile.wmf,關閉之,
最後返回圖元文件的句柄
m_hMetaFile = metaFileDC.Close();
(6) 在消息處理函數“OnDispWMF()”中增加代碼如下:
//定義一個客户區設備上下文,用於顯示圖元文件
CClientDC clientDC(this);
//打開圖元文件,返回圖元文件句柄
HMETAFILE hmf=GetMetaFile("MyFile.wmf”);
//顯示圖元文件,再現所繪製的曲線
clientDC.PlayMetaFile(hmf);
---- (7) 經過編譯、鏈接,形成可執行文件 MyWMF.exe。
---- 使用時先點擊菜單“建立圖元文件”,即可發現,在當前文件夾下,生成一個新文件MyFile.wmf;然後,再點擊菜單“顯示圖元文件”,即可在客户區顯示一幅正弦波曲線。

圖元文件格式總結

----雖然WMF格式其結構定義比較複雜,但通過上面的編程實踐,可見其實現起來並不複雜。這主要得力於MFC將內部複雜的處理封裝在CMetaFileDC類中,對這個類的正確使用,即可達到事半功倍的效果。另外,我們在比較某某圖象格式時,不能一言以蔽之,武斷地説某某好某某不好,而應該結合具體的應用場合。