自InkCanvas(MSDN代码示例无法正常工作)(Custom InkCanvas (MSDN

2019-10-17 13:59发布

我想使用自定义画笔与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。

同样是在短:

  • 这究竟是为什么
  • 帮我解决吧:)

Answer 1:

为什么会发生

例子中的自定义InkCanvas绘制每收集StrokePoint椭圆,但没有试图在它们之间画线。 标准InkCanvas控制是通过绘制它被赋予点之间的线来实现。 这就是为什么从例如自定义InkCanvas执行留下空白,内置一个没有。

如何“修理”它

自定义代码可以容易地扩展到不留空隙:除了在每个点绘制椭圆,它可以绘制每对点之间的线。

代码绘制连接线可能会在代码前加上绘制椭圆形,就像这样:

// 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 ...

此代码通过构建折线StreamGeometry,然后将其绘制的上下文。 在这种情况下使用StreamGeometry一般比创建一个带有折线一个的PathGeometry或做一堆的DrawLine的更有效的直接在drawingCanvas调用。

注意:使用数字化仪更好解决不了根本问题,这是自定义InkCanvas是在采样点实际上被设计为只显示数据,而不是在两者之间。



Answer 2:

ReDAeR看这个http://msdn.microsoft.com/en-us/library/bb531278.aspx



Answer 3:

为什么发生这种情况:使用鼠标时,WPF InkCanvas控制具有每秒输入的有限数量; 这意味着你的手写笔投入将让他们之间越来越大的距离你移动鼠标的速度越来越快。 样品本身会出现在每一个触笔输入点绘制省略号,而不是点之间。

如何解决这个问题:使用平板电脑 - 数字转换器,例如在平板电脑具有高得多的数量每秒的输入,从而更难以遇到,或填补空白 - 基本估计基于先前的点,也许是贝塞尔曲线。



文章来源: Custom InkCanvas (MSDN Code Sample not working properly)
标签: c# wpf inkcanvas