Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 用苹果铅笔画画_Ios_Qt_Uikit - Fatal编程技术网

Ios 用苹果铅笔画画

Ios 用苹果铅笔画画,ios,qt,uikit,Ios,Qt,Uikit,我正在使用Qt-5.8/PyQt5为苹果铅笔开发一个绘图应用程序,并试图让铅笔笔划像我看到的其他一些应用程序一样平滑,即Notability和PDF Expert。我对Qt-5.8进行了修补,以提供对苹果提供的浮点合并和预测的UITouch数据的快速访问,我的应用程序代码快速且响应迅速,但线路仍然不稳定(参见屏幕截图): “知名度”和“PDF专家”都能在不同的缩放级别上保持线条的清晰度,这对我来说意味着它们可能是矢量化的 有人对我的画有什么建议吗?我已经在以视网膜分辨率画画了,并且使用了与它们

我正在使用Qt-5.8/PyQt5为苹果铅笔开发一个绘图应用程序,并试图让铅笔笔划像我看到的其他一些应用程序一样平滑,即Notability和PDF Expert。我对Qt-5.8进行了修补,以提供对苹果提供的浮点合并和预测的UITouch数据的快速访问,我的应用程序代码快速且响应迅速,但线路仍然不稳定(参见屏幕截图):

“知名度”和“PDF专家”都能在不同的缩放级别上保持线条的清晰度,这对我来说意味着它们可能是矢量化的


有人对我的画有什么建议吗?我已经在以视网膜分辨率画画了,并且使用了与它们相同的250Hz苹果铅笔数据。有没有一种数学技术可以平滑一系列的点,或者其他一些技巧?

记笔记的应用程序实际上倾向于将图形存储并绘制为向量,这就是为什么它们是平滑的。它还支持一些很酷的功能,比如能够选择和移动文本,更改其颜色和样式,与光栅绘制相比,它的存储效率非常高,可以在不损失分辨率的情况下放大或缩小

在某些应用程序中,甚至有两个步骤的过程,在绘制特定轮廓时进行初始平滑,在提起画笔且轮廓视为完成后进行另一个过程

另一方面,您的代码看起来非常简单。有很多方法可以简化输入点,从非常简单到难以置信的复杂

在您的情况下,您可以尝试的是非常简单的,并且应该适合您所针对的使用类型

当画笔移动时,您需要继续处理每个笔划/图示符,而不是将每个中间位置添加到笔划控制点,只添加偏离当前角度/方向超过某个阈值的点。从概念上讲,它非常类似于,但您不会将其应用于预先存在的数据点,而是在创建点时应用,这样更高效,更利于用户体验

当您在屏幕上放下笔时,将创建第一个数据点。然后你开始移动笔。现在您有了第二个点,因此您可以添加该点,但也可以计算两点形成的线的角度,或者笔的方向。然后,当您进一步移动画笔时,会有第三个点,您可以对照第二个点检查该点,如果角度差不超过阈值,则添加您修改的第三个点,以将第二个点延伸到该位置,从而有效地消除冗余点。因此,您最终只创建了偏差足够大的点,以形成线条的粗略形状,并跳过所有创建抖动线条的微小差异


这只是第一步,这将为您留下一条简化但刻面的线条。如果直接绘制,它将看起来不像平滑曲线,而是一系列线段。第二步是点插值,可能常规的旧的会做得很好。然后通过在每组3个点之间插值获得每个实际位置,并在每个笔刷间距阈值处绘制笔刷笔划。插值位置时,还可以在定义当前绘制线段的两个点之间插值笔刷压力,该压力必须与每个曲线定义点一起存储。压力插值本身可以像线性插值一样简单。

在对输入实现平滑/优化过滤器之前,请确保调用适当的API以获得最佳可用数据

如果您从
touch.location(in:view)
请求数据,样本将离散(四舍五入)到像素网格

如果您从
touch.preciseslocation(在:视图中)
请求数据,则样本将不会四舍五入。它们将包括像素之间的分数间距,这对手头的任务至关重要


如果平滑,可以使用。或者是一个更简单的平滑算法。这是一个解释和措辞都很好的答案。现在我只需要找出一种方法,通过QPainterPath改变压力的宽度。希望为每个线段绘制一个单独的路径/立方体能够足够快。它不是
QPainterPath
-你可以通过放大或缩小画笔像素图来改变宽度。路径没有宽度,如果您使用
QPen
笔划它,它将是固定宽度。Qt的绘画功能并不是真正以艺术的方式绘画。对不起,我把我的线弄错了。您正在描述一种通过足够高的“笔刷间距阈值”(brush spacing threshold)创建的连续性来平滑笔刷像素贴图的栅格化绘制的方法。只要我们进行栅格化,似乎在插值的“笔刷间距”线段之间绘制带圆边的线会更好?只是好奇。除非放大,否则它看起来可能是一样的。你也可以这样做,但没有选择使用艺术画笔,它将被限制为实线。如果你只需要这些,那就去做吧。还可以尝试分析这两种解决方案。这是一篇关于其他一些方法的很棒的论坛帖子,基本上是做应该矢量化的绘画: