#c_sharp #net #directx #gdi #gdi+
Допустим, имеется задача преобразовать N картинок из одного формата в другой, с последующей сменой размера картинок, уменьшение качества картинок и т п вещи. Имеется ПК с Core i5 и видеокарта, которая поддерживает DirectX 9 с 512 МБ ОЗУ. Интересует следующее: Выполнится конвертирование через DirectX быстрее, чем через GDI+ ? Предоставляет ли .NET какие-то обертки над DirectX, похожие на GDI+ по юзабельности? Я знаю, что WPF использует для отрисовки аппаратное ускорение. Можно ли воспользоваться какими-то его примитивами. Какой подход используется в популярных пакетных конвертировщиках? Они используют GDI+ или пишут свое более быстрое решение, которое не использует GDI+(Т.е опять же CPU зависимые) или используют аппаратные возможности?
Ответы
Ответ 1
По сути я могу ошибаться, но скажу следующее: Приходилось работать с изображениями, с их генерацией, и в наследие доставался код на WinForms (с отрисовкой на GDI+), из которого сразу было решено выпилить любое упоминание WinForms и сделать всё это на том, что есть в WPF. 1) Работать стало быстрее, а если еще, как вы говорите конвертацию - сделайте её в пуле потоков Parallel.ForEach(); Тогда вообще будет очень хорошо. Только про потокобезопасность не забывайте. 2) Да, представляет. Может не в таком обилии как GDI+, но стоит разобраться и вам этого достаточно будет. Можно дополнить сторонними библиотеками на крайний случай. 3) Они используют как и CPU, так и GPU. Вообще использованием ресурсов занимается сам DX и пиковой производительности добиваются их совместным использованием. PS. Если я в чём-то не прав, то критика приветствуется.Ответ 2
Как раз таки, DirectX использует аппаратное ускорение, у GDI с этим проблемы. .NET с шарпом имеют SharpDX - это как раз что то вроде обертки над DirectX, юзать не сказать что удобно, но в сравнении с тем же на Си++ разница чувствуется.
Комментариев нет:
Отправить комментарий