У меня есть прозрачный холст, на котором я могу рисовать произвольные полилинии с помощью мыши.Большинство линий полупрозрачны.
Теперь мне нужен какой-то инструмент ластика, то есть ломаная линия с кистью ластика, которая позволяет очищать пиксели вдоль движения мыши.
Снепрозрачный холст Я бы просто использовал кисть фона, но в этом случае это Color.FromArgb (0,0,0,0), и рисование с этим не имеет никакого эффекта.
Кажется, что холст какой-торежима альфа-наложения, который смешивает все, что я рисую, с тем, что уже существует, если только я не установлю альфа-канал на 255, в этом случае все, что находится на холсте, будет перезаписано.Это не помогает мне, поскольку я просто хочу очистить пиксели, то есть сделать их полностью прозрачными.
Есть идеи?
Вот основная часть кода, который я использую:
</p>
<code> 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 );
}
}
</code>