У меня есть прозрачный холст, на котором я могу рисовать произвольные полилинии с помощью мыши. Большинство линий являются полупрозрачными.Очистить пиксели в WPF Canvas
Теперь мне нужен какой-то инструмент для ластиков, т. Е. Полилиния с ластикой, которая позволяет очищать пиксели вдоль движения мыши.
С непрозрачным холстом я бы просто использовал кисть для фона, но в этом случае это Color.FromArgb (0,0,0,0), а рисунок с этим не имеет эффекта.
Полотно, похоже, находится в каком-то режиме альфа-смеси, который смешивает все, что я нарисовал на нем, тем, что уже существует, если я не установил альфа-канал на 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);
}
}
Как вы рисуете свои полилинии? Проводка некоторого кода (включая материал, который в настоящее время не работает) поможет. –
@ Харальд: Похоже, вы случайно создали две учетные записи. Следуйте инструкциям [здесь] (http://meta.stackexchange.com/questions/18232/how-can-one-link-merge-combine-associate-two-accounts-users-anonymous-unregiste/73801#73801) чтобы модератор объединил ваши учетные записи. –
Я добавил код к вопросу выше. В принципе, мне нужно иметь возможность рисовать полилинии, как указано выше, но как инструмент ластик, т. Е. Очищать что-либо в пути полилинии на холсте. – Harald