Jump to content

Интерфейс графического устройства

(Перенаправлено с Winprinter )
Интерфейс графического устройства в архитектуре Windows NT
Например, GDK использует GDI .

Интерфейс графического устройства ( GDI ) — это устаревший компонент Microsoft Windows, отвечающий за представление графических объектов и передачу их на устройства вывода, такие как мониторы и принтеры . Он был заменен DirectDraw API, а затем и Direct2D API. [ нужна ссылка ] Приложения Windows используют Windows API для взаимодействия с GDI для таких задач, как рисование линий и кривых, отрисовка шрифтов и обработка палитр . Подсистема USER Windows использует GDI для визуализации таких элементов пользовательского интерфейса, как рамки окон и меню. Другие системы имеют компоненты, аналогичные GDI; например: Mac OS имеет QuickDraw , а Linux и Unix имеют X Window System основной протокол .

Наиболее значительными преимуществами GDI перед более прямыми методами доступа к оборудованию, пожалуй, являются его возможности масштабирования и абстрактное представление целевых устройств. Используя GDI, можно рисовать на нескольких устройствах, таких как экран и принтер, и ожидать правильного воспроизведения в каждом случае. Эта возможность лежит в основе большинства приложений « Что видишь, то и получаешь » для Microsoft Windows.

Простые игры, не требующие быстрого графического рендеринга, могут использовать GDI. Однако GDI относительно сложно использовать для расширенной анимации, в нем отсутствует функция синхронизации с отдельными видеокадрами на видеокарте и отсутствует аппаратная растеризация для 3D. Вместо этого современные игры обычно используют DirectX , Vulkan или OpenGL .

Технические детали

[ редактировать ]

В GDI контекст устройства (DC) определяет атрибуты текста и изображений для устройства вывода, например, экрана или принтера. GDI поддерживает фактический контекст. Для генерации выходных данных требуется дескриптор контекста устройства (HDC). После генерации вывода дескриптор можно отпустить.

GDI использует алгоритм рисования линий Брезенхэма для рисования линий с псевдонимами. [1]

История версий

[ редактировать ]

Ранние версии

[ редактировать ]

GDI присутствовал в первоначальной версии Windows. Программы MS-DOS манипулировали графическим оборудованием с помощью программных прерываний (иногда через Video BIOS ) и напрямую манипулировали видеопамятью . Код, написанный таким образом, предполагает, что он является единственным пользователем видеопамяти, что не работает в многозадачной среде , такой как Windows. Журнал BYTE в декабре 1983 года обсуждал планы Microsoft по созданию системы вывода графики на принтеры и мониторы с помощью одного и того же кода в предстоящем первом выпуске Windows. [2]

В Windows 3.1x и Windows 9x GDI может использовать Bit Blit функции видеокарты . для 2D-ускорения, если установлен подходящий драйвер [3]

С появлением Windows XP GDI + дополнил GDI. GDI+ написан на C++. Он добавляет сглаженную 2D-графику, координаты с плавающей запятой, градиентную заливку, более сложное управление путями, внутреннюю поддержку современных форматов графических файлов, таких как JPEG и PNG , а также поддержку композиции аффинных преобразований в конвейере 2D-представлений. GDI+ использует значения RGBA для представления цвета. Использование этих функций очевидно в компонентах Windows XP, таких как Microsoft Paint , средство просмотра изображений и факсов Windows , мастер печати фотографий и заставка слайд-шоу «Мои рисунки». Их присутствие в базовом графическом слое значительно упрощает реализацию систем векторной графики, таких как Adobe Flash или SVG . Кроме того, .NET Framework предоставляет управляемый интерфейс для GDI+ через System.Drawing пространство имен .

Хотя GDI+ входит в состав Windows XP и более поздних версий, динамическую библиотеку GDI+ также можно поставлять с приложением и использовать в более старых версиях Windows. [4]

Благодаря дополнительным возможностям обработки текста и независимости от разрешения в GDI+, рендеринг текста выполняет ЦП. [5] Результат на порядок медленнее, чем у GDI с аппаратным ускорением . [6] Крис Джексон опубликовал несколько тестов, показавших, что написанный им фрагмент кода рендеринга текста может отображать 99 000 глифов в секунду в GDI, но тот же код, использующий GDI+, отображает 16 600 глифов в секунду.

