Очистить пиксели в WPF Canvas - PullRequest
       5

Очистить пиксели в WPF Canvas

1 голос
/ 03 февраля 2011

У меня есть прозрачный холст, на котором я могу рисовать произвольные полилинии с помощью мыши.Большинство линий полупрозрачны.

Теперь мне нужен какой-то инструмент ластика, то есть ломаная линия с кистью ластика, которая позволяет очищать пиксели вдоль движения мыши.

Снепрозрачный холст Я бы просто использовал кисть фона, но в этом случае это 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>

Ответы [ 2 ]

2 голосов
/ 03 февраля 2011

Элемент управления WPF Canvas - это не поверхность для рисования, это «Панель», контейнер, который упорядочивает несколько других элементов управления.

Каждая полилиния, которую вы добавляете в Canvas, на самом деле является FrameworkElement (своего рода облегченный элемент управления).) и все они прорисованы по порядку (это похоже на добавление нескольких меток или элементов управления для редактирования, и никакой элемент управления не может изменить визуальное представление другого элемента управления в окне, кроме как скрыть его).

Вы можетеЕсли вы хотите создать реальное изображение, нарисуйте полилинии на изображении и отобразите это изображение, тогда вы можете говорить об очистке пикселей.

1 голос
/ 28 июня 2012

Используйте InkCanvas вместо полилиний.У него уже есть ластик

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...