Wine運行問題 希沃-漢字卡無法顯示

在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圖片差不多吻合。

有其它處理方案的,也可以發給我,謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章