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


Интерфейс графического устройства ( GDI ) является устаревшим компонентом Microsoft Windows, ответственной за представление графических объектов и передачи их на выводы, такие как мониторы и принтеры . Это было заменено DirectDraw API, а затем Direct2D API. [ Цитация необходима ] Приложения Windows используют Windows API для взаимодействия с GDI, для таких задач, как линии рисования и кривые, визуализации шрифтов и обработки палитров . Пользовательская подсистема Windows использует GDI для отображения таких элементов пользовательского интерфейса, как оконные рамы и меню. Другие системы имеют компоненты, похожие на GDI; Например: Mac OS имеет QuickDraw , а Linux и Unix имеют системы x Window протокол ядра .
Наиболее значительными преимуществами GDI по сравнению с более прямыми методами доступа к оборудованию, возможно, являются его возможности масштабирования и абстрактное представление целевых устройств. Используя GDI, можно нарисовать на несколько устройств, таких как экран и принтер, и ожидать надлежащего воспроизведения в каждом случае. Эта возможность находится в центре большинства « То, что вы видите, это то, что вы получаете » для Microsoft Windows.
Простые игры, которые не требуют быстрой графики, могут использовать GDI. Тем не менее, GDI относительно сложно использовать для расширенной анимации, не имеет представления о синхронизации с отдельными видео кадрами в видеокарте , и ему не хватает оборудования для 3D. Вместо этого современные игры обычно используют DirectX , Vulkan или OpenGL .
Технические детали
[ редактировать ]В GDI контекст устройства (DC) определяет атрибуты текста и изображений для устройства вывода, например, экрана или принтера. GDI поддерживает фактический контекст. Генерация вывода требует ручки в контексте устройства (HDC). После генерации вывода можно было выпустить ручку.
GDI использует алгоритм рисования линии Бресенхэма, чтобы нарисовать псевдонима. [ 1 ]
История версий
[ редактировать ]Ранние версии
[ редактировать ]GDI присутствовал в начальном выпуске Windows. Программы MS-DOS манипулировали графическим оборудованием с использованием программного обеспечения (иногда через видео BIOS ) и путем непосредственно манипулирования видео памяти . Код, написанный таким образом, ожидает, что он является единственным пользователем видео памяти, которая не была устойчивой в многозадаленной среде , такой как Windows. Журнал Byte , в декабре 1983 года, обсудил планы Microsoft о системе для вывода графики как принтерам, так и мониторам с одним и тем же кодом в предстоящем первом выпуске Windows. [ 2 ]
В Windows 3.1x и Windows 9x GDI может использовать битовые функции Blit для 2D -ускорения, если видеокарты . установлен подходящий драйвер [ 3 ]
Windows XP
[ редактировать ]С введением Windows XP GDI + дополнял GDI. GDI+был написан в C ++. Он добавляет 2D-графику с анти-альцами, координаты с плавающей точкой, затенение градиента, более сложное управление путями, внутреннюю поддержку современных форматов графики, таких как JPEG и PNG , и поддержка состава аффинных преобразований в 2D-визе. GDI+ использует значения RGBA для представления цвета. Использование этих функций очевидно в компонентах Windows XP, таких как Microsoft Paint , изображение Windows и зритель факса , мастер фотографии и заставка My Pictures Slideshow. Их присутствие в основном графическом уровне значительно упрощает реализации вектор-графических систем, таких как 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 GX GX , с открытым исходным кодом а также библиотеки Libart и Cairo .
Windows Vista
[ редактировать ]В Windows Vista все приложения Windows, включая приложения GDI и GDI+, работают в новом двигателе Compositing, Desktop Window Manager (DWM), который ускоряется в оборудовании. Таким образом, сам GDI больше не ускоряется в оборудовании. [ 7 ] [ 8 ] [ 9 ] Из-за характера операций композиции перемещения окна могут быть быстрее или более отзывчивы, поскольку базовый контент не должен быть повторно подготовлен применением. [ 8 ]
Windows 7
[ редактировать ]Windows 7 включает в себя ускорение аппаратного обеспечения GDI для операций Blitting в модели драйвера дисплея Windows v1.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) «Minidrivers», которые описывают возможности и команды принтера, установленные в явном тексту, а не для разработки драйвера режима ядра.
Microsoft отошла от этой модели печати с открытой спецификацией бумаги XML .
Ограничения
[ редактировать ]Каждое окно потребляет объекты 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, включали в себя программу счетчика ресурсов, чтобы позволить пользователю контролировать, сколько из общих системных ресурсов GDI было использовано. Этот счетчик ресурсов потреблял себя GDI. Более поздние версии, такие как Windows 2000 и Windows XP, могут сообщить об использовании объектов GDI для каждой программы в диспетчете задач, но они не могут сообщить пользователю общую емкость GDI.
Переполненная емкость GDI может повлиять на сами Windows, предотвращая открытие новых окон, отображение меню и появление блоков оповещения. Ситуация может быть трудно очистить и потенциально может потребовать принудительного сброса системы, поскольку она предотвращает функционирование основных системных программ. В Windows 8 и 8.1 принудительное отключение происходит в результате переполнения емкости GDI вместо перезагрузки.
Преемник
[ редактировать ]Direct2D является преемником GDI и GDI+. Его брат, прямой написание , заменяет Uniscribe . Они были отправлены с Windows 7 и Windows Server 2008 R2 и были доступны для Windows Vista и Windows Server 2008 (с установленным обновлением платформы). Позже, Microsoft разработала Win2d , бесплатную и открытую библиотеку GDI, подобную GDI. Целевая аудитория Win2D - разработчики, которые используют C ++, C#и Visual Basic.net для разработки универсальных приложений платформы Windows . [ 17 ]
Смотрите также
[ редактировать ]Примечания и ссылки
[ редактировать ]- ^ Стивен, белый; Дэвид, Коултер; Майк, Джейкобс (31 мая 2018 года). «Сравнение аппаратного ускорения Direct2D и GDI» . Разработчик Windows . Microsoft .
- ^ Батлер, Джон (декабрь 1983 г.). «Независимый от устройства графический выход для Microsoft Windows» . Байт п. 49 Получено 20 октября 2013 года .
- ^ https://www.dosdays.co.uk/media/cirrus_logic/CL-GD543X_Applications_and_Eratta_Book_Apr94.pdf .
{{cite web}}
: Отсутствует или пусто|title=
( помощь ) - ^ Платформа SDK перераспределяется: GDI+
- ^ «2D API -интерфейс в Windows -» . Блог DirectX Developer . Блоги MSDN. 12 мая 2009 г. Получено 19 июля 2012 года .
- ^ Джексон, Крис. «GDI против GDI+ текстовый рендеринг производительность» . Семантическая концепция Криса Джексона . Microsoft.
- ^ MSDN: Сравнение аппаратного ускорения Direct2D и GDI
- ^ Jump up to: а беременный GDI не ускорено в Windows Vista
- ^ Слоистые окна ... SW иногда быстрее HW . Авалит в блогах MSDN.
- ^ Томас Олсен (29 октября 2008 г.). «Представление Microsoft Direct2d API» .
- ^ Jump up to: а беременный «Общий принтер GDI» . Открытая печать . Фонд Linux . Получено 21 июля 2021 года .
- ^ «Принтеры только для Windows» . Проект документации Linux . Получено 29 октября 2019 года .
- ^ Microsoft Knowledgebase Статья 838283 - Меню настольных приложений неправильно отображаются, если процесс превышает квоту объекта GDI в Windows XP или в Windows 2000 http://support.microsoft.com/kb/838283
- ^ Microsoft Developer Network Blog-GDI утечка в Outlook 2007 вызывает проблемы, когда использование GDI достигает 10 000 объектов http://blogs.msdn.com/rgregg/archive/2007/09/03/outlook-2007-gdi-leak-hotfix.aspx
- ^ Microsoft Developer Network - объект GDI ограничивает http://msdn.microsoft.com/en-us/library/ms724291(vs.85).aspx
- ^ Microsoft Base Base Article 894500 - .NET Программы, разработанные на более новых операционных системах NT, могут неисправности по старой Win 95/Win 98/Win Me из -за более низких ограничений использования GDI http://support.microsoft.com/kb/89450000
- ^ "Win2d" . Microsoft/Win2d Repo . Microsoft . Получено 21 июля 2021 года - через github.com .