Как рисовать, создавать анимации и визуализировать данные в wpf/uwp?
Здравствуйте!
В Windows Forms есть библиотека GDI+ с различными методами для рисования, а также события OnPaint, что позволяет рисовать или визуализировать данные в desktop-приложениях.
Однако в WPF/UWP нет ни GDI+ ни событий OnPaint.
Но есть несколько вариантов рисования:
1. Использовать контролы из Windows Forms: это похоже на костыль, и возможно Microsoft откажется от Windows Forms.
2. DirectX-OpenGl: очень низкоуровнево по сравнению с GDI+, относительно трудно интегрироровать компонент на форму + минусы из первого пункта (если это элемент управления Windows Forms).
3. Добавление различных элементов(линий, фигур) в Canvas: в результате получается Canvas с коллекцией элементов, а не изображение. Как в данном случае реализовать, например, ластик?
4. InkCanvas: очень ограничен в функциональности.
Подскажите, пожалуйста, как правильно выполнять визуализацию и рисовать в desktop-приложения wpf/uwp, при этом сохранив возможность использовать другие элементы управления, или для таких задач лучше выбрать другой язык?
Возможности анимации в WPF очень богаты. Какой функционал вам требуется? Для ластика и подобного есть InkCanvas, который, конечно, ограничен но ничего не мешает вам написать свой контрол на его основе.
Вопрос слишком общий. Потрудитесь почитать документацию. Благо, у MS она великолепная. И книг тонна написана, не говоря уже о том, что наивный запрос "wpf painting" дает примеры с картинками.
Foggy Finder, есть ли примеры таких пользовательских контролов? Допустим я добавил возможность рисовать круг в своём контроле на основе InkCanvas, но как теперь заставить ластик InkCanvas стирать нарисованную фигуру?
HitGirl, храните логическое состояние (точки или ломаные), а не битмап и перерисовывайте при изменении, что касается Paint - именно по этому запросу я и нашел подходящую статью с картинками.
Толстый Лорри, допустим мне нужен инструмент "выделить" для перемещения части изображения. Концепция точек и ломанных не подходит в данном случае. Точки и ломанные больше подходят для векторных изображений, чем для растровых.
Точки и ломанные больше подходят для векторных изображений, чем для растровых.
Как вы себе представляете реализацию "фигур" в растровом рисунке, если это по определению просто матрица из пикселов (битмап)? (= Даже в Paint, пока не исчезли средства редактирования ("таскалки" у линий и фигур) хранится логическое состояние, которое можно перетаскивать отдельно от остального изображения. Когда они исчезают их отделить уже невозможно. Можно сделать Ctrl+Z, но это лишь поменяет актуальный битмап на предыдущий.
В чем проблема растеризовать точки и линии? Пройтись от начала до конца каждой ломаной с помощью LineTo. А выделение - задачка по геометрии пятого класса о попадании точки в прямоугольную область.
HitGirl, верно, по комментариям я предположил что вам нужно что-то подобное. Если хотите получить более конкретны совет - поделитесь исходным кодом и уточните что хотите реализовать.