標籤:甲骨紋收構太陽微系統

圖元文件:擴展名是。wmf(Windows 圖元文件格式 (WMF),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操作平台所支持的一種圖形格式文件,目前,其它操作系統尚不支持這種格式,如Unix、Linux等。
---- 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類中,對這個類的正確使用,即可達到事半功倍的效果。另外,我們在比較某某圖象格式時,不能一言以蔽之,武斷地說某某好某某不好,而應該結合具體的應用場合。
上一篇[PostScript印表機]    下一篇 [孟法師碑]

相關評論

同義詞:暫無同義詞