GDI+ похож (по назначению и структуре) на Apple подсистему QuickDraw GX с открытым исходным кодом , а также на библиотеки libart и Cairo .

Windows Виста

[ редактировать ]

В Windows Vista все приложения Windows, включая приложения GDI и GDI+, работают в новом механизме композитинга Desktop Window Manager (DWM) с аппаратным ускорением. Таким образом, сам GDI больше не имеет аппаратного ускорения. [7] [8] [9] Из-за характера операций композиции перемещение окон может происходить быстрее и быстрее, поскольку базовый контент не требует повторной визуализации приложения. [8]

Windows 7 включает аппаратное ускорение GDI для операций копирования в модели драйвера дисплея Windows версии 1.1 . Это повышает производительность GDI и позволяет DWM использовать локальную видеопамять для композитинга, тем самым уменьшая объем системной памяти и повышая производительность графических операций. Большинство примитивных операций GDI по-прежнему не имеют аппаратного ускорения, в отличие от Direct2D . GDI+ по-прежнему опирается на программный рендеринг в Windows 7. [10]

GDI-принтеры

[ редактировать ]

Принтер GDI или Winprinter (аналог Winmodem ) — это принтер, предназначенный для приема вывода с главного компьютера под управлением Windows. Главный компьютер выполняет всю обработку печати: GDI отображает страницу в виде растрового изображения, которое драйвер принтера получает, обрабатывает и отправляет на связанный принтер. [11] [12] Комбинация GDI и драйвера является двунаправленной; они получают информацию от принтера, например, готов ли он к печати или нет бумаги.

Принтеры, не использующие GDI, требуют аппаратного обеспечения, встроенного ПО и памяти для рендеринга страниц, тогда как принтер GDI использует для этого главный компьютер. Однако принтер с собственным языком управления может принимать входные данные от любого устройства с подходящим драйвером, тогда как для принтера GDI требуется ПК под управлением Windows. Принтеры GDI могут быть доступны компьютерам в сети, если они подключены как общие принтеры к компьютеру, на котором установлена ​​ОС Windows. Некоторые «общие» драйверы GDI, такие как pnm2ppa были написаны; они стремятся сделать принтеры GDI совместимыми с операционными системами, отличными от Windows, такими как FreeBSD , но они не могут поддерживать все принтеры. [11]

Чтобы упростить создание драйверов для Winprinters, универсальный драйвер принтера Microsoft был создан . Это позволяет производителям принтеров писать «минидрайверы» общего описания принтера (GPD), которые описывают возможности принтера и набор команд в виде открытого текста, вместо того, чтобы заниматься разработкой драйверов режима ядра.

Microsoft отошла от этой модели печати, выпустив спецификацию Open XML Paper .

Ограничения

[ редактировать ]

Каждое окно использует объекты GDI. По мере увеличения сложности окна с появлением дополнительных функций, таких как кнопки и изображения, также увеличивается использование объектов GDI. Когда используется слишком много объектов, Windows не может больше рисовать объекты GDI, что приводит к неправильному поведению программного обеспечения, зависанию и зависанию программы. [13] Многие приложения также имеют неправильный код и не могут освободить объекты GDI после использования, что еще больше усугубляет проблему. [14] Общее количество доступных объектов GDI варьируется от одной версии Windows к другой: в Windows 9x было ограничение в 1200 объектов; Windows 2000 имеет ограничение в 16 384 объекта; и Windows XP и более поздние версии имеют настраиваемый предел (через реестр), который по умолчанию составляет 10 000 объектов на процесс (но теоретический максимум составляет 65 536 для всего сеанса). [15] [16] В Windows 8 и более поздних версиях ограничение количества объектов GDI увеличивается до 65 536 на один сеанс входа пользователя.

Более ранние версии Windows, такие как Windows 3.1 и Windows 98, включали программу Resource Meter, позволяющую пользователю отслеживать, какая часть общих системных ресурсов GDI используется. Этот счетчик ресурсов сам потреблял объекты GDI. Более поздние версии, такие как Windows 2000 и Windows XP, могут сообщать об использовании объектов GDI для каждой программы в диспетчере задач, но они не могут сообщить пользователю общую доступную емкость GDI.

