iOS获取UIBezierPath和图像之间的交叉点像素

问题描述:

我正在使用Swift 3.0实现着色应用。我从UIImageView获得一个CGContext,并在UITouch事件方法的上方绘制UIBezierPath - 开始,移动和结束 - 。iOS获取UIBezierPath和图像之间的交叉点像素

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

+0

你可以添加你的代码和截图吗? – Ocunidee

+0

该技术将与此处给出的技术类似:http://robnapier.net/clipping-cgrect-cgpath。在这种情况下,您需要包含混合。将您的图像绘制成灰度上下文。浏览上下文并制作任何不是黑色,纯白色的像素。然后用黑色绘制曲线,并进行混合。然后通过并找出任何不完全是白色或完全黑色的像素。这些是重叠。我现在无法在Swift中编写代码,但它应该让你走上正轨。 –

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

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

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

它速度快,但是随着用户绘制,这样你不是每一个用户增加了一个新的触摸点时间重新计算每个像素你应该缓存结果。