[VBNET] 如何支援 EMZ/WMZ


這個主題在 VB2005 是比較方便的,因為 VB2005 內建 GZip 解壓縮模組,大家都可以省點事。
 
WMF 是 Windows 3.x 內建的向量檔格式,早期視窗軟體輸出環境不大,解析度不高,所以 2 bytes 的整數來表示座標就非常夠了,但是 Office 4.2/4.3 在列印時需要比較精確的定位,WMF 格式並不能直接使用,所以當時 Office 在 WMF 檔頭前面加上 22 bytes 來描述紙張大小與圖檔關係,但是這個格式並不直接被 Windows API 支援,必須自己另外處理,才能展示,有時又稱 WMF(P) 。而在 WinNT 3.1 上,開始引入工作站級的繪圖軟體,最早引入的是 MicroStation ,工作站級的繪圖軟體需要更精準的座標定位,WMF 不足以使用,所以在 WinNT 上使用的是 4 bytes 整數來表示的座標,就是 EMF ,之後 Win9x/WinNT 都同時支援 EMF ,並以 EMF 為記憶體中交換圖檔的格式。
 
EMZ 是 EMF 的壓縮檔格式,WMZ 是 WMF 的壓縮檔格式,從 Office 2000 開始支援,Office XP 開始,允許使用者可以輸出成 EMZ / WMZ ,到了 Office 2003 可輸出 EMZ 格式。其中主要 WMF 是 Windows 3.1 格式,座標解析度不足,隨著高解析度的印表機問世,例如 4800 DPI 的印表機,若是使用 WMF ,圖形最大只能到 17.3 公分,還不到 A4 尺寸,一般狀況都需要用到 EMF 的解析度,所以到了 Office 2003 乾脆輸出就不允許輸出成為 WMZ 了。
 
EMZ / WMZ 說穿了,就是原先的 EMF + GZip = EMZ ,同理,WMZ 也是一樣,不過網路上的資料少到幾乎找不到,我也是猜出來的,所以在支援上可能會有問題,若是網友有相關資訊時,麻煩回應本篇通知我。
 
以顯示 EMZ 為例

Case “emz", “wmz"

     Dim ms As New IO.MemoryStream(MyGZipDeCompressBytes(MyGetBinaryFile(strFile)))

     PictureBox.Image = New Drawing.Imaging.Metafile(ms)

 
註: MyGetBinaryFile 為將檔案讀成 Byte() 陣列,可在我的個人網站上找到,MyGZipDeCompressBytes 為將 Byte() 陣列解壓縮為 Byte() 陣列,有空我就會整理到個人網站去。
 
這樣就可以正確顯示了,將支援此功能加入先前發表的 QuickXY ,如下圖:
 
產生 EMZ 的範例
MySaveBinaryFile(MyGZipCompressBytes(emfImage.ToBytes()), strEmzFile & “.emz")
 
註: MySaveBinaryFile為將 Byte() 陣列寫到檔案,可在我的個人網站上找到,MyGZipCompressBytes為將 Byte() 陣列壓縮為 Byte() 陣列,有空我就會整理到個人網站去,emfImage 為我個人自建的 EMF 類別,支援輸出成為 Byte() 陣列。
Categories: 技術分享 | 5 則迴響

文章分頁導航

5 thoughts on “[VBNET] 如何支援 EMZ/WMZ

  1. 子璉

    最早的文章請參考:http://tlcheng.spaces.live.com/blog/cns!145419920BFD55A7!403.entry
     
    這個主題貼出來後,沒想到很多人搜尋 EMZ Reader 之類的訊息來到我這,所以我把我自己用的執行檔分享出來,可以拿來讀 emz 、做 EMF <-> EMZ 互轉。
    版號:1.0.2583 。我習慣這類上網會從 0.x 開始編號,不過這個當初在寫的時候,沒想到會上網分享,所以就讓 .Net 自己編號…
    目前使用的版本是 VB2005 ,所以要配合 .Net framework 2.0 。
    http://tlcheng.twbbs.org/Tools/QuickXY/quickXY.1.0.2583.zip

  2. 子璉

    因為很多人搜尋 EMZ / WMZ 來看這篇,所以我針對 WMZ 做點補充。微軟自己的 WMZ 就有兩種,此篇指的是向量圖形檔 WMF 的壓縮格式。
    另有一個常用的 WMZ 是 Windows Media Player 用的,以下引用自線上手冊:
    ms-help://MS.MSDNQTR.v80.cht/MS.MSDN.v80/MS.KB.v10.cht/kb/windows/316992.htm#29
    Windows Media Player 面板 (.wmz、.wms)
    支援這種檔案類型的 Windows Media Player
    版本:
      ‧Windows Media Player 7
      ‧適用 Windows XP 的 Windows Media Player
      ‧Windows Media Player 9 系列
    Windows Media Player 面板 (.wms) 定義檔案是一種 XML 文字文件,定義面版中所顯示的元素、其關係及功能。指令碼創作器可以建立面板定義檔案 (.wms),及任何相關的 JScript 檔案 (.js),這些檔案可以結合美術元素,並在面板中新增功能。
    .wmz 檔案是壓縮的 Zip 封存檔,包含了 Windows Media Player 面板定義檔案、相關的 Jscript 檔案及其支援的圖形檔。請按一下以下載範例 .wmz 面板檔案。(http://www.microsoft.com/windows/windowsmedia/player/skins.aspx)

  3. 引用通告: 擷取 Office 檔內圖片工具 | 鄭子璉

  4. 引用通告: [VBNET] 關於 MetaFile | 鄭子璉

發表留言

在 WordPress.com 建立免費網站或網誌.