【问题标题】:iOS get intersection pixels between a UIBezierPath and an imageiOS 获取 UIBezierPath 和图像之间的交叉像素
【发布时间】:2017-03-02 13:49:11
【问题描述】:

我正在使用Swift 3.0 实现一个用于着色的应用程序。我从UIImageView 获得CGContext 并在UITouch 事件方法中在其上方绘制UIBezierPath - 开始、移动和结束-。

如何获取上下文图像和绘制的路径之间的交叉像素?我需要获取所有像素,而不仅仅是路径的控制点。

【问题讨论】:

  • 你能添加你的代码和截图吗?
  • 该技术将类似于此处给出的技术:robnapier.net/clipping-cgrect-cgpath。在这种情况下,您需要包括混合。将您的图像绘制到灰度上下文中。遍历上下文并制作任何不是黑色的像素,纯白色。然后用混合绘制黑色曲线。然后遍历并找到任何不是完全白色或完全黑色的像素。这些是重叠。我现在无法在 Swift 中为此编写代码,但它应该能让你走上正轨。

标签: ios swift uibezierpath cgcontext


【解决方案1】:

我假设您正在平滑贝塞尔路径并在用户绘制时添加曲线,而不仅仅是使用线段?否则你可以只计算每个接触点之间的直线上的点。

如果您在 UIBezierPath 中使用弯曲元素,那么您可以使用我的库 ClippingBezier 获取沿该路径的点。代码看起来像:

for(NSInteger px = 0; px < [userDrawnPath length]; px++){
  CGPoint pointAlongPath = [[userDrawnPath bezierPathByTrimmingToLength:px] lastPoint];
}

它很快,但您可能应该在用户绘制时缓存结果,这样您就不会在每次用户添加新的触摸点时重新计算每个像素。

【讨论】:

    猜你喜欢
    • 2020-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    相关资源
    最近更新 更多