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添加偏移量 bounds.X = bounds.X+bounds.Width/6.6;
加的数值可能不太精确。对比wine和windows图片差不多吻合就行。
有其它处理方案的,也可以发给我,谢谢。
Wine运行问题 希沃-汉字卡无法显示的更多相关文章
- Linux下安装Wine运行windows程序
资料 首页 https://www.winehq.org/ 安装 https://www.winehq.org/download/ 教程 https://www.winehq.org/document ...
- fedora 28 安装 wine 运行 uTorrent 解决linux 端,pt 资源下载问题
fedora 28 仓库中,资源比较多.使用 wine 运行windows 程序,可以一定程度上解决软件跨平台问题. 搜索: Last metadata expiration check: :: ag ...
- 在CentOS 6 的cron/crontab中使用wine运行exe程序
几个月前服务器的OS从Ubuntu 10.04转为CentOS 6.3,装好wine后手动运行shell脚本可以正常运行指定的exe程序(脚本和Ubuntu中的一样),于是就直接修改crontab定时 ...
- Linux下安装Wine 运行、卸载 windows程序
资料 首页 https://www.winehq.org/ 安装 https://www.winehq.org/download/ 教程 https://www.winehq.org/document ...
- 同时支持Android 和 ios 投屏到电脑的软件,Support Android and ios screen shrare to PC - 希沃授课助手
最近学校由粉笔黑板更换了智慧电子黑板,然后发现了一个好玩的软件. 感谢希沃公司的开发: 希沃授课助手,这是一款同时支持Android 和 ios 投屏和远程控制的. 效果很流畅,非常赞
- Protege汉字不能正常显示问题
在Protege5.0中有下面的问题: 点击uses,汉字不能正常显示. 在qq群里面问到,可以通过设置label的方式,在对类,子类命名成英语的,点击annotations,在label中设置汉字名 ...
- Myeclipse和 eclipse中的控制台汉字横着显示修改
Myeclipse和 eclipse中的控制台汉字横着显示问题的修改 如图: 同一种字体有两种显示方式,比如微软雅黑和@微软雅黑,前一种汉字是竖着显示,后一种汉字是横着显示. 修改方法: prefer ...
- Android Studio 点运行启用时,列表中不显示虚拟机,但是实际上在AVD Manager中已经添加了2个虚拟设备了
Android Studio 点运行启用时,列表中不显示虚拟机,但是实际上在AVD Manager中已经添加了2个虚拟设备了 百度上找了一下方法, 情况出现:打开androidstudio,一直连接不 ...
- c# 运行大运算程序主窗体卡掉的解决
写了一个运算过滤大文本的程序, 其中方法里边使用了多线程,并行线程等方法. 但主窗体控件直接使用此方法时,页面卡顿.所以主线程被堵塞. 代码如下, splitfile 这个方法运行时页面卡顿,阻塞了 ...
随机推荐
- Spring整合Redis学习笔记
1 Spring-Data-Redis 1.1 Spring-Data-Redis简介 Spring-Data-Redis(简称SDR)对Redis的Key-Value数据存储操作提供了更高层次的 ...
- 调用d2l.plt.imshow(img)不报错、不显示图像的问题
解决方案: 加入如下所示的代码: import matplotlib.pyplot as plt d2l.plt.imshow(img) plt.show()
- bilibili视频常用快捷键
Esc退出全屏 Q点赞.长按三连 W投币 E收藏 D开/关弹幕 F开/关全屏 M静音 [ 多P 上一个 ] 多P下一个 Enter发弹幕 Space播放/暂停 →单次快进5s,长按倍速播放 ←快退5s ...
- Anaconda与conda、pip与conda的区别 - 搬运
Anaconda与conda.pip与conda的区别 风影忍着 转自:https://zhuanlan.zhihu.com/p/379321816 作为一个Python初学者,在请教资深 ...
- WSL安装Ubuntu 22.04 (1)
1. 安装WSL WSL是适用于 Linux 的 Windows 子系统可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具.实用工具和应用程序 - 且不会产生传统虚拟机或双启动 ...
- 实验2 数组、指针与C++标准库
实验任务5: Info.hpp #ifndef INFO_HPP #define INFO_HPP #include<iostream> #include<iomanip> # ...
- 宕机了,Redis如何避免数据丢失?
Redis的持久化主要有两大机制,即AOF日志和RDB快照 AOF日志 1.2 AOF日志是如何实现的? 说到⽇志,我们⽐较熟悉的是数据库的写前⽇志(Write Ahead Log, WAL)-- ...
- 基于 Web SDK 实现视频通话场景 | 声网 SDK 教程
声网视频 SDK 被广泛应用于多种实时互动场景中,例如视频会议.视频通话.音视频社交.在线教育等.为了让刚刚接触声网 SDK 的开发者,可以更顺畅地实现基础的视频通话功能,我们基于声网 Web SDK ...
- Mybatis模糊查询的两种方式
第一种 使用 || 字符: ** ** 第二种 使用 CONCAT 函数: ** ** 温馨提醒: 当然你也可以使用 $符 ,但是这种方式会导致不安全,让非法分子有机可寻,轻则数据库瘫痪,重则数据泄露 ...
- v-model 和 .sync
v-model的本质是父子组件间的通讯,父组件给子组件传递一个value自定义属性和input自定义事件:子组件接收value 并触发自定义事件修改value 父组件中 <Child v-mod ...