문제

Inkcanvas와 함께 사용자 정의 브러시를 사용하고 싶습니다.

그것들은 MSDN의 코드 스 니펫입니다. (http://msdn.microsoft.com/en-us/library/ms747347.aspx)

해당 코드를 사용하고 마우스를 매우 빨리 움직이면 브러시 (엘립스) 사이에 공간이 생깁니다.Screenshot

그리고 내 질문은 물론 이것을 고치는 방법이지만 왜 이런 일이 일어나고 있는지 궁금합니다.

코드를 읽을 때 알아 차린 작은 것은 CustomStroke 클래스 에서이 주석이었습니다.

// Draw linear gradient ellipses between
// all the StylusPoints in the Stroke

지점뿐만 아니라 포인트 사이에 타원을 그려야하는 것처럼 보입니다.

C#.net을 사용하고 있습니다.

간단히 말하면 :

  • 왜 이런 일이 일어나고 있습니까?
  • 고칠 수 있도록 도와주세요 :)
도움이 되었습니까?

해결책

왜 이런 일이 일어나고 있는지

예제의 사용자 정의 잉크 칸바는 수집 된 모든 스트로크 포인트에서 타원을 그립니다. 표준 인크칸 바스 제어는 주어진 포인트 사이에 선을 그려서 구현됩니다. 그렇기 때문에 예제의 커스텀 잉크 캔버스 구현이 간격을 남기고 내장 된 것은 그렇지 않습니다.

"고정"하는 방법

사용자 정의 코드는 쉽게 틈을 떠나지 않도록 쉽게 확장 될 수 있습니다. 각 지점에서 타원을 그리는 것 외에도 각 지점 쌍 사이에 선을 그릴 수 있습니다.

연결 라인을 그리는 코드는 코드 전에 추가 될 수 있습니다.

// Draw connecting lines
var geo = new StreamGeometry();
using(geoContext = geo.Open())
{
  geoContext.StartFigure(stylusPoints[0], false, false);
  geoContext.PolyLineTo(stylusPoints.Skip(1).Cast<Point>(), true, false);
}
drawingContext.DrawGeometry(null, connectingLinePen, geo);

// Draw ellipses
for(int i = 1; i < stylusPoints.Count; i++)
{
  ... etc ...

이 코드는 Polyline Streamgeometry를 구성한 다음 컨텍스트로 그려서 작동합니다. 이 맥락에서 StreamGeometry를 사용하는 것은 일반적으로 폴리 라인으로 PathGeometry를 생성하거나 DrawingCanvas에서 직접 드로클 라인 호출을 직접 수행하는 것보다 더 효율적입니다.

참고 : 더 나은 디지타이저를 사용하면 기본 문제를 해결하지 못합니다. 즉, 사용자 정의 잉크 캔버스는 실제로 샘플링 된 지점에서 데이터 만 표시하도록 설계되었습니다.

다른 팁

이런 일이 발생하는 이유 : WPF Inkcanvas 컨트롤은 마우스를 사용할 때 초당 제한된 수의 입력을 가지고 있습니다. 즉, 마우스를 더 빠르고 빠르게 움직일 때 스타일러스 입력이 그들 사이에 더 크고 먼 거리를 갖습니다. 샘플 자체는 포인트 사이가 아닌 모든 스타일러스 입력 지점에서 엘립스를 그리는 것으로 보입니다.

이것을 해결하는 방법 : 태블릿 PC 사용 - 태블릿 PC와 같은 디지털화기는 초당 훨씬 더 많은 수의 입력을 가지므로 접시가 더 어려워 지거나 공백을 채우기가 더 어렵습니다. 베 지어 곡선.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top