在显示设备上同时显示静态字和动态字的系统与方法与流程

文档序号:12665892阅读:163来源:国知局
在显示设备上同时显示静态字和动态字的系统与方法与流程

本发明涉及在显示设备上同时显示静态字和动态字的系统与方法。



背景技术:
:

在中国最早出现印刷术的早期,使用的是雕版印刷,也就是“匠人”在一整块木板上雕刻出所有字模,后来发现此种方法存在废品率居高,效率低下,成本过高等缺陷,以后自然就发明了泥活字印刷,把很多的泥活字模放在一个架子上,并且能够重复使用,这样就形成了最早的字库。

近代工业革命中印刷业出现了铅字铸造机,更加适合高效率,大规模的生产。

自从上世纪八十年代,汉字激光照排技术的出现使得字库实现了数字化,人工拣字变为鼠标键盘和输入法拣字。伴随着激光照排技术的出现也使得个人风格化字体成为可能,使人耳目一新,出现了舒同体,显仁体,静蕾体等,

但是,自从雕版印刷的结束,到以上各种字库的出现,都标志着同一种字库中的同一个字在多次调用时字形也是千篇一律的,从此,作为大规模生产付出的代价,印刷业缺失了手写字迹的多样性和个性化,所以,传统现代字库属于“静态字库”的范畴,它是制式化重复生产的产品,现在已经落后于信息化时代人们追求多样化,个性化精神享受的主题。

“个人风格化动态字库”的出现则是早期雕版印刷时代字迹多样性和个性化的历史回归,它能够达到真人现场书写的效果,使得书法艺术欣赏直接被应用到人们日常生活当中,不仅在艺术和美学、活泼与趣味性方面比目前只显示静态字的方式有质的提升,而且对继续发扬书法艺术也将起到巨大的推动作用。它能够有效地把信息时代个性化消费与个性化制造的趋势联系起来,并促进媒体融合发展,使得阅读与欣赏达到完美的统一。

正如中国发明专利201110287823.3的文献中提出了一种生成动态字的方法,通过计算机人工智能和虚拟现实等技术对书写者运笔习惯自动学习,达到仿真人写字的目的,既把书法家写字的风格数字化地保留下来,又每次调用同一个字时都能够生成互不重合,富于字迹多样性的个人风格化字迹,就叫做“动态字库”

目前,在人们日常生活和工作中,在终端设备上显示文字的需求已经远远超过了在纸质文稿上的显示需求。因此,突破现有技术瓶颈,开发出在终端设备上既显示静态字又显示动态字的技术就非常迫切,这就需要设计新的方法和系统来达到这一要求。



技术实现要素:

本发明涉及一种在显示设备上同时显示静态字和动态字的方法,解决了目前静态字的显示方式无法有效地被用来同时显示静态字和动态字的问题。

为此,本发明所采用的技术方案为:

一种在显示设备上同时显示静态字和动态字的系统,由客户端-服务器架构组成;在此架构中,由服务器生成动态字或静态字的关键信息,并根据客户端的请求将所需信息发送至客户端,并在客户端的显示设备上进行显示。

该方法根据实际显示内容的需要,能够既显示静态字,也显示动态字;具体为:

a)建立一个静态字文件夹和一个动态字文件夹,分别用来存放静态字库和动态字库。

b)每一个动态字库由三个索引表和一段存储空间构成;三个索引表分别存放了每个字的分配空间,当前可显示的动态字的位置指针,以及当前可填充新动态字的位置指针;

c)利用b)中两个指针的内容,来确定是否从服务器上下载新的动态字。

进一步得的,当无法从服务器下载新的动态字的情况下随机显示已存储的动态字。

目前常用的静态字显示方法不能直接用来有效显示动态字。本发明提出的方法能够在动态字的处理时间和实时显示方面利用现有通常硬件就满足商业运行的要求,使动态字显示的快速普及成为现实。同时本发明的方法能够完全兼容传统静态字的显示,使得目前只能显示静态字的系统能够平稳过渡到同时显示静态字和动态字的系统。

附图说明:

图1是本发明的系统架构示意图;

其中”静/动态字“表示客户端与服务器之间既可以只传输静态字、或只传输动态字的相关信息,也可以静态字和动态字的相关信息都传输;

图2是本发明三个索引表的条目示意图;

图3是本发明将三个索引表合成一个后的索引条目示意图;

图4是本发明动态字的申请流程示意图;

图5是本发明动态字的显示流程示意图。

具体实施方式:

下面结合附图对本发明进一步说明。

