Abed AlSayed Ответов: 2

WPF: Как стереть что-то на холсте?


Здравствуйте, я пытаюсь сделать ... чертежная доска tha поддерживает добавление фигур и изображений. для карандаш Я использую этот код и я не думаю что есть способ стереть его но просто пытаюсь:
            Dim lin As New Line
            lin.Stroke = New SolidColorBrush(Color.FromArgb(100, 255, 0, 0))
            lin.StrokeThickness = 5
'lastpnt is the LastPoint added to continue the drawing and it will be null on mouse_up Event
            If Not lastpnt = Nothing Then
                lin.X1 = lastpnt.X
                lin.Y1 = lastpnt.Y
                lin.X2 = position.X
                lin.Y2 = position.Y
                lastpnt.X = position.X
                lastpnt.Y = position.Y
            Else
                lin.X1 = position.X
                lin.Y1 = position.Y
                lin.X2 = position.X
                lin.Y2 = position.Y
                lastpnt.X = position.X
                lastpnt.Y = position.Y
            End If
            Canvas1.Children.Add(lin)


Я могу сделать ластик таким же, как цвет фона, но что, если задний цвет был прозрачный или был изображение ????
А теперь я прочту ... InkCanvas- исходный код пытается найти другой способ рисовать и стирать.

Примечание : Я не использовал inkcanvas из-за отсутствия поддержки добавления изображений над рисунком чернил, а затем рисования на изображении (Я не знаю, как объяснить, но это похоже на чернила и изображения zOrder)

2 Ответов

Рейтинг:
19

Sergey Alexandrovich Kryukov

Вот в чем дело: Canvas является ли родительский элемент для коллекции UIElements доступным в качестве свойства Children:
http://msdn.microsoft.com/en-us/library/system.windows.controls.panel.children.aspx[^],
http://msdn.microsoft.com/en-us/library/system.windows.controls.uielementcollection.aspx[^].

Итак, просто удалите какой-то дочерний элемент из коллекции; и он будет немедленно "стерт". Вам больше ничего не нужно делать.

—СА


Abed AlSayed

вы правы, это единственный выход. Но что, если я преобразую UIElements в растровое изображение? Каков возможный способ удаления пикселей?

Sergey Alexandrovich Kryukov

Это вполне возможно. Недавно я ответил на вопрос о том, как писать в такое растровое изображение. Стирание... более сложный, требует осмысления, но почему?
—СА

Abed AlSayed

Я буду искать в Google в 13-й раз :(
вы что-нибудь знаете о преобразовании прямоугольной области изображения в прозрачную?
Может быть, мне стоит вернуться в WinForms, тогда я больше не буду беспокоить людей этими вопросами :'(

Sergey Alexandrovich Kryukov

Я бы посоветовал вам использовать WPF, для редактора, по ряду различных причин, но, конечно, вы тот, кто решает. Все решаемо, с точки зрения графики — все; и производительность-это гораздо меньшая проблема, и нет никакой или гораздо меньшей потенциальной зависимости от наследия Windows.

"Преобразование в прозрачный"... Что ты имеешь в виду? Это всего лишь один из случаев частичного преобразования изображения. "Непрозрачный"-это просто прозрачный с максимальной непрозрачностью, то есть максимальным значением в Альфа-канале.

Если у вас есть какие-то трудности с этим, как другой вопрос, в конце концов...

—СА

Рейтинг:
1

fjdiewornncalwe

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


Sergey Alexandrovich Kryukov

То, что вы говорите, применимо к формам. Я думаю, что вы упускаете тот факт, что Canvas-это векторный элемент пользовательского интерфейса, это родительский элемент для дочернего элемента, помещенного на него. Итак, все, что вам нужно, это просто удалить одного из детей... Порядок выполняемых действий, даже если он у вас есть (например, для "отмены"), на самом деле не имеет значения...
—СА

Sergey Alexandrovich Kryukov

Я ответил на этот вопрос; пожалуйста, смотрите.
—СА