【发布时间】:2011-06-20 12:35:23
【问题描述】:
我有一个透明的画布,我可以在上面用鼠标绘制任意折线。 大多数线条是半透明的。
现在我需要某种橡皮擦工具,即带有橡皮刷的折线,它可以沿着鼠标移动清除像素。
对于不透明的画布,我会简单地使用背景画笔,但在这种情况下它是 Color.FromArgb(0,0,0,0) 并且使用它进行绘制没有效果。
画布似乎处于某种 Alpha 混合模式,它将我在上面绘制的任何内容与已经存在的内容混合在一起,除非我将 Alpha 通道设置为 255,在这种情况下,画布上的任何内容都将被覆盖。这对我没有帮助,因为我只是想清除像素,即让它们完全透明。
有什么想法吗?
这是我正在使用的代码的主要部分:
public class WPFWindow : Window
{
private Canvas canvas = new Canvas();
private bool LDown = false;
private Polyline lines;
private PointCollection points;
public WPFWindow()
{
this.AllowsTransparency = true;
this.WindowStyle = WindowStyle.None;
this.Background = new SolidColorBrush( Color.FromArgb(50,0,0,0) );
this.Width = 500;
this.Height = 400;
this.Top = this.Left = 0;
canvas.Width = this.Width;
canvas.Height = this.Height;
canvas.Background = new SolidColorBrush( Color.FromArgb(0,0,0,0) );
this.Content = canvas;
this.MouseLeftButtonDown += new System.Windows.Input.MouseButtonEventHandler( WPFWindow_MouseLeftButtonDown );
this.MouseLeftButtonUp += new System.Windows.Input.MouseButtonEventHandler( WPFWindow_MouseLeftButtonUp );
this.MouseMove += new System.Windows.Input.MouseEventHandler( WPFWindow_MouseMove );
}
void WPFWindow_MouseMove( object sender, System.Windows.Input.MouseEventArgs e )
{
if( LDown )
{
points.Add( e.GetPosition(null) );
}
}
void WPFWindow_MouseLeftButtonUp( object sender, System.Windows.Input.MouseButtonEventArgs e )
{
LDown = false;
}
void WPFWindow_MouseLeftButtonDown( object sender, System.Windows.Input.MouseButtonEventArgs e )
{
LDown = true;
lines = new Polyline();
points = new PointCollection();
lines.Stroke = new SolidColorBrush( Color.FromArgb( 128, 180, 80, 80 ) );
lines.StrokeThickness = 20;
lines.Points = points;
points.Add( e.GetPosition(null) );
canvas.Children.Add( lines );
}
}
【问题讨论】:
-
你是如何绘制你的折线的?发布一些代码(包括当前不工作的代码)会有所帮助。
-
@Harald:您好像不小心创建了两个帐户。关注instructions given here 让版主合并您的帐户。
-
我在上面的问题中添加了代码。基本上,我需要能够像上面那样绘制折线,但作为橡皮擦工具,即清除画布上折线路径中的任何内容。