Direct2D vs GDI+

Как известно, начиная с Windows 7, Microsoft ввела новый API для 2D графики в нативных приложениях. Им стал - DirectX 2D (D2D). Старые API были объявлены устаревшими, они будут поддерживаться но не будут разиваться. Кроме того, даже старый добрый GDI был лишён аппаратной поддержки и все отрисовка с его использованием перекочевала на буфера в системной видеопамяти - плата за переход Windows на новый движок рендеринга изображения на основе 3D технологий с полной виртуализацией видеопамяти. D2D унаследовал стиль программирование от объектной оболочки С++ для GDI+ но при этом легче не стал. Вернее, требование увязать D2D с нижележащим D3D привело к некоему усложнению в API.

Но самым главным недостатком стало отсутствие возможности ренедерировать изображение на DC принтера! Грубо говоря - вы не можете печатать графику на DC принтера при помощи D2D. Вот так вот! Единственное решение, которое предлагалось до недавнего времени:

  • Создать DIB.
  • На его основе создать Memory DC.
  • При помощи D2D отрисовать все необходимое не него.
  • Распечатать полученный растровый буфер на принтер.

Естественно такая распечатанная картинка будет выглядеть как из ж... (одного места) и сильно смахивать на печать при помощи матричного устройства. А все потому, что ни шрифты, ни линии, ни эллипсы или другие примитивы не будут нести и следа векторности - все будет РАСТР, со всеми его недостатками.

Только в Windows 8.1 в систему внесен D2D рендерер способный выводить графику на принтерное DC. А как же быть пользователям на Windows 7|8 ?

Ну, либо мирится с ужасной печатью, либо программист обязан выводить 2D графику на принтер другим механизмом и единственный близкий по API и идеологии остается забытый GDI+, он умеет все тоже что и D2D + умеет печатать без проблем даже на old style Windows XP, но лишен аппаратной поддержки как и GDI, из-за чего - очень тормознут.

Выбор за вами :)

P.S.: Есть правда еще один вариант - собственный движок 2D графики: для экранной отрисовки он использует D2D, а для печати комбинацию из GDI и GDI+. Выгода во всем, осталось дело за малым - реализация этого монстра.

profile for 23W on Stack Exchange, a network of free, community-driven Q&A sites Google+