在wine環境下運行希沃白板5,漢字卡無法正常顯示:
這個模塊是我之前開發的模塊,過了5年還是有印象。
大概原理是獲取字體庫中字符的筆畫路徑GraphicsPath,根據裏面的路徑點集PathPoints,通過PathGeometry轉化爲Path,填充好顏色就可以放到界面顯示了。
EN5裏沒有任何異常,只是顯示不了。我單獨寫了個demo驗證下:
demo在Wine上運行正常。
去看了下EN5的日誌,找到了這個異常:
GraphicsPath.AddPath異常,推測大概是參數問題。參數一共有6個,應該是幾個引用參數
另外,我們看看Wine裏面對應的實現。這裏有對參數的校驗,並返回了Invalid結果,能對的上:
path是構造時初始化的,string、family等不可能爲null值,layoutRect調用的位置已經初始化了。所以是我們嘗試按照上面的異常看看format。果然,嘗試將format置空就出現了異常
我們看下報啥異常:
確定是format空異常,後面就簡單了,我們改改wine的gdiplus.dll下面實現。
取消對format空異常的校驗,並賦值Format默認值。
而C#中我們設置默認值StringFormat.GenericDefault,其實調用的也是gdiplus下GdipStringFormatGetGenericDefault。默認是StringAlignmentNear
於是解決了:
細心的同學會出現,漢字往左偏了。。。
我記得之前維護這個模塊時,要故意加偏移量。問了下前同事,發來了截圖:
所以本來就是有偏移的。我們這裏只需要處理下wine與windows之間的偏移差異就行了,具體代碼graphics.c->gdip_format_string
對X添加偏移量-寬度*1/15,加的數值可能不太精確。是對比wine和windows圖片差不多吻合。
有其它處理方案的,也可以發給我,謝謝。