Переполнение емкости GDI может повлиять на саму Windows, препятствуя открытию новых окон, отображению меню и появлению окон предупреждений. Ситуацию может быть трудно устранить, и потенциально может потребоваться принудительная перезагрузка системы, поскольку это препятствует функционированию основных системных программ. В Windows 8 и 8.1 принудительный выход из системы происходит в результате переполнения емкости GDI, а не перезагрузки.

Преемник

[ редактировать ]

Direct2D является преемником GDI и GDI+. Его брат DirectWrite заменяет Uniscribe . Они поставлялись с Windows 7 и Windows Server 2008 R2 и были доступны для Windows Vista и Windows Server 2008 (с установленным обновлением платформы). Позже Microsoft разработала Win2D , с открытым исходным кодом бесплатную GDI-подобную библиотеку классов . Целевая аудитория Win2D — разработчики, использующие C++, C# и Visual Basic.NET для разработки приложений универсальной платформы Windows . [17]

См. также

[ редактировать ]

Примечания и ссылки

[ редактировать ]
  1. ^ Стивен, Уайт; Дэвид, Коултер; Майк, Джейкобс (31 мая 2018 г.). «Сравнение аппаратного ускорения Direct2D и GDI» . Разработчик Windows . Майкрософт .
  2. ^ Батлер, Джон (декабрь 1983 г.). «Устройственно-независимый графический вывод для Microsoft Windows» . БАЙТ . п. 49 . Проверено 20 октября 2013 г.
  3. ^ https://www.dosdays.co.uk/media/cirrus_logic/CL-GD543X_Applications_and_Eratta_Book_Apr94.pdf . {{cite web}}: Отсутствует или пусто |title= ( помощь )
  4. ^ Распространяемый пакет SDK платформы: GDI+.
  5. ^ «API 2D-рисования в Windows —» . Блог разработчиков DirectX . Блоги MSDN. 12 мая 2009 года . Проверено 19 июля 2012 г.
  6. ^ Джексон, Крис. «Производительность рендеринга текста GDI и GDI+» . Семантическое созвучие Криса Джексона . Майкрософт.
  7. ^ MSDN: Сравнение аппаратного ускорения Direct2D и GDI
  8. ^ Перейти обратно: а б GDI не имеет аппаратного ускорения в Windows Vista
  9. ^ Многоуровневые окна... SW иногда работает быстрее, чем HW . Avalite в блогах MSDN.
  10. ^ Томас Олсен (29 октября 2008 г.). «Представляем API Microsoft Direct2D» .
  11. ^ Перейти обратно: а б «Общий принтер GDI» . Открыть печать . Фонд Linux . Проверено 21 июля 2021 г.
  12. ^ «Принтеры только для Windows» . Проект документации Linux . Проверено 29 октября 2019 г.
  13. ^ Статья 838283 базы знаний Microsoft — Меню настольных приложений отображаются неправильно, если процесс превышает квоту объекта GDI в Windows XP или Windows 2000 http://support.microsoft.com/kb/838283
  14. ^ Блог Microsoft Developer Network — утечка GDI в Outlook 2007 вызывает проблемы, когда использование GDI достигает 10 000 объектов http://blogs.msdn.com/rgregg/archive/2007/09/03/outlook-2007-gdi-leak-hotfix.aspx
  15. ^ Сеть разработчиков Microsoft — ограничения объектов GDI http://msdn.microsoft.com/en-us/library/ms724291(VS.85).aspx
  16. ^ Статья 894500 базы знаний Microsoft — программы .NET, разработанные в новых операционных системах NT, могут работать неправильно в более старых версиях Win 95/Win 98/Win ME из-за более низких ограничений использования GDI http://support.microsoft.com/kb/894500
  17. ^ «Вин2Д» . репозиторий Microsoft/Win2D . Майкрософт . Проверено 21 июля 2021 г. — через GitHub.com .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 70ba7cfc89c14069c7f88eae6aa216d5__1716447180
URL1:https://arc.ask3.ru/arc/aa/70/d5/70ba7cfc89c14069c7f88eae6aa216d5.html
Заголовок, (Title) документа по адресу, URL1:
Graphics Device Interface - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)