在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运行问题 希沃-汉字卡无法显示的更多相关文章

  1. Linux下安装Wine运行windows程序

    资料 首页 https://www.winehq.org/ 安装 https://www.winehq.org/download/ 教程 https://www.winehq.org/document ...

  2. fedora 28 安装 wine 运行 uTorrent 解决linux 端,pt 资源下载问题

    fedora 28 仓库中,资源比较多.使用 wine 运行windows 程序,可以一定程度上解决软件跨平台问题. 搜索: Last metadata expiration check: :: ag ...

  3. 在CentOS 6 的cron/crontab中使用wine运行exe程序

    几个月前服务器的OS从Ubuntu 10.04转为CentOS 6.3,装好wine后手动运行shell脚本可以正常运行指定的exe程序(脚本和Ubuntu中的一样),于是就直接修改crontab定时 ...

  4. Linux下安装Wine 运行、卸载 windows程序

    资料 首页 https://www.winehq.org/ 安装 https://www.winehq.org/download/ 教程 https://www.winehq.org/document ...

  5. 同时支持Android 和 ios 投屏到电脑的软件,Support Android and ios screen shrare to PC - 希沃授课助手

    最近学校由粉笔黑板更换了智慧电子黑板,然后发现了一个好玩的软件. 感谢希沃公司的开发: 希沃授课助手,这是一款同时支持Android 和 ios 投屏和远程控制的. 效果很流畅,非常赞

  6. Protege汉字不能正常显示问题

    在Protege5.0中有下面的问题: 点击uses,汉字不能正常显示. 在qq群里面问到,可以通过设置label的方式,在对类,子类命名成英语的,点击annotations,在label中设置汉字名 ...

  7. Myeclipse和 eclipse中的控制台汉字横着显示修改

    Myeclipse和 eclipse中的控制台汉字横着显示问题的修改 如图: 同一种字体有两种显示方式,比如微软雅黑和@微软雅黑,前一种汉字是竖着显示,后一种汉字是横着显示. 修改方法: prefer ...

  8. Android Studio 点运行启用时,列表中不显示虚拟机,但是实际上在AVD Manager中已经添加了2个虚拟设备了

    Android Studio 点运行启用时,列表中不显示虚拟机,但是实际上在AVD Manager中已经添加了2个虚拟设备了 百度上找了一下方法, 情况出现:打开androidstudio,一直连接不 ...

  9. c# 运行大运算程序主窗体卡掉的解决

    写了一个运算过滤大文本的程序, 其中方法里边使用了多线程,并行线程等方法.  但主窗体控件直接使用此方法时,页面卡顿.所以主线程被堵塞. 代码如下, splitfile 这个方法运行时页面卡顿,阻塞了 ...

随机推荐

  1. .net 生成Excel并保存

    void SaveQuestionToExcel(List<Question> datas, string path) { using (Workbook workbook = new H ...

  2. Abp学习(一) abp+vue +mysql框架搭建

    一.到Abp官网下载框架 地址:https://aspnetboilerplate.com/Templates 二.打开项目 修改数据库连接为MySql,默认是SQL Server 2.1.修改链接字 ...

  3. loadrunner添加头部

    web_add_auto_header("token_id", "{token_id}"); 或 web_add_header("token_id&q ...

  4. mysql对汉字排序

    问题: 编写order by排序时,如果字段是汉字的话,排序会失效. 如: SELECT * FROM user ORDER BY age ASC,username DESC 此时按照username ...

  5. 记一个线上问题,selectById查询id出现两条数据问题

    查询selectById(),查询1529665444035670017(Long)结果出现两条数据: id:1529665444035670017,和id:1529665444035670018 调 ...

  6. NodeJs 版本管理

    nvm-windows 说明:nvm是Nodejs的版本管理器.在开发中项目可能需要低版本或者高版本的Nodejs运行环境,以此我们可以使用nvm来切换Nodejs的版本. 在安装NVM for Wi ...

  7. superset连接mysql数据

    目前superset的官网没给出windows的安装教程,但是实际操作是可以的,网上有很多教程,再次就不赘述! 本篇随笔是介绍superset如何连接mysql数据源,本人踩坑踩了一整天.=_= ~~ ...

  8. 解析极限编程-拥抱变化_V2

    作者:Kent Beck 第一章 极限编程定义 XP(极限编程):extreme programming,适用于中小型团队在需求不明确或迅速变化的情况下进行软件开发的轻量级方法学. 第二章 学习开车 ...

  9. 马志强:语音识别技术研究进展和应用落地分享丨RTC Dev Meetup

    本文内容源自「RTC Dev Meetup 丨语音处理在实时互动领域的技术实践和应用]的演讲分享,分享讲师为寰语科技语音识别研究主管马志强. 01 语音识别技术现状 1.语音成为万物互联时代人机交互关 ...

  10. ElasticSearch 实现分词全文检索 - 聚合查询 cardinality

    目录 ElasticSearch 实现分词全文检索 - 概述 ElasticSearch 实现分词全文检索 - ES.Kibana.IK安装 ElasticSearch 实现分词全文检索 - Rest ...