我正在用Qt-5.8/PyQt5 5为苹果铅笔开发一个图表应用程序,并试图使铅笔笔画像我看到的其他一些应用程序一样流畅,即Notability和PDF专家。我修补了Qt-5.8以提供对苹果提供的浮点合并和预测UITouch数据的快速访问,我的应用程序代码是快速和响应性的,但是代码行仍然很紧张(见屏幕截图):


卓越和PDF专家都生产线,以保持他们的清晰度在不同的动物园,这表明,他们可能是矢量化的。
有人建议把我的画修平吗?我已经在绘制视网膜分辨率,并使用同样的250赫兹苹果铅笔数据。有没有一种数学技巧来平滑一系列的点,或者其他的技巧呢?
发布于 2017-03-19 19:17:12
注意,应用程序通常会将绘图作为矢量存储和绘制,这就是为什么它们是平滑的。它还使一些酷的功能,如能够选择和移动文本周围,改变其颜色和风格,它也是非常有效的存储,可以缩放或不损失分辨率,相比光栅绘画。
在一些应用程序中,甚至有一个两步的过程,在绘制一个特定的字形时进行初始平滑,而另一个过程是在您举起笔并认为字形完成之后发生的。
另一方面,你的代码看起来很粗糙。有许多方法可以简化输入点,从非常简单到非常复杂。
在您的情况下,您可以尝试的是相当简单的,并应该工作良好的使用类型,您的目标。
随着笔的移动,您需要继续处理每一笔/字形,而不是将每一个中间位置添加到笔画控制点,而只是添加高于某一阈值的当前角度/方向的点。它在概念上非常类似于Ramer-Douglas-Peucker算法,但是您没有将它应用于预先存在的数据点,而是在创建点时应用它,这样做更有效率,也更适合用户体验。
当你放下屏幕上的笔时,你的第一个数据点就被创建了。然后你开始移动笔。现在你有了第二个点,所以你加上它,还算出两点形成的线的角度,或者笔的方向。然后,当你进一步移动笔,你有第三个点,你检查第二个点,如果角度差异不超过阈值,而是添加第三个点,你修改,把第二个点延伸到那个位置,有效地消除了一个多余的点。因此,你只会创建点的偏差,足以形成粗糙的形状线,并跳过所有微小的变化,造成你的紧张的线条。
这只是第一步,这将留给你一个简化的,但面线。如果你直接画它,它看起来不是光滑的曲线,而是一系列的线段。第二步是点插值,可能常规的老三次插值会做得很好。然后,通过在每组3点之间进行插值,得到每个实际位置,并在每个刷间距阈值处绘制笔刷。在插补位置时,也要在定义当前绘制段的两个点之间插入笔刷压力,这一点必须与每个曲线定义点一起存储。压力插值本身就像线性插值一样简单。
发布于 2019-04-03 19:07:24
在对输入实现平滑/优化筛选之前,请确保调用了适当的API以获得最佳可用数据。
如果您从touch.location(in: view)请求数据,样本将被离散化(四舍五入)到像素网格。
如果您从touch.preciseLocation(in: view)请求数据,则示例不会四舍五入。它们将包括像素之间的小数间距,这对于手头的任务至关重要。


https://stackoverflow.com/questions/42889699
复制相似问题