在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. 帝国CMS 登录后跳转ecmsadmin.php 白页 多个解决方案

    帝国CMS 6.6 版本, 运维的网站查询除了问题, 把网站数据库和整体网站拷贝到本地服务器, 配置好 e/config/config.php    和 e/class/config.php 两个目录 ...

  2. spring下的restTemplate使用

    首先上配置,由于restTemplate不支持一些返回格式,所以需要自己手动配置 /** * @Description : restTemplate配置类 * @Author : wzkris * @ ...

  3. sql server 索引检测

    -- 声明表变量 DECLARE @userTable TABLE (table_name NVARCHAR(20)); -- 将源表中的数据插入到表变量中 INSERT INTO @userTabl ...

  4. webservice学习随笔(一):简单的webservice实例

    一.webService概念简单介绍: 简单来说,webservice就是远程调用技术,也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的 ...

  5. spring事务不生效8种原因

    1.数据库引擎不支持事务 这里以 MySQL 为例,其 MyISAM 引擎是不支持事务操作的,InnoDB 才是支持事务的引擎,一般要支持事务都会使用 InnoDB. 根据 MySQL 的官方文档: ...

  6. egret 图片跨域

    //图片跨域 egret.ImageLoader.crossOrigin = "anonymous";

  7. opengauss集群安装报错

    DB_VERSION:opengauss 3.0.3 1.[GAUSS-51632] [GAUSS-51632] : Failed to do gs_sshexkey.Error: Please en ...

  8. windows2003 DHCP服务器配置

    一.导入光驱 二.安装可选的windows组件 三.双击打开网路服务,安装DHCP/DNS服务器. 注:服务器地址要固定,因此安装时要规划好网络. 四.ip地址范围规划时要预留i出一些p地址.排除ip ...

  9. pytorch的dataset与dataloader解析

    整理一下pytorch获取的流程: 创建Dataset对象 创建DataLoader对象,装载有dataset对象 循环DataLoader对象,DataLoader.__iter__返回的是Data ...

  10. Unity JobSystem使用及技巧

    什么是JobSystem 并行编程 在游戏开发过程中我们经常会遇到要处理大量数据计算的需求,因此为了充分发挥硬件的多核性能,我们会需要用到并行编程,多线程编程也是并行编程的一种. 线程是在进程内的,是 ...