首先对本发明涉及的一些关键概念定义如下:

显示设备:既存储显示内容又能够将存储的显示内容直接显示的系统。该显示设备包括手机、电视、电脑、3D显示系统、电影显示系统等所有能够显示文字的设备。

字:指一个没有任何表现形式的抽象字。如果用UTF-8标准码来表示,那么一个字就是一个UTF-8码。

静态字:指目前常用的显示设备上显示的字,例如楷体静态字、方正字库、微软字库等。静态字的特征是一旦设计制作完成就一成不变了,每次显示时将该字进行显示都是完全一样的(不考虑缩放)。

动态字:指类似人类手工写的字,例如某人写的字。动态字的特点是每显示一个字都需要类似人一样具体在介质上写出来或显示设备上类似手写地生成出来,这样就导致动态字几乎没有完全一样的,就像人写的字没有完全一样的。本发明中动态字及字库采用中国发明专利201110287823.3的文献中提出的生成动态字的方法生成所有的动态字,但也可以采用其它基于计算机的方法生成动态字。

由于动态字的生成机制和信息量与静态字有本质差别,使得目前显示静态字的方式不适用于动态字的显示。首先,每一个动态字的生成都可能需要一个复杂的计算过程,而许多显示设备的计算能力往往比较有限,如果此生成过程完全放在显示设备上,即使能够生成动态字,其生成和显示的速度也极有可能达不到正常应用的要求。这就需要有一种方法来满足按照正常速度显示动态字的需要。

目前静态字在显示设备上的存储方式通常是将所有的静态字库存放在某一个文件夹下,需要某个静态字时就将相应的静态字调出来直接或者处理后显示。同一个静态字在多次显示时都是完全一样的(不考虑字的缩放)。但是同一个字在每一次以动态字的形式显示出来都不是完全一致的样子。虽然在具体实现上可以将某一个动态字在出现一次后的其它合适的地方完全一致地重新复制一遍,从而达到读者几乎无法察觉的动态字效果,但这依然改变不了一个字在以动态字体形式多次出现时需要多次下载动态字的实质,而且需要下载的次数往往是根据需要而变化的。例如,在显示的某一页文字中有10个“的”字,若以动态字的形式来显示,那么这十个“的”字对应的10个动态字都不完全一样,才能达到理想的显示文字艺术效果,这就需要从服务器上申请下载10个不同的动态字“的”。虽然在后续显示动态字时可以将这10个动态字重复利用进行复制,但这只是利用了人的记忆缺陷来模拟近似所有动态字不完全相同的效果。即便如此,至少这10个动态字需要从服务器申请下载,并且随着显示内容的不断变化,需要申请下载的动态字的内容和个数都会不断变化。这种变化是目前纯静态字存储显示中没有遇到的问题,需要有新的方法来解决。

而本发明首先是将静态字和动态字的存储分开,若是要显示静态字,则按照目前通常的做法进行。这样就保证了本发明提出的方法与目前纯静态字的显示方法的完全兼容性,既能完全兼容现有静态字的显示方法,又能加入动态字的新内容。有利于新方法的推广。这一点类似于早期C++计算机语言在提出时完全兼容传统的C语言,从而帮助促进了C++快速而广泛的推广。具体如下:

一种在显示设备上同时显示静态字和动态字的系统(系统包括用于同时显示静态字和动态字的硬件和软件系统,如:某一系统的硬件包括一台服务器和一部能够与之通信的手机(可以通过Wifi或中国移动等运营商网络进行的任何一种常用通信方式)。软件系统包括按照本发明的内容用Java开发的手机端软件以及服务器端用Python和C++程序语言开发的相应软件。)由客户端-服务器架构组成;在此架构中,显示设备作为客户端,通过网络与服务器进行通信;每当客户端需要某个字(静态或动态),就通过网络向服务器发出请求,服务器根据请求信息的内容读取或生成所需字的信息,然后下传至客户端。对于静态字,如果在客户端已经存在,就不需要向服务器申请。而对于动态字,由于每次显示都要产生出现场即时书写的效果,所以通常同一个字在多次显示其动态字时需要多次向服务器发出申请。服务器负责所有静态字和动态字的存储和生成。并根据客户端的请求将所需信息发送至客户端,并在客户端的显示设备上进行显示。其中动态字的生成技术可以根据中国发明专利201110287823.3的文献中提出的生成动态字的方法生成,也可以通过其它类似的方法实现。服务器对外提供如下服务:当接收到静态字或动态字的网络申请时,如果服务器上已经存储有申请的字,就将该字下传;如果没有,就试图生成所申请的动态字,并下传;如果没有申请的静态字或无法生成申请的动态字,就下传反馈相应的通知信息。所述客户端即本发明定义中的显示设备,其功能包括三部分:一是在需要的时候向服务器发出静或动态字的申请并获取服务器的反馈;二是将静态字和动态字在本地进行组织和存储;三是根据需要将所需文字显示出来。其中第一部分的内容主要是设计客户端与服务器之间的协议。协议的设计方法比较成熟,而且第一部分功能因为比较简单,协议设计一般也不复杂,相关方法可以在例如文献(Schwartz, M., "Telecommunication Networks: Protocols, Modeling and Analysis",Prentice Hall, 1987.)中找到;第三部分功能也比较简单与成熟,该功能与目前静态字的显示没有差别。第二部分功能的实施涉及本发明的主要创新点。下面以汉字为例来描述,其它语言文字类似。

1. 开辟静态字库文件夹,其中放置所有静态字库,其组织和显示过程与目前常用的方法(例如微软字库)可以完全一样。

2. 开辟动态字库文件夹,其中放置所有动态字库。每个动态字库包含所有字对应的动态字信息。这些信息由三个索引表构成,以帮助完成动态字的下载与显示功能。这三个索引表如图2所示。第一个索引表(本发明中命名为索引表I)存放每一个字对应的动态字存储单元位置(如图2中所示1,2,...,N)。第二个索引表是一个索引指针(本发明中命名为D指针),用于指示如果当前需要显示一个动态字,该动态字需要从D指针指示的存储单元来读取。第三个索引表也是一个索引指针(本发明中命名为F指针),用于指示如果从服务器下载了一个动态字时,该动态字应该存放的存储单元号。举例来说,如果要显示一个动态字”的“,那么先在索引表I中查找到”的“字对应的存储空间,如图2中显示的存储单元1,2,...,N。然后找到D指针对应的存储单元号,将其中的动态字”的“的信息提取出来进行显示。如果需要下载一个动态字”的“,则过程类似,唯一不同的是在将D指针换成F指针,将下载的动态字”的“的信息存放到F指针指示的存储单元中。

索引表I中的信息可以是事先设计固定的内容,也可以是在文本内容显示过程中不断变化的。若是事先设计固定的内容,一般可以根据对日常汉字(其它语言类似)的统计来设计。例如,汉语文字中一般”的“字的出现比较频繁,可以留出500个动态字存储单元;而”树“字的出现频率就不那么频繁,可以留出20个存储单元。若是随着显示内容的不同而变化,可以有不同的实现方式。例如,可以对需要显示的文字内容(一篇文章,一本小说等)先进行统计,计算得到每个字的出现频率(即出现次数)f(i) (表示第i个字的出现频率)。然后就为第i个字开辟f(i)个存储单元。然后把这些存储单元的信息放入索引表I中。当然,也可以根据实际情况开辟少于或者多于f(i)的存储单元。本发明提出的索引表结构同样适用。

D指针和F指针在显示过程中也是不断变化的。以图2为例,首先,在没有动态字存入的情况下,D指针不应指向1至N中的任意一个单元(因为没有可以显示的动态字),这可以用NULL或者其它类似的内容来作为D指针指向的内容。这时F指针应该指向1,表示接下来下载的一个动态字应该存储到1号存储单元中。此后每下载一个动态字,F指针向后移动一个单元(例如从1号单元移动到2号单元,从N号单元移动到1号单元,等等。);每显示一个动态字,则D指针向后移动一个单元。一般说来,如果F指针移动后与D指针指向同一个单元,则不再需要向服务器申请新的动态字,因为N个存储单元中已经全部是等候显示的动态字;如果D指针移动后与F指针指向同一个单元,则表示存储单元中所有的动态字都已经显示过了。这时可以申请新的动态字,或者按照某种策略将存储单元中已有的动态字进行重复显示。

每一个动态字库由一片存储区和图2所示的三个索引表组成。假设汉字总数为M,每个索引表就都由M条记录条目构成,分别记录每个字对应的的存储区域、D索引和F索引。在实施中这三个索引表的内容可以合并成图3所示的结构。在此结构中,字索引号指能够唯一指示字的编号,可以是UTF-8,国标GB2312,或其它类似的编码号;起始存储单元号存放该字在存储空间中对应的动态字的起始存储地址;终止存储单元号存放该字在存储空间中对应的动态字的终止存储地址;D指针和F指针各存放一个存储地址。例如:如果起始存储单元号为0XFF00,终止存储单元号为0XFFFF,那么D指针和F指针的值分别是一个大于等于0XFF00而小于等于0XFFFF的值。

3. 索引表初始化。起始和终止单元号一旦设计好就可以不变。举一个简单的例子,如果每一个字占用10个存储单元,而该动态字库的存储区从0号存储单元开始,那么第i个字(i=0, 1, 2, ...)的起始存储单元号就是10i, 终止存储单元号就是10i+9。D指针为NULL,表示还没有可用的动态字;F指针为10i,表示接下来要申请下载的i号字对应的动态字将存储在10i号单元。

4. 动态字申请策略。动态字的申请策略根据实际应用情况有多种实施方案,但基本原则是设计一套准则,根据该准则当满足一定条件时就发出动态字申请。在设计申请动态字准则时一般需要考虑当前存储单元中可用于显示的动态字的个数A和网络状况等情况,其中A的值可以由D和F计算得到,即A=F-E。此外,可以设计一个参数S。当A < S时开始向服务器申请新的动态字。S值的选取可以是一个固定值,一般可以选S=3,表示当目前存储单元中可用于显示的动态字的个数A小于3时就开始向服务器申请新的动态字。S也可以是一个不断变化的值,例如,当网络条件比较好的时候设置S=5,而当网络条件比较差的时候设置S=3。而且,S也可以针对不同的字而不同,一种方式是让S与N(i) 成正比,其中N(i)表示第i个字的存储单元数,如图2所示。其中的比例系数在[0, 1]区间选取,一般可以定为0.5左右。

5. 将动态字存储单元看成一个循环链。如图2所示,一个动态字索引条目中的N个存储单元在使用时将被看成一个循环链,即单元N的下一个单元是单元1, 单元1的前一个单元是单元N。指针D和指针F在移动的过程中都是在此循环链上移动。例如,在图2中,指针D从单元1左移1个单元,即D-1,将到达单元N,右移1,即D+1,将到达单元2。图4和图5中的指针移动都是指在循环链上的移动。上一段中提到的A=F-E也是遵循此循环链的原则,即如果F大于等于E,则A=F-E;如果F小于E,则A=F-E+N。

6. 动态字申请流程。如图4所示,一旦动态字申请策略决定需要向服务器申请一个新的动态字,就向服务器发出申请信息,包括动态字库索引号、字索引号,还可以包括身份验证信息等其它信息。正常情况下服务器应该下传所申请的动态字。如果因为网络问题或者身份验证失败等其它问题而导致申请失败,则不进行动态字的存储。如果下传成功,则客户端将接收的新动态字存入F指针所指的存储单元,然后F指针后移一个单元。接下来判断D指针是否为空(= NULL)。如果为空,说明在下载之前已经没有可显示的动态字,那么既然已经下载了一个新的动态字,该动态字就可以用来显示,因此就将D指针指向下载前F指针所指的位置,即F-1。然后回到流程的起始处继续判断动态字申请的条件。如果D指针不为空,则直接转回到流程的起始处。

动态字的下载策略有多种。在网络通信畅通的情况下可以根据需要向服务器申请下载;在网络不畅通甚至中断的情况下,本发明提出一种随机显示的方法来继续显示文字。该方法利用人类记忆的短时性,对动态字存储单元中的内容进行随机读取来显示不同的动态字。随机序列的产生是一个比较成熟的技术,在标准的C/C++、Java等计算机语言标准库中都有相应的库函数可以调用。更全面的产生随机数的内容可以在文献Viega, J., “Practical random number generatation in software”, in Proc. 19th Annual Computer Security Applications Conference, Dec. 2003.及文献Barker E., Kelsey J., “Recommendation for Random Number Generation Using Deterministic Random Bit Generators”, NIST SP800-90A, January 2012.和其它类似文献中找到。

7. 动态字显示流程。如图5所示,当需要显示动态字的时候,首先看D指针是否为空,即存储单元中是否有尚未显示过的动态字。如果没有,则需要做相应的处理,处理方式可以是继续等待动态字的下载成功,或者随机选择一个已经显示过的动态字或者一个静态字来显示。如果D指针不为空,就调出D所指单元的动态字来进行显示,然后D指针后移一个单元。接下来判断是否还有存储的没有显示的动态字。如果没有,即D=F,则将D指针设置为空(D=NULL),然后回到流程开始处;如果有,就直接回到流程开始处。

在实施过程中,动态字申请流程和动态字显示流程可以并行执行,也可以顺序执行。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1