Custom Inkcanvas (MSDN 코드 샘플이 제대로 작동하지 않음)
문제
Inkcanvas와 함께 사용자 정의 브러시를 사용하고 싶습니다.
그것들은 MSDN의 코드 스 니펫입니다. (http://msdn.microsoft.com/en-us/library/ms747347.aspx)
해당 코드를 사용하고 마우스를 매우 빨리 움직이면 브러시 (엘립스) 사이에 공간이 생깁니다.
그리고 내 질문은 물론 이것을 고치는 방법이지만 왜 이런 일이 일어나고 있는지 궁금합니다.
코드를 읽을 때 알아 차린 작은 것은 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에서 직접 드로클 라인 호출을 직접 수행하는 것보다 더 효율적입니다.
참고 : 더 나은 디지타이저를 사용하면 기본 문제를 해결하지 못합니다. 즉, 사용자 정의 잉크 캔버스는 실제로 샘플링 된 지점에서 데이터 만 표시하도록 설계되었습니다.
다른 팁
Redaer는 이것을 봅니다http://msdn.microsoft.com/en-us/library/bb531278.aspx
이런 일이 발생하는 이유 : WPF Inkcanvas 컨트롤은 마우스를 사용할 때 초당 제한된 수의 입력을 가지고 있습니다. 즉, 마우스를 더 빠르고 빠르게 움직일 때 스타일러스 입력이 그들 사이에 더 크고 먼 거리를 갖습니다. 샘플 자체는 포인트 사이가 아닌 모든 스타일러스 입력 지점에서 엘립스를 그리는 것으로 보입니다.
이것을 해결하는 방법 : 태블릿 PC 사용 - 태블릿 PC와 같은 디지털화기는 초당 훨씬 더 많은 수의 입력을 가지므로 접시가 더 어려워 지거나 공백을 채우기가 더 어렵습니다. 베 지어 곡선.