CN109857322B - 一种基于安卓的画笔宽度控制方法和装置 - Google Patents
一种基于安卓的画笔宽度控制方法和装置 Download PDFInfo
- Publication number
- CN109857322B CN109857322B CN201910068904.0A CN201910068904A CN109857322B CN 109857322 B CN109857322 B CN 109857322B CN 201910068904 A CN201910068904 A CN 201910068904A CN 109857322 B CN109857322 B CN 109857322B
- Authority
- CN
- China
- Prior art keywords
- brush
- width
- moving speed
- drawing point
- previous
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Abstract
本发明公开了一种基于安卓的画笔宽度实时控制方法,包括以下步骤:S1:实时捕捉并记录用户手指或触摸笔的移动距离和间隔时间;S2:计算用户手指或触摸笔的移动速度;S3:根据移动速度转换为画笔宽度;S4:使用过渡函数使笔迹平滑。本发明通过线性插值建立起速度和画笔宽度的转换模型,实现了毛笔的笔锋的变化。通过使用安卓自带的绘图API可以快速实现所需功能,更好适配移动端设备,增加代码可读性,通过线性插值建立起来的数学模型,在速度‑时间模型基础上,优化了速度与画笔宽度转化的算法,在不增加代码复杂度的情况以及计算量的前提下更好模拟出毛笔粗细不一的笔迹的变化。
Description
技术领域
本发明涉及安卓绘图领域,更具体地,涉及一种于安卓的画笔宽度控制方法和装置。
背景技术
控制安卓(Android)平台画笔粗细并使笔画更平滑已经运用到许多商业产品中,比如:各种输入法、各种字帖类软件等,同时Android自带的绘图API也可以快速实现绘制功能。然而在实际应用中,大多数书写软件写出的字迹往往粗细不明显并且显的生硬不够平滑圆润,canvas实现的绘制功能甚至无法体现笔迹的粗细变化,而使用一种相对简单廉价的方式可以解决这个限制,就是利用基于插值数学模型和用户手指移动速度实时计算绘制画笔宽度的方法。然而传统的改变画笔大小的算法主要有两种:1.基于物理模拟的毛笔生成算法,其原理是模拟毛笔参数写出字体,虽然也可以较好的模拟书法的效果,但存在计算量大,实时性差,且需要人为设置和调整复杂的参数;2.基于机器学习的样本采集生成算法,这类算法的基本思路利用机器学习大量数据样本中搜索与用户笔迹相似的样本字体,再绘制画板上,但也存在计算量大且构建神经网络及训练样本集的操作都较复杂,时间需求大。而利用移动速度实时计算绘制画笔宽度的方法可避免复杂的计算量以及人为设置和调整复杂的参数,捕获得到用户手指移动速度,并利用线性插值推导出相应公式优化转换数学模型,从而实现较好的绘制效果。
发明内容
本发明旨在至少在一定程度上解决上述技术问题。
本发明的首要目的是提供一种基于安卓的画笔宽度控制方法。
本发明的进一步目的是提供一种基于安卓的画笔宽度控制装置。
为解决上述技术问题,本发明的技术方案如下:
一种基于安卓的画笔宽度实时控制方法,包括以下步骤:
S1:实时捕捉并记录用户手指或触摸笔的移动距离和间隔时间;
S2:计算用户手指或触摸笔的移动速度;
S3:根据移动速度转换为画笔宽度。
S4:使用过渡函数使笔迹平滑;
上述方法通过实时获取手指移动距离以及移动的时间间隔计算出移动速度,通过数学分析的方法,构建出速度-笔画转换公式,获得实时笔画宽度,通过过渡公式,设置参数,调整前后笔画之间的宽度差距问题,使之更加平滑自然,有效降低计算复杂度与代码量,经过实时计算改变画笔宽度大小,模仿出毛笔粗细不一的笔迹。
优选地,步骤S1中实时捕捉并记录用户手指或触摸笔的移动距离和间隔时间包括如下步骤:
S1.1:初始化当前绘制点坐标(x0,y0)、前一绘制点坐标(x,y),均初始化为原点(0,0),判断当前绘制点是否为初始值(0,0);
S1.2:判断当前绘制点是否为初始值(0,0),即判断是否为初始绘制点;若判断为初始绘制点,执行步骤S1.3;若判断为不是初始绘制点,执行步骤S1.4;
S1.3:实时获取当前绘制点坐标(x0,y0),并将其赋值给前一绘制点坐标(x,y);利用Android的Date对象获取当前时刻t0,并将其赋值给前一时刻t,返回步骤S1.2;
S1.4:实时获取当前绘制点坐标(x0,y0),利用安卓的Date对象获取当前时刻t0,完成步骤S2、S3、S4后,并将(x0,y0)赋值给前一绘制点坐标(x,y),t0赋值给前一时刻t,返回步骤S1.2。
优选地,步骤S2计算用户手指或触摸笔的移动速度,包括以下步骤:
S2.2:计算移动距离为S时的间隔时间T:
T=t0-t
S2.3:计算移动速度V:
V=S/T。
优选地,步骤S3根据移动速度转换为画笔宽度,包括以下步骤:
S3.1:建立以移动速度V为x轴,以画笔宽度W为y轴的坐标系,令(Vmin,Wmin)表示初态,(Vmax,Wmax)表示终态,其中,Vmin为用户手指或触摸笔的最小移动速度,移动速度小于等于Vmin时,画笔宽度为最小画笔宽度Wmin并保持不变;Vmax为用户手指或触摸笔的最大移动速度,移动速度大于等于Vmax时,画笔宽度为最大画笔宽度Wmax并保持不变;
S3.2:初始化当前画笔宽度WX、前一画笔宽度WB,并将其初始化为同一的初始值,根据线性插值公式,推导得出移动速度与画笔宽度的公式,所述线性插值公式为:
该式表示过点(xa,ya)和点(xb,yb)的直线,由该式得到:
通过线性插值建立起速度和画笔宽度的转换模型,实现毛笔笔锋的变化,在速度-时间模型基础上,优化了速度与画笔宽度转化的算法,在不增加代码复杂度的情况以及计算量的前提下更好模拟毛笔粗细不一的笔迹的变化。
优选地,步骤S4使用过渡函数使笔迹平滑,包括以下步骤:
S4.1:判断画笔是否为初次设置,即判断前一画笔宽度是否等于初始值;
S4.2:若前一画笔宽度等于初始值,直接把画笔宽度设置为当前画笔宽度WX;
若前一画笔宽度不等于初始值,利用过渡公式设置画笔宽度,所述过渡公式为:
式中,Wc为平滑后的画笔宽度。
通过过渡公式的设计,使画笔宽度的变化更加平滑、自然。
优选地,步骤S3.1中Vmin=0.1,Vmax=5,Wmin=10,Wmax=70,步骤S3.2中初始值为-1。
一种基于安卓的画笔宽度计算装置,包括:
记录模块,用于实现实时捕捉记录用户手指或触摸笔移动距离和间隔时间;
计算模块,用于计算用户手指或触摸笔的移动速度;
转换模块,根据移动速度转换为画笔宽度;
过渡模块,使用过渡函数使笔迹平滑。
与现有技术相比,本发明技术方案的有益效果是:
本发明提出了一种在安卓平台运行的,基于线性插值计算和canvas类实时计算画笔宽度的方法。通过线性插值建立起速度和画笔宽度的转换模型,实现了毛笔的笔锋的变化。通过使用安卓自带的绘图API可以快速实现所需功能,更好地适配移动端设备,增加代码可读性,同时通过线性插值建立起来的数学模型,在其速度-时间模型基础上,优化了速度与画笔宽度转化的算法,在不增加代码复杂度的情况以及计算量的前提下更好模拟出毛笔粗细不一的笔迹的变化。本发明在较好兼容了移动端的同时,很好实现了书写过程的仿真。
附图说明
图1为一种基于安卓的画笔宽度控制方法流程图;
图2为实时捕捉并记录用户手指或触摸笔的移动距离和间隔时间的流程图;
图3为根据移动速度转换为画笔宽度和使用过渡函数使笔迹平滑的流程图;
图4为效果展示图;
图5为一种基于安卓的画笔宽度控制装置示意图。
具体实施方式
附图仅用于示例性说明,不能理解为对本专利的限制;
为了更好说明本实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;
对于本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。
下面结合附图和实施例对本发明的技术方案做进一步的说明。
实施例1
本实施例提供的一种基于安卓的画笔宽度控制方法,如图1,包括以下步骤:
S1:实时捕捉并记录用户手指或触摸笔的移动距离和间隔时间;
S2:计算用户手指或触摸笔的移动速度;
S3:根据移动速度转换为画笔宽度;
S4:使用过渡函数使笔迹平滑。
步骤S1中实时捕捉并记录用户手指或触摸笔的移动距离和间隔时间,如图2,包括如下步骤:
S1.1:初始化当前绘制点坐标(x0,y0)、前一绘制点坐标(x,y),均初始化为原点(0,0),判断当前绘制点是否为初始值(0,0);
S1.2:判断当前绘制点是否为初始值(0,0),即判断是否为初始绘制点;若判断为初始绘制点,执行步骤S1.3;若判断为不是初始绘制点,执行步骤S1.4;
S1.3:实时获取当前绘制点坐标(x0,y0),并将其赋值给前一绘制点坐标(x,y);利用安卓的Date对象获取当前时刻t0,并将其赋值给前一时刻t,返回步骤S1.2;
S1.4:实时获取当前绘制点坐标(x0,y0),利用Android的Date对象获取当前时刻t0,完成步骤S2、S3、S4后,并将(x0,y0)赋值给前一绘制点坐标(x,y),t0赋值给前一时刻t,返回步骤S1.2。
步骤S2计算用户手指或触摸笔的移动速度,如图3,包括以下步骤:
S2.2:计算移动距离为S时的间隔时间T:
T=t0-t
S2.3:计算移动速度V:
V=S/T。
步骤S3根据移动速度转换为画笔宽度,如图3,包括以下步骤:
S3.1:建立以移动速度V为x轴,以画笔宽度W为y轴的坐标系,令(Vmin,Wmin)表示初态,(Vmax,Wmax)表示终态,其中,Vmin为用户手指或触摸笔的最小移动速度,移动速度小于等于Vmin时,画笔宽度为最小画笔宽度Wmin并保持不变;Vmax为用户手指或触摸笔的最大移动速度,移动速度大于等于Vmax时,画笔宽度为最大画笔宽度Wmax并保持不变;
S3.2:初始化当前画笔宽度WX、前一画笔宽度WB,并将其初始化为同一的初始值,根据线性插值公式,推导得出移动速度与画笔宽度的公式,所述线性插值公式为:
该式表示过点(xa,ya)和点(xb,yb)的直线,令Vmin=0.1,Vmax=5,Wmin=10,Wmax=70,由该式得到:
步骤S4使用过渡函数使笔迹平滑,包括以下步骤:
S4.1:判断画笔是否为初次设置,即判断前一画笔宽度是否等于初始值;
S4.2:若前一画笔宽度等于初始值,直接把画笔宽度设置为当前画笔宽度WX;
若前一画笔宽度不等于初始值,利用过渡公式设置画笔宽度,所述过渡公式为:
式中,Wc为平滑后的画笔宽度。
在具体实施过程中,经本实施例实施后的实施效果图如图4所示,字体显示的效果接近毛笔笔迹,且更为自然平滑。
实施例2
本实施例提供的一种基于安卓的画笔宽度计算装置,如图5,包括:
记录模块,用于实现实时捕捉记录用户手指或触摸笔移动距离和间隔时间;
计算模块,用于计算用户手指或触摸笔的移动速度;
转换模块,根据移动速度转换为画笔宽度;
过渡模块,使用过渡函数使笔迹平滑。
相同或相似的标号对应相同或相似的部件;
附图中描述位置关系的用语仅用于示例性说明,不能理解为对本专利的限制;
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。
Claims (3)
1.一种基于安卓的画笔宽度实时控制方法,其特征在于,包括以下步骤:
S1:实时捕捉并记录用户手指或触摸笔的移动距离和间隔时间;
S2:利用移动距离和间隔时间计算用户手指或触摸笔的移动速度;
S3:根据移动速度转换为画笔宽度;
S4:使用过渡函数使笔迹平滑;
所述步骤S1中实时捕捉并记录用户手指或触摸笔的移动距离和间隔时间包括如下步骤:
S1.1:初始化当前绘制点坐标(x0,y0)、前一绘制点坐标(x,y),均初始化为原点(0,0),判断当前绘制点是否为初始值(0,0);
S1.2:判断当前绘制点是否为初始值(0,0),即判断是否为初始绘制点;若判断为初始绘制点,执行步骤S1.3;若判断为不是初始绘制点,执行步骤S1.4;
S1.3:实时获取当前绘制点坐标(x0,y0),并将其赋值给前一绘制点坐标(x,y);利用Android的Date对象获取当前时刻t0,并将其赋值给前一时刻t,返回步骤S1.2;
S1.4:实时获取当前绘制点坐标(x0,y0),利用安卓的Date对象获取当前时刻t0,完成步骤S2、S3、S4后,并将(x0,y0)赋值给前一绘制点坐标(x,y),t0赋值给前一时刻t,返回步骤S1.2;
所述步骤S3根据移动速度转换为画笔宽度,包括以下步骤:
S3.1:建立以移动速度V为x轴,以画笔宽度W为y轴的坐标系,令(Vmin,Wmin)表示初态,(Vmax,Wmax)表示终态,其中,Vmin为用户手指或触摸笔的最小移动速度,移动速度小于等于Vmin时,画笔宽度为最小画笔宽度Wmin并保持不变;Vmax为用户手指或触摸笔的最大移动速度,移动速度大于等于Vmax时,画笔宽度为最大画笔宽度Wmax并保持不变;
S3.2:初始化当前画笔宽度WX、前一画笔宽度WB,并将其初始化为同一的初始值,根据线性插值公式,推导得出移动速度与画笔宽度的公式,所述线性插值公式为:
该式表示过点(xa,ya)和点(xb,yb)的直线,由该式得到:
所述步骤S4使用过渡函数使笔迹平滑,包括以下步骤:
S4.1:判断画笔是否为初次设置,即判断前一画笔宽度是否等于初始值;
S4.2:若前一画笔宽度等于初始值,直接把画笔宽度设置为当前画笔宽度WX;
若前一画笔宽度不等于初始值,利用过渡公式设置画笔宽度,所述过渡公式为:
式中,Wc为平滑后的画笔宽度;
所述步骤S2计算用户手指或触摸笔的移动速度,包括以下步骤:
S2.2:计算移动距离为S时的间隔时间T:
T=t0-t
S2.3:计算移动速度V:
V=S/T。
2.根据权利要求1所述的基于安卓的画笔宽度实时控制 方法,其特征在于,步骤S3.1中Vmin=0.1,Vmax=5,Wmin=10,Wmax=70,步骤S3.2中初始值为-1。
3.一种基于安卓的画笔宽度计算装置,其特征在于,包括:
记录模块,用于实现实时捕捉记录用户手指或触摸笔移动距离和间隔时间;
计算模块,用于计算用户手指或触摸笔的移动速度;
转换模块,根据移动速度转换为画笔宽度;
过渡模块,使用过渡函数使笔迹平滑;
实时捕捉并记录用户手指或触摸笔的移动距离和间隔时间包括如下步骤:
S1.1:初始化当前绘制点坐标(x0,y0)、前一绘制点坐标(x,y),均初始化为原点(0,0),判断当前绘制点是否为初始值(0,0);
S1.2:判断当前绘制点是否为初始值(0,0),即判断是否为初始绘制点;若判断为初始绘制点,执行步骤S1.3;若判断为不是初始绘制点,执行步骤S1.4;
S1.3:实时获取当前绘制点坐标(x0,y0),并将其赋值给前一绘制点坐标(x,y);利用Android的Date对象获取当前时刻t0,并将其赋值给前一时刻t,返回步骤S1.2;
S1.4:实时获取当前绘制点坐标(x0,y0),利用安卓的Date对象获取当前时刻t0,完成步骤S2、S3、S4后,并将(x0,y0)赋值给前一绘制点坐标(x,y),t0赋值给前一时刻t,返回步骤S1.2;
计算用户手指或触摸笔的移动速度,包括以下步骤:
S2.2:计算移动距离为S时的间隔时间T:
T=t0-t
S2.3:计算移动速度V:
V=S/T;
根据移动速度转换为画笔宽度,包括以下步骤:
S3.1:建立以移动速度V为x轴,以画笔宽度W为y轴的坐标系,令(Vmin,Wmin)表示初态,(Vmax,Wmax)表示终态,其中,Vmin为用户手指或触摸笔的最小移动速度,移动速度小于等于Vmin时,画笔宽度为最小画笔宽度Wmin并保持不变;Vmax为用户手指或触摸笔的最大移动速度,移动速度大于等于Vmax时,画笔宽度为最大画笔宽度Wmax并保持不变;
S3.2:初始化当前画笔宽度WX、前一画笔宽度WB,并将其初始化为同一的初始值,根据线性插值公式,推导得出移动速度与画笔宽度的公式,所述线性插值公式为:
该式表示过点(xa,ya)和点(xb,yb)的直线,由该式得到:
使用过渡函数使笔迹平滑,包括以下步骤:
S4.1:判断画笔是否为初次设置,即判断前一画笔宽度是否等于初始值;
S4.2:若前一画笔宽度等于初始值,直接把画笔宽度设置为当前画笔宽度WX;
若前一画笔宽度不等于初始值,利用过渡公式设置画笔宽度,所述过渡公式为:
式中,Wc为平滑后的画笔宽度。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910068904.0A CN109857322B (zh) | 2019-01-24 | 2019-01-24 | 一种基于安卓的画笔宽度控制方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910068904.0A CN109857322B (zh) | 2019-01-24 | 2019-01-24 | 一种基于安卓的画笔宽度控制方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109857322A CN109857322A (zh) | 2019-06-07 |
CN109857322B true CN109857322B (zh) | 2021-12-31 |
Family
ID=66895947
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910068904.0A Active CN109857322B (zh) | 2019-01-24 | 2019-01-24 | 一种基于安卓的画笔宽度控制方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109857322B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110688044B (zh) * | 2019-09-30 | 2021-04-13 | 联想(北京)有限公司 | 一种输入方法及电子设备 |
US11373373B2 (en) * | 2019-10-22 | 2022-06-28 | International Business Machines Corporation | Method and system for translating air writing to an augmented reality device |
CN111127585A (zh) * | 2019-11-30 | 2020-05-08 | 四川商通实业有限公司 | 一种基于Android的绘制虚线的方法 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102157009A (zh) * | 2011-05-24 | 2011-08-17 | 中国科学院自动化研究所 | 基于运动捕获数据的三维人体骨架运动编辑方法 |
CN102937849B (zh) * | 2012-12-04 | 2015-09-23 | 上海合合信息科技发展有限公司 | 实时手写笔迹的美化方法及电子设备 |
CN102937848B (zh) * | 2012-12-04 | 2015-07-22 | 上海合合信息科技发展有限公司 | 对手写笔迹进行编辑处理的方法及电子设备 |
CN103064554A (zh) * | 2012-12-17 | 2013-04-24 | 上海海知信息技术有限公司 | 一种手写输入法的笔迹平滑处理方法及手写输入法 |
CN103310474B (zh) * | 2013-06-08 | 2016-04-06 | 深圳市经纬科技有限公司 | 一种手写原笔迹的实现方法及系统 |
CN104461315A (zh) * | 2013-09-25 | 2015-03-25 | 天津书生软件技术有限公司 | 一种实现笔锋效果的手写输入方法 |
CN103559732B (zh) * | 2013-10-15 | 2016-05-11 | 锐达互动科技股份有限公司 | 一种生成毛笔笔迹的方法 |
CN104714742B (zh) * | 2013-12-12 | 2018-07-06 | 鸿合科技股份有限公司 | 一种基于触屏的软笔实现方法及装置 |
CN103838429A (zh) * | 2014-02-14 | 2014-06-04 | 安徽科大讯飞信息科技股份有限公司 | 触摸屏上毛笔效果的绘制方法及系统 |
JP2016071819A (ja) * | 2014-10-02 | 2016-05-09 | 株式会社東芝 | 電子機器および方法 |
CN107728907B (zh) * | 2017-09-26 | 2020-03-20 | 马新禹 | 一种书写笔迹生成方法及装置 |
-
2019
- 2019-01-24 CN CN201910068904.0A patent/CN109857322B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN109857322A (zh) | 2019-06-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111381754B (zh) | 笔迹处理方法、设备及介质 | |
US8854342B2 (en) | Systems and methods for particle-based digital airbrushing | |
CN109857322B (zh) | 一种基于安卓的画笔宽度控制方法和装置 | |
US20130136377A1 (en) | Method and apparatus for beautifying handwritten input | |
CN104182718B (zh) | 一种人脸特征点定位方法及装置 | |
US8963836B2 (en) | Method and system for gesture-based human-machine interaction and computer-readable medium thereof | |
CN104345948B (zh) | 一种手写原笔迹的实现方法、实现装置及电子设备 | |
US9020266B2 (en) | Methods and devices for processing handwriting input | |
CN109933206B (zh) | 一种基于Leap Motion的手指无接触绘图方法及系统 | |
CN109407954A (zh) | 一种书写轨迹的擦除方法和系统 | |
CN104821005B (zh) | 可模拟笔势风格的汉字书法作品书写过程动态复现的方法 | |
CN109732593B (zh) | 一种机器人的远端控制方法、装置及终端设备 | |
CN109746916A (zh) | 一种机器人书写书法的方法及系统 | |
CN111142770A (zh) | 一种生成笔锋的方法及处理装置 | |
CN108628455B (zh) | 一种基于触摸屏手势识别的虚拟沙画绘制方法 | |
CN107346207B (zh) | 一种基于隐马尔科夫模型的动态手势切分识别方法 | |
CA2806149C (en) | Method and system for gesture-based human-machine interaction and computer-readable medium thereof | |
CN107391015B (zh) | 一种智能平板的控制方法、装置、设备及存储介质 | |
CN109165072A (zh) | 一种表情包生成方法及装置 | |
CN113961067B (zh) | 基于深度学习的非接触式涂鸦绘制方法与识别交互系统 | |
WO2023024536A1 (zh) | 一种绘图方法、装置、计算机设备及存储介质 | |
Li et al. | Teaching a calligraphy robot via a touch screen | |
CN110570930A (zh) | 一种基于平板电脑的医疗影像勾画方法及系统 | |
CN111444771B (zh) | 一种基于循环神经网络的手势前置实时识别方法 | |
WO2024093223A1 (zh) | 一种显示设备及笔迹显示方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |