Страницы

Поиск по вопросам

понедельник, 16 декабря 2019 г.

Работа с изображением через System.Windows.Media VS System.Drawing

#c_sharp #net #графика


Подскажите, каким пространством при работе с изображениями лучше пользоваться в новых
проектах?

Вроде, если смотреть поверхностно, то функциональность схожая.

Есть ли какая-то разница в производительности или за кулисами это 2 обертки над старым
добрым GDI+?

Пока я столкнулся с тем, что WPF может отображать картинки типа ImageSource, а Image
из пространства System.Drawing нужно дополнительно кастовать.

И вот собственно вопрос, а имеет смысл везде использовать System.Windows.Media или
все зависит от конечных задач и если неизвестно, с каким GUI будет работать конечная
библиотека, то лучше возвращать Image из Drawing, а сам пользователь будет его приводить
к нужному типу сам?

Вроде, как System.Drawing лежит, как отдельная независимая библиотека, в то время,
как System.Windows.Media лежит в либе WPF-фреймворка. Получается, что все таки Drawing
нужно использовать повсеместно?

Перечисления кстати, тоже дублируются между пространствами. Например, перечисление
цветов.
    


Ответы

Ответ 1



Если неизвестно с каким GUI работать и говорить про новые проекты, то это значит есть смысл делать проект на .NET Core и делать ставку только на кроссплатформенные библиотеки. Когда использовал кроссплатформенный подход лучше всего себя как раз и зарекомендовал System.Drawing. Для его использования нужно добавить NuGet-пакет System.Drawing.Common. Я пробовал использовать различные альтернативы отсюда, но либо не были кроссплатформенными, содержали баги или их было не очень просто добавить проект без кучи дополнительных шагов. По поводу возрата конкретного типа: я не совсем согласен насчёт использования типа System.Drawing.Image для конечного пользователя, я бы лучше возвращал массив байт или если это Rest API, то возвращал бы строку Base64. В целом, мне кажется достаточно возвращать любой тип, который совместим с .NET Standard.

Комментариев нет:

Отправить комментарий