inkcanvas做半透笔代码
时间: 2023-11-16 18:56:14 浏览: 36
根据提供的引用内容,半透明笔的处理需要在线条叠加时做颜色加深,具体实现可以参考以下步骤:
1. 在 InkToolbar 中添加半透明笔的按钮,并设置其透明度属性为半透明。
2. 在 InkCanvas 的 StrokeStarted 事件中,判断当前选择的笔是否为半透明笔,如果是,则将其颜色设置为半透明。
3. 在 InkCanvas 的 StrokeCollected 事件中,判断当前选择的笔是否为半透明笔,如果是,则将其颜色加深一定程度。
4. 在 InkCanvas 的 StrokeEnded 事件中,判断当前选择的笔是否为半透明笔,如果是,则将其颜色恢复为原来的颜色。
具体实现代码如下:
```
private void AddTranslucentPenButton()
{
// 添加半透明笔按钮
InkToolbarCustomPenButton translucentPenButton = new InkToolbarCustomPenButton();
translucentPenButton.Name = "TranslucentPenButton";
translucentPenButton.ToolTipText = "Translucent Pen";
translucentPenButton.ImageSource = new BitmapImage(new Uri("ms-appx:///Assets/TranslucentPen.png"));
translucentPenButton.PenTip = PenTipShape.Circle;
translucentPenButton.PenTipTransform = Matrix3x2.CreateRotation(45);
translucentPenButton.SelectedStrokeWidth = 5;
translucentPenButton.SelectedStrokeColor = Colors.Blue;
translucentPenButton.SelectedStrokeAlpha = 128;
translucentPenButton.IsSelected = false;
translucentPenButton.Click += TranslucentPenButton_Click;
// 将半透明笔按钮添加到 InkToolbar 中
InkToolbarCustomPenButton[] customButtons = { translucentPenButton };
inkToolbar.CustomPenButtons = customButtons;
}
private void TranslucentPenButton_Click(object sender, RoutedEventArgs e)
{
// 半透明笔按钮被点击时,将其设置为选择状态
InkToolbarCustomPenButton translucentPenButton = (InkToolbarCustomPenButton)sender;
translucentPenButton.IsSelected = true;
}
private void inkCanvas_StrokeStarted(InkCanvas sender, InkStrokeStartedEventArgs args)
{
// 当前选择的笔为半透明笔时,将其颜色设置为半透明
if (inkToolbar.ActiveTool.Name == "TranslucentPenButton")
{
args.DrawingAttributes.Color = Color.FromArgb(128, args.DrawingAttributes.Color.R, args.DrawingAttributes.Color.G, args.DrawingAttributes.Color.B);
}
}
private void inkCanvas_StrokeCollected(InkCanvas sender, InkStrokeCollectedEventArgs args)
{
// 当前选择的笔为半透明笔时,将其颜色加深一定程度
if (inkToolbar.ActiveTool.Name == "TranslucentPenButton")
{
args.Stroke.DrawingAttributes.Color = Color.FromArgb(192, args.Stroke.DrawingAttributes.Color.R, args.Stroke.DrawingAttributes.Color.G, args.Stroke.DrawingAttributes.Color.B);
}
}
private void inkCanvas_StrokeEnded(InkCanvas sender, InkStrokeEndedEventArgs args)
{
// 当前选择的笔为半透明笔时,将其颜色恢复为原来的颜色
if (inkToolbar.ActiveTool.Name == "TranslucentPenButton")
{
args.Stroke.DrawingAttributes.Color = Color.FromArgb(128, args.Stroke.DrawingAttributes.Color.R, args.Stroke.DrawingAttributes.Color.G, args.Stroke.DrawingAttributes.Color.B);
}
}
```