1
我正在使用Swift 3.0
實現着色應用。我從UIImageView
獲得一個CGContext
,並在UITouch
事件方法的上方繪製UIBezierPath
- 開始,移動和結束 - 。iOS獲取UIBezierPath和圖像之間的交叉點像素
如何獲取上下文圖像與繪製路徑之間的交點像素?我需要獲取所有像素,而不僅僅是路徑的控制點。
我正在使用Swift 3.0
實現着色應用。我從UIImageView
獲得一個CGContext
,並在UITouch
事件方法的上方繪製UIBezierPath
- 開始,移動和結束 - 。iOS獲取UIBezierPath和圖像之間的交叉點像素
如何獲取上下文圖像與繪製路徑之間的交點像素?我需要獲取所有像素,而不僅僅是路徑的控制點。
我假設你正在平滑bezier路徑並在用戶繪製時添加曲線,而不僅僅是使用線段?否則,您可以計算每個觸點之間沿着直線的點。
如果您在UIBezierPath中使用彎曲元素,那麼您可以使用我的庫ClippingBezier獲取沿着該路徑的點。該代碼看起來是這樣的:
for(NSInteger px = 0; px < [userDrawnPath length]; px++){
CGPoint pointAlongPath = [[userDrawnPath bezierPathByTrimmingToLength:px] lastPoint];
}
它速度快,但是隨着用戶繪製,這樣你不是每一個用戶增加了一個新的觸摸點時間重新計算每個像素你應該緩存結果。
你可以添加你的代碼和截圖嗎? – Ocunidee
該技術將與此處給出的技術類似:http://robnapier.net/clipping-cgrect-cgpath。在這種情況下,您需要包含混合。將您的圖像繪製成灰度上下文。瀏覽上下文並製作任何不是黑色,純白色的像素。然後用黑色繪製曲線,並進行混合。然後通過並找出任何不完全是白色或完全黑色的像素。這些是重疊。我現在無法在Swift中編寫代碼,但它應該讓你走上正軌。 –