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

197
19 ноября 2018, 02:50

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

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

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

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

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

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

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

Answer 1

Если неизвестно с каким GUI работать и говорить про новые проекты, то это значит есть смысл делать проект на .NET Core и делать ставку только на кроссплатформенные библиотеки. Когда использовал кроссплатформенный подход лучше всего себя как раз и зарекомендовал System.Drawing. Для его использования нужно добавить NuGet-пакет System.Drawing.Common.

Я пробовал использовать различные альтернативы отсюда, но либо не были кроссплатформенными, содержали баги или их было не очень просто добавить проект без кучи дополнительных шагов.

По поводу возрата конкретного типа: я не совсем согласен насчёт использования типа System.Drawing.Image для конечного пользователя, я бы лучше возвращал массив байт или если это Rest API, то возвращал бы строку Base64. В целом, мне кажется достаточно возвращать любой тип, который совместим с .NET Standard.

READ ALSO
В списке using отсутствует OpenQA.Selenium.PhantomJS

В списке using отсутствует OpenQA.Selenium.PhantomJS

Хотел начать работать с PhantomJS, установил через nuget сам Selenium, SeleniumPhantomJS

183
При создании сервиса на Linux нет соединения с БД Oracle

При создании сервиса на Linux нет соединения с БД Oracle

Возникла проблема при создании сервиса(systemd) в Linux для автоматического запуска Web App: нет никаких признаков соединения с Oracle БД

203
Не обновляется таблица

Не обновляется таблица

Есть скрипт, который обновляет таблицу с ордерами на сайте каждые 3 секунды, но когда в таблице остается один ордер и его скупают, то таблица...

192
woocommerce поиск по фильтрам

woocommerce поиск по фильтрам

Ищу способы реализации вот такого фильтра, пользователь выбирает производителя, затем в зависимости от выбранного производителя подбираются...

173