2017-03-02 19 views
1

Swift 3.0を使用して着色するアプリを実装しています。私はUIImageViewからCGContextを取得し、その上にUIBezierPathを描画します。開始方法、開始方法、終了方法、終了方法はUITouchです。iOSはUIBezierPathと画像の交点のピクセルを取得します

コンテキストイメージと描画されるパスの交差ピクセルを取得するにはどうすればよいですか?私は、パスのコントロールポイントだけでなく、すべてのピクセルを取得する必要があります。

+0

コードを追加してスクリーンショットを追加できますか? – Ocunidee

+0

このテクニックは、http://robnapier.net/clipping-cgrect-cgpathに示されているものと似ています。この場合、ブレンドを含める必要があります。イメージをグレースケールのコンテキストに描画します。文脈を歩き、黒ではない純粋なピクセルを作ります。その後、ブレンドして黒で曲線を描きます。次に、正確に白でないか、または正確に黒でないピクセルを探して見つけます。それらはオーバーラップです。私はすぐにSwiftにそのコードを書くことはできませんが、それはあなたを正しい道に導くはずです。 –

答えて

0

線分を使用するだけでなく、ベジェのパスを滑らかにして、ユーザーが描画するときに曲線を追加するとしますか?そうでなければ、各タッチポイント間の直線に沿ったポイントを計算することができます。

UIBezierPathで曲線要素を使用している場合は、ライブラリClippingBezierを使用してそのパスに沿ってポイントを取得できます。コードは次のようになります。

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

それは速いですが、あなたは、各ピクセルにユーザーが新しいタッチポイントを追加するたびに再計算していないように、ユーザーが描くとして、おそらく結果をキャッシュする必要があります。

関連する問題