Android-原笔迹手写的探索与开发
前言
这篇文章主要是关于移动端原笔迹的开发,让平板上的手写效果达到笔迹光滑且有笔锋。
- 介绍关于原笔迹的算法思路。
- 项目github地址
算法思路分析
曲线拟合算法
利用曲线拟合算法增加虚拟的点,使得笔迹更加光滑,关于算法思想本文采用的是B样条插值算法。
采集点:获取笔输出的两个关键点a1、a2,以及a1和a2附近的几个点a3,a4;
拟合点:利用a1,a2,a3,a4计算出a1和a2之间曲线的步长,再根据步长计算出a1与a2之间所有的点,所
计算出的点即为曲线上的点;
简单图示:

梯形填充笔迹
利用梯形填充思想来实现笔锋的效果。
获取笔宽:获取到a1与a2两点笔的压力,转换成对应的宽度作为此段起点和终点的宽度d1,d2,以d1与、
d2差再除以a1与a2点之间的个数得到曲线点之间笔宽的差值,再计算出该段曲线上所有点a1,b1...bn,a2
对应的笔宽l1...ln;
计算梯形:利用曲线上相邻的点和对应的笔宽计算出梯形,利用图形模块的填充效果将梯形填充;
处理梯形连接处:对于每个梯形连接处,根据此处关键点特征区分为不做处理,画线以及画椭圆,并且
将连接处填充,即生成原笔迹效果;
简单图示:


项目地址
关于github代码地址:https://github.com/doubledouble123/Pens
手写效果展示:

总结
本文通过曲线拟合算法和梯形填充算法完成了原笔迹效果的实现,增加了平板的书写体验。
Android-原笔迹手写的探索与开发的更多相关文章
- 【原】手写一个promise
上一篇文章中,我们介绍了Promise的基本使用,在这篇文章中,我们试着自己来写一个Promise,主要是学习Promise的内部机制,学习它的编程思想. !!!备注:本文写的不好,仅供自己学习之用, ...
- 【原】手写spring async异步组件
最近在工作中使用到了spring自带的Async,主要是为了把其中耗时多.响应慢.计算复杂的业务抽取几个模块出来,并行查询.不得不说spring自带的比传统线程池提交在代码层次上看起来优雅简洁了不少 ...
- android 逆向 smali手写helloworld
编写Hello.smali文件 .class public LHelloWorld; .super Ljava/lang/Object; .method public static main([Lja ...
- 手写web框架之开发一个类加载器
ackage io.renren.common; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUti ...
- Android 手写Binder 教你理解android中的进程间通信
关于Binder,我就不解释的太多了,网上一搜资料一堆,但是估计还是很多人理解的有困难.今天就教你如何从 app层面来理解好Binder. 其实就从我们普通app开发者的角度来看,仅仅对于androi ...
- opencv 手写选择题阅卷 (四)Android端 手机应用开发
opencv 手写选择题阅卷 (四)Android 手机应用开发 在PC端把代码调通以后开始开发Android 手机应用,因为主要功能代码为C++代码,所以需要通过NDK编译,JAVA通过JNI方式调 ...
- android 开源 OCR 项目 及手写识别
http://blog.csdn.net/archfree/article/details/6023676 1)一个为Android平台,将识别由手机的相机拍摄的图像文本应用程序. http://co ...
- Android Binder机制详解:手写IPC通信
想要掌握一样东西,最好的方式就是阅读理解它的源码.想要掌握Android Binder,最好的方式就是写一个AIDL文件,然后查看其生成的代码.本文的思路也是来自于此. 简介 Binder是Andro ...
- Android+TensorFlow+CNN+MNIST 手写数字识别实现
Android+TensorFlow+CNN+MNIST 手写数字识别实现 SkySeraph 2018 Email:skyseraph00#163.com 更多精彩请直接访问SkySeraph个人站 ...
随机推荐
- oracle的事务级别
ooracle的事务级别是不提交的,如果在sql语句中插入数据,如果不提交(commit).在程序里面试读不出来数据的.长时间不用oracle竟然忘了这些东西,特此记下.方便以后查看
- zookeeper应用场景-java
声明,本文是复制别人的文章,感觉还行,原文:http://www.cnblogs.com/xymqx/p/4465610.html 本人热爱技术,跪求有好的技术文章希望大家多多分享,谢谢.... Zo ...
- MongoDB安装与配置
参考文档:MongoDB官方文档 版本:3.6.4 从版本3.6开始,MongoDB需要Windows Server 2008 R2,Windows 7或更高版本. 第一步,在下载中心下载最新版本的M ...
- PiggyMetrics windows 部署
PiggyMetrics 是springcloud的demo,其特性就不细说了,主要描述在win10下部署的坑. 官网是:https://github.com/sqshq/PiggyMetrics 官 ...
- 剑指offer(javascript实现)
1.二维数组中的查找 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. funct ...
- 译MassTransit 快速入门
给我看代码! 下面是MassTransit的功能设置. public class YourMessage { public string Text { get; set; } } public cla ...
- Java中能否利用函数参数来返回值
转自https://blog.csdn.net/da_da_xiong/article/details/70039532 我们在写代码时通常会遇到一种情况,就是我们可能希望在一个函数操作完成后返回两个 ...
- mime.go
package manager import ( "mime" "path" ) //初始化数据 func init() { if mi ...
- B20J_4027_[HEOI2015]兔子与樱花_树形DP
B20J_4027_[HEOI2015]兔子与樱花_树形DP 题意: 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编 ...
- 将texlive带的字体安装进linux系统字体库
装机之后装系统,装完系统就装texlive,然后又遇一坑,编译以前的文档竟然找不到某字体: kpathsea:make_tex: Invalid fontname `FontAwesome Regul ...