Wine运行问题 希沃-汉字卡无法显示

发布时间 2023-04-13 12:14:55作者: 唐宋元明清2188

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

有其它处理方案的,也可以发给我,谢谢。