[EMF] 參照裝置的差異

這篇是寫給我自己存參的。當然網友看看也無妨。
 
我自己在處理 EMF 圖檔繪製時,都是參照印表機解析度來畫,這樣可以盡量提高圖片的精確度,當印表機解析度越高時,精確度就越高。
比如說 Windows 內建的 FAX 傳真印表機至少有 200 DPI 解析度,虛擬印表機也多有 300 DPI 以上解析度,高檔的印表機甚至高於 600 DPI 。
 
所以長期的習慣就會忽略沒有印表機的狀況。最近有個 bug 回報,在沒有印表機下的電腦會發生圖面不正確的問題。
 
我在 .Net 中直接用 MetaFile 類別處理,所以找台有灌 VS2005 的電腦把印表機全部移除掉,測試這個問題。我原先的程式在沒有印表機時,會自動參照螢幕解析度,螢幕解析度常用是 96/120 DPI ,理論上這樣應該是不會有問題才對,但是追查很久都找不到問題,只好把關鍵字輸入線上手冊,把所有相關的文章全部看一遍,才好不容易看到一句話,不過我後來找不到他:
通常參照繪圖單位參照裝置而定,螢幕為像素 (Pixel) ,印表機為文件單位 (Document)。
 
其它單位很容易造成剪圖單位錯亂,所以原先程式碼變成:

Dim emf As New cMetaFile

emf.CreateOptimalGraphics()

Dim grfx As System.Drawing.Graphics = emf.CreateMetaFileGraphics(destRect)

With grfx

     PageScale = 300 / .DpiX

     Font = New Font("新細明體", 9 * PageScale)

     ‘.PageUnit = GraphicsUnit.Document

     .PageUnit = emf.PageUnit

     .Dispose()

End With

 

Return emf

 

其中 PageScale 不用 Graphics.PageScale ,因為只有字型要縮放,但是座標點不用,若是用 Graphics.PageScale ,會連座標點都跟著縮放,有點蠢…

廣告
Categories: 技術分享 | 發表留言

文章分頁導航

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

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

%d 位部落客按了讚: