c# wpf inkcanvas 模拟笔锋
- 通过自定义变换,使用此方法画笔擦除模式为EraseByPoint时无法按点擦除(可以考虑第二种方案)
<InkCanvas x:Name="inkCanvas" Background="White" >
<InkCanvas.DefaultDrawingAttributes>
<!--<DrawingAttributes StylusTip="Ellipse" Height="8" Width="4" IgnorePressure="False" FitToCurve="True" >
--><!--
<DrawingAttributes.StylusTipTransform>
<Matrix M11="1" M12="1.5" M21="2.2" M22="1"/>
</DrawingAttributes.StylusTipTransform>
</DrawingAttributes>-->
<DrawingAttributes StylusTip="Ellipse" Height="10" Width="10" IgnorePressure="False"
FitToCurve="False">
<DrawingAttributes.StylusTipTransform>
<Matrix M11="1" M12="1.5" M21="2.2" M22="1"></Matrix>
</DrawingAttributes.StylusTipTransform>
</DrawingAttributes>
</InkCanvas.DefaultDrawingAttributes>
</InkCanvas>
- 重写inkcanvas收集笔迹的逻辑(也可以直接绑定OnStrokeCollected而不是重写inkcanvas)
public class ClearCanvas : InkCanvas
{
protected override void OnStrokeCollected(InkCanvasStrokeCollectedEventArgs e)
{
var customStroke = e.Stroke;
try
{
var stylusPoints = new StylusPointCollection();
var n = customStroke.StylusPoints.Count - 1;
var pressure = 0.1;
var x = 10;
if (n == 1) return;
if (n >= x)
{
for (var i = 0; i < n - x; i++)
{
var point = new StylusPoint();
point.PressureFactor = (float)0.5;
point.X = customStroke.StylusPoints[i].X;
point.Y = customStroke.StylusPoints[i].Y;
stylusPoints.Add(point);
}
for (var i = n - x; i <= n; i++)
{
var point = new StylusPoint();
point.PressureFactor = (float)((0.5 - pressure) * (n - i) / x + pressure);
point.X = customStroke.StylusPoints[i].X;
point.Y = customStroke.StylusPoints[i].Y;
stylusPoints.Add(point);
}
}
else
{
for (var i = 0; i <= n; i++)
{
var point = new StylusPoint();
point.PressureFactor = (float)(0.4 * (n - i) / n + pressure);
point.X = customStroke.StylusPoints[i].X;
point.Y = customStroke.StylusPoints[i].Y;
stylusPoints.Add(point);
}
}
customStroke.StylusPoints = stylusPoints;
}
catch { }
InkCanvasStrokeCollectedEventArgs args =
new InkCanvasStrokeCollectedEventArgs(customStroke);
//直接在StrokeCollected事件中处理时记得删除这一行
base.OnStrokeCollected(args);
}
}
留待后查,同时方便他人
联系我:renhanlinbsl@163.com
联系我:renhanlinbsl@163.com