GDI + это просто слой поверх GDI или что-то новое? - PullRequest
8 голосов
/ 09 июля 2009

Когда вышел GDI +, я вспомнил всю гадость о том, как это был «новый, более быстрый, лучший» способ отображения материалов в Windows. Но каждый раз, когда я смотрел на это, мне казалось, что это действительно просто оболочка COM вокруг GDI.

Это правда? Или GDI + действительно независимая графическая библиотека, которая просто разделяет некоторые парадигмы с GDI?

Лично я не уверен, как оно могло быть независимым, но я никогда не видел определенного утверждения, так или иначе.

Ответы [ 3 ]

9 голосов
/ 09 июля 2009

GDI + построен на основе GDI и добавляет еще несколько функций. Например, в GDI + добавлена ​​поддержка прозрачности, растягивания растровых изображений сглаживания и т. Д. *

GDI + - это, в основном, объектный API, а GDI - это функция API. Большинство функций в GDI + не оптимизированы аппаратно (они обрабатываются программным обеспечением), в отличие от GDI. Например, в GDI BitBlt обрабатывается напрямую аппаратным обеспечением. GDI + растровые функции рисования не являются.

GDI + - это мощный API, но будьте осторожны с его производительностью.

GDI + доступен в C ++, COM и .NET

8 голосов
/ 09 июля 2009

GDI + не COM. GDI + имеет базовый «плоский» API, который можно вызывать из C (или любого другого языка, следовательно), и объектно-ориентированную оболочку в C ++, которая просто вызывает плоский API. В .NET (System.Drawing) и Delphi также есть обёртки, которые также просто вызывают плоский API. Он полностью отличается от GDI тем, что вы не устанавливаете объекты (ручки, кисти, шрифты) в контекст устройства, а скорее передаете их функциям рисования. Это не имеет ничего общего с GDI. Однако я не знаю, использует ли реализация GDI + GDI, но, скорее всего, нет, потому что в нем так много функций, которые просто не доступны в GDI.

К сожалению, это медленнее, чем GDI. Это очень мощный, хотя.

Как указывал decasteljau, проблемы с производительностью могут быть связаны с тем, что он не отображается аппаратно, в отличие от OpenVG или WPF. Я недавно использовал XNA из-за этого для графического приложения реального времени.

7 голосов
/ 16 января 2010

Многие функции GDI ускоряются графическим оборудованием, и некоторые подпрограммы GDI + могут использовать GDI снизу. Но большая часть GDI + не зависит от GDI.

Важным и показательным примером является рендеринг текста. В GDI + рендеринг текста выполняется полностью программно; Сглаживание, подгонка пикселей и другие эффекты выполняются без видеокарты.

alt text
(источник: microsoft.com )

Крис Джексон из Microsoft написал интересный пост в блоге, в котором рассказал о разнице в скорости между рендерингом текста в GDI и GDI + :

... мой путь к коду GDI рендерился приблизительно 99 000 символов в во-вторых, пока мой код GDI + был отрисовка примерно 16 000 глифов в секунду.

Другой пример - рисование линий. GDI + поддерживает сглаживание линий / многоугольников и кругов / эллипсов, а GDI:

alt text
(источник: microsoft.com )
alt text
(источник: microsoft.com )

alt text
(источник: microsoft.com )

...