2017-03-02 10 views
1

Swift 3.0을 사용하여 색칠하기 앱을 구현 중입니다. 나는 UIImageView에서 CGContext을 얻고 그 위에 UIBezierPath 그려 그 UITouch 이벤트 메서드 - 시작, 이동 및 종료 -.iOS는 UIBezierPath와 이미지 사이의 교차 픽셀을 얻습니다.

컨텍스트 이미지와 그려진 경로 사이의 교차 픽셀을 어떻게 얻을 수 있습니까? 모든 픽셀을 경로의 제어점뿐만 아니라 얻을해야합니다.

+0

코드를 추가하고 스크린 샷을 추가 할 수 있습니까? – Ocunidee

+0

이 기술은 http://robnapier.net/clipping-cgrect-cgpath에서 제공되는 것과 유사합니다. 이 경우 블렌딩을 포함해야합니다. 이미지를 그레이 스케일 컨텍스트로 그립니다. 컨텍스트를 살펴보고 검은 색이 아닌 모든 픽셀을 흰색으로 만듭니다. 블렌딩을 사용하여 곡선을 검은 색으로 그립니다. 그런 다음 정확히 흰색이거나 정확히 검은 색이 아닌 픽셀을 탐색하십시오. 그것들은 오버랩입니다. 스위프트에서 코드를 바로 작성할 수는 없지만 올바른 방향으로 연결해야합니다. –

답변

0

선분을 사용하는 것뿐만 아니라 베 지어 경로를 부드럽게하고 사용자가 그린대로 곡선을 추가한다고 가정합니다. 그렇지 않으면 각 터치 포인트 사이의 직선을 따라 점을 계산할 수 있습니다.

UIBezierPath에서 곡선 요소를 사용하는 경우 내 라이브러리 ClippingBezier을 사용하여 해당 경로를 따라 점을 얻을 수 있습니다. 코드는 같이 보일 것입니다 :

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

그것은 빨리,하지만 당신은 각 픽셀을 사용자가 새로운 터치 포인트를 추가 할 때마다 다시 계산하지 않을 수 있도록 사용자가 감에 따라 당신은 아마 결과를 캐시한다.