Состав и назначение GDI
Графический интерфейсе GDI (Graphicс Device Interface — интерфейс графических устройств, посредством этого интерфейса Windows выводит графику на экран монитора, принтер и другие устройства. GDI избавляет программиста учитывать многие аппаратные особенности компьютеров, например, особенности различных видеокарт. Рисование, с использованием GDI, имеет как положительные так и отрицательные стороны. К положительным сторонам можно отнести переносимость программ, в том числе и на различные платформы. С дугой стороны GDI является довольно «толстой» прослойкой, поэтому программы, использующие GDI, работают медленно.
Альтернативой GDI является графические библиотеки DirectDraw, OpenGL. Это довольно тонкие прослойки между приложением и видеокартой, что существенно сказывается на скорости работы. Кроме того эти библиотеки обладает еще целым рядом достоинств по сравнению с GDI.
Некоторые предупреждения
Приложения Windows не работают непосредственно с физическими устройствами (например, с монитором или принтером). Выполняя запрос приложения (нарисовать линию или написать текст), приложение обращается к GDI, которое, в свою очередь, обращается к соответствующему драйверу, а тот, непосредственно к физическому устройству. В процессе выполнения команды GDI (или драйвер) учитывают ограничения, накладываемые соответствующим физическим устройством. Например, приложение может использовать любой из примерно 16 миллионов цветов, но если данное устройство не поддерживает такого количества цветов, то GDI будет подбирать наиболее близкие цвета, в этом случае многие нарисованные приложением линии могут оказаться одного цвета.
GDI непосредственный впрыск. Почему все так боятся иметь дело с GDI ?
Примерно такая же ситуация может сложиться и со шрифтами. Программист может описать в приложении характеристики необходимого шрифта. GDI подберет наиболее подходящий (по его мнению ) и выведет его на экран. В результате Вы получите отображение не того шрифта, который хотели бы видеть.
На первый взгляд, это может показаться неудобным моментом, тем не менее, именно так можно обеспечить полную аппаратную независимость, и освобождает пользователя от непосредственной работы с конкретным физическим устройством.
Состав и назначение GDI
GDI, с точки зрения программиста — это контекст отображения. Контекст отображения можно сравнить с листом бумаги на котором приложение рисует, а также инструментом для рисования. Инструменты для рисования — это перья, кисти (а также шрифты и целые графические изображения), с помощью которых приложение создаст необходимый рисунок. Кроме контекста отображения (листа бумаги) и инструмента для рисования, приложению доступны десятки функций программного интерфейса GDI.
Если же говорить точно, то контекст отображения является структурой данных, описывающих устройство отображения. В этой структуре хранятся различные характеристики устройства (бумаги) и набор инструментов для рисования, выбранные по умолчанию. Приложение может выбрать в контекст отображения различные инструменты (например, перья различной толщины и цвета). Поэтому, если Вам необходимо нарисовать линию красного цвета, то перед выполнением операции рисования, необходимо выбрать в контекст отображения соответствующее перо.
Функции рисования не имеют параметров, указывающих цвет и толщину линий. Такие параметры хранятсяв контексте отображения.
Приложение может создать контекст отображения не только для экрана монитора, но и для любого другою графического устройства, например, для принтера. В этом случае, оно может рисовать на принтере различные изображения, используя те же функции, что и при рисовании на экране. Можно создать контекст отображения для метафайла. Метафайл — это обычный файл на диске или в памяти, в котором хранятся последовательности команд интерфейса GDI. Приложение может выполнить вывод графической информации в метафайл, как в обычное устройство вывода, а затем «проиграть» метафайл на реальном устройстве вывода (экран монитора или принтер).
5.3 Контекст отображения и контекст устройства. Атрибуты контекста отображения.
Опишем более подробно, что такое «лист бумаги», на которой приложение рисует, то есть контекста отображения.
Может существовать два типа контекста: контекст отображения и контекст устройства,
Если приложению необходимо выполнить вывод в одно из своих окон, то оно должно получить контекст для отображения в этом окне. Такой контекст — носит название контекста отображения. С его помощью можно рисовать только в клиентской части окна.
Если же требуется выполнить вывод на экран монитора или принтер, то приложение, перед выполнением операции вывода, должно создать контекст физического устройства или просто контекст устройства (монитора или принтера).
Необходимо иметь в виду, что оба контекста представляют собой одну и ту же структуру.
Всего контекст отображения (структура) имеет 20 атрибутов. Это:
1. описание применяемой системы координат;
2. цвет графических объектов и цвет фона;
3. описание цветовой палитры (набора цветов используемых для рисования);
4. описание пера для рисования линий;
5. описание кисти для закрашивания;
6. описание области, где приложение может рисовать, или наоборот, области, в которой рисовать запрещено;
7. атрибуты, предназначенные для рисования текста (это шрифт и цвет текста, расстояние между буквами, а также цвет текста).
Когда приложение получает контекст, то все перечисленные атрибуты устанавливаются по умолчанию, но Вы можете изменить их по своему усмотрению.
5.4 Работа с контекстами
Всего существует около 10 различных контекстов отображения. Чаще всего используется общий контекст отображения.
5.4.1 Общий контекст отображения
Если обрабатывается сообщениеWM_PAINT. то для получения общего контекста отображения необходимо вызвать функцию BeginPaint, возвращающую этот контекст:
HDC BeginPalnt(
HWND hWnd, II дескриптор окна
LPPAINTSTRUCT *lрРаint II указатель на структуру для рисования );
Функция подготавливает для рисования окно, заполняя структуруPAINTSTRUCT информацией, которую можно использовать в процессе рисования.
Контекст отображения, полученный с помощью функцииBeginPaint, необходимо освободить перед завершением обработки сообщенияWM_PAINT, вызвав функциюEndPaint.
BOOL EndPaint(
HWND hWnd, II дескриптор окна
CONST PAINTSTRUCT *lpPaint II указатель на структуру для рисования );
Обработчик сообщений WM_PAINT выглядит следующим образом:
case WM_PAINT:
PAINTSTRUCT ps;
HDC hdc;
// Получаем общий контекст отображения
hdc= BeginPaint(/nwnd,
Text0ut(hdc, 10, 20, «String»,6);
// Отдаем контекст отображения EndPaint(hwnd,
Функции BeginPaint и EndPaint можно использовать только в обработчике сообщенийWM_PAINT. Если же приложению необходимо рисовать во время обработки других сообщений, то необходимо использовать функции соответственно:
HDC GetDC(
HWND hWnd //дескриптор окна
И
Int ReleaseDC(
HWND hwnd, // дескриптор окна
HDC hdc II дескриптор контекста отображения )
5.4.2 Контекст физического устройства
Нет разницы между рисованием в окне или рисование на принтере. Просто перед рисованием на принтере необходимо создать контекст принтера. Обратите внимание — контекст физического устройства не получается, а создается. С этой целью используется функцияCreateDC.
HDC CreateDC(
LPCSTR lp4:Driver, II имя драйвера
LPCSTR lps:De’ice, II имя устройства
LPCSTR 1рч:0шри1, II имя файла или порта вывода
CONST DEVMODE *lpvlnitDala II данные для инициализации принтера
Например, для создания контекста отображения струйного принтера Lexmark 1020 ColorFine 2, работающего с
драйвером wwlxru.drv и подключенного к порту LPT1, необходимо вызвать функцию CreateDC следующим образом:
hdc = CreateDC( «wwlxru», «Lexmark 1020 ColorFine 2 «, »LPT1″. NULL);
Созданный таким образом контекст устройств необходимо удалить (но не освободить) при помощи функции DeleteDC:
BOOL DeleteDC (
HDC hdc II дескриптор контекста отображения
5.4.3 Контекст для устройства DISPLAY
Что бы рисовать в любом месте экрана, необходимо создать контекст монитора:
Hdc = -CreateDC(«DISPLAY», NULL, NULL, NULL);
После использования контекста, его необходимо удалить, вызвав функциюDeleteDC.
Для монитора контекст физического устройства можно не только создать, но и получить, вызвав функцию GetDC:
Этот контекст нужно не удалять, • освобождать:
ReleaseDC( NULL, hdc );
5.4.4 Контекст для памяти
Чаще, значительно приятнее для пользователя, когда изображение рисуется в памяти, а затем быстро отображается на экране монитора.
Контекст для памяти создается совместимым с тем контекстом отображения, в котором будет выполняться вывод на физическое устройство. Для этих целей служит функция CreateCompatibleDC:
Дата добавления: 2017-01-26 ; просмотров: 1264 ; ЗАКАЗАТЬ НАПИСАНИЕ РАБОТЫ
Источник: poznayka.org
Что такое «GDI+ Window»?
По своей сути GDI+ (иначе Graphics Device Interface) представляет собой один из 3-х компонентов, который совместно с ядром, а также Windows API, образует общий пользовательский интерфейс, который мы и видим, отвечает за графику. Частенько его называют оконный менеджер GDI. Также GDI+ используется в максимально упрощенных играх, для которых шустрая графика не важна и они прибегают к возможностям GDI.
GDI — это интерфейс Windows для представления графических объектов и передачи их на устройства отображения, такие, как мониторы и принтеры.
GDI отвечает за отрисовку линий и кривых, отображение шрифтов и обработку палитры. Он не отвечает за отрисовку окон, меню и т. п., эта задача закреплена за пользовательской подсистемой, располагающейся в user32.dll и основывающейся на GDI. GDI выполняет те же функции, что и QuickDraw в Mac OS.
Видео, на котором при запуске Windows проскальзывает компонент GDI+
Источник: www.bolshoyvopros.ru
Как исправить ошибку GDI + Windows в Windows 11
Когда дело доходит до двумерной векторной графики, изображений и типографики, Windows GDI + — это та часть операционной системы, которая выполняет эту работу. Помимо введения новых функций и оптимизации существующих возможностей, интерфейс графического устройства Windows был улучшен по сравнению с предыдущей сборкой в Windows 11. Иногда GDI и приложение Windows конфликтуют, что приводит к ошибке GDI + Windows, что препятствует выключению компьютера. С этой проблемой можно столкнуться с приложениями, использующими GDI + и устанавливающими нулевую (0) ширину объекта пера на дисплеях с высоким разрешением или разрешением точек на дюйм, или с приложениями, использующими масштабирование. Следуйте инструкциям, поскольку мы покажем вам список решений сразу после того, как мы более подробно поймем, что делает GDI +.
Что делает GDI +?
Интерфейс графического устройства (GDI) был технологией, которая позволяла приложениям Windows предоставлять функциональность «то, что вы видите, то и получаете» (WYSIWYG). GDI + — это улучшенная версия графического драйвера GDI на основе C ++.
GDI — это интерфейс прикладного программирования и базовый компонент операционной системы Windows, который отвечает за представление графических объектов и их передачу на устройства вывода. С помощью графического интерфейса устройства плюс (GDI +) программисты приложений могут отображать информацию на экране или принтере, не беспокоясь о специфике возможностей этого устройства отображения. В прикладном программном обеспечении программист вызывает методы, предоставляемые классами GDI +, и эти методы, в свою очередь, выполняют соответствующие вызовы соответствующих драйверов устройств. Он также отделяет программу от графического оборудования, и именно это разделение позволяет разработчикам создавать приложения, не зависящие от графического оборудования.
Что делать, если в Windows 11 появляется ошибка GDI + Windows?
1. Запустите сканирование SFC.
- Нажмите Windows + S ключ , чтобы открыть поиск бар, затем введите CMD , и щелкните правой кнопкой мыши на самый релевантный , чтобы запустить его в качестве администратора.
- Введите или вставьте следующую команду и нажмите Enter : sfc / scannow
Просто дождитесь завершения процесса (это может занять некоторое время), затем перезагрузите компьютер, чтобы изменения вступили в силу. SFC автоматически найдет и восстановит поврежденные файлы и каталоги.
2. Запустите средство устранения неполадок питания.
- Нажмите Windows клавишу +, I чтобы открыть приложение « Настройки» , и перейдите к разделу « Система» на левой панели, а затем к « Устранение неполадок» с правой стороны.
- Как только вы окажетесь в меню « Устранение неполадок» , нажмите « Другие средства устранения неполадок» .
- Теперь прокрутите вниз, пока не встретите средство устранения неполадок питания, и нажмите « Выполнить» рядом с ним.
Когда средство устранения неполадок закончит поиск ошибок, оно покажет вам точную ошибку, которая произошла, и способы ее исправления. Обязательно следуйте отображаемым инструкциям, шаг за шагом.
3. Обновите драйвер видеокарты.
- Щелкните правой кнопкой мыши значок « Пуск», затем щелкните « Диспетчер устройств», чтобы открыть его.
- Теперь разверните раздел « Адаптеры дисплея » и щелкните правой кнопкой мыши каждый параметр, затем выберите « Обновить драйвер» .
Дождитесь завершения процессов, затем перезагрузите компьютер, чтобы изменения вступили в силу. Мы настоятельно рекомендуем вам использовать специальный инструмент для автоматического обновления драйверов, например DriverFix.
4. Проверьте Центр обновления Windows.
- Нажмите Windows клавишу +, I чтобы открыть приложение « Настройки» , затем нажмите « Центр обновления Windows» на левой панели.
- Если у вас есть новые обновления для загрузки, нажмите кнопку « Установить сейчас» и дождитесь завершения процесса, в противном случае нажмите кнопку « Проверить наличие обновлений» .
Если вы используете более старую версию Windows, возможно, это является фактором, способствующим возникновению ошибки, которую можно исправить, обновив операционную систему. Скорее всего, ошибка будет исправлена в следующем обновлении программного обеспечения.
5. Запустите компьютер в режиме чистой загрузки.
- Нажмите Windows клавишу +, R чтобы открыть новое окно « Выполнить» , затем введите или вставьте в msconfig и нажмите « ОК» .
- Перейдите на вкладку « Загрузка » и установите флажок « Безопасная загрузка» в разделе « Параметры загрузки» .
- Теперь перейдите на вкладку « Общие» и убедитесь, что установлен переключатель « Выборочный запуск », но снимите флажок « Загружать элементы запуска» под ним.
- Выберите вкладку « Служба » и установите флажок « Скрыть все службы Microsoft», затем нажмите « Отключить все», чтобы отключить все ненужные службы, которые могут вызывать проблемы.
- На вкладке « Автозагрузка » нажмите « Открыть диспетчер задач» и отключите все включенные элементы автозагрузки.
Теперь вы можете продолжить процесс перезагрузки. Windows автоматически выполнит свою работу, все, что вам нужно сделать, это дождаться завершения процесса.
В чем разница между GDI + и Direct2D?
Геометрии, такие как многоугольники, эллипсы и линии, визуализируются с помощью GDI в непрозрачном состоянии с псевдонимом. Через AlphaBlend API он может отображать текст с псевдонимом и ClearType, а также поддерживать наложение прозрачности.
Однако его обработка прозрачности непоследовательна, и альфа-канал просто игнорируется большинством API-интерфейсов GDI.
Только несколько API-интерфейсов GDI обеспечивают уверенность в том, что будет в альфа-канале после операции. Что еще более важно, рендеринг, выполняемый GDI, плохо переносится в 3D-операции, и современный графический процессор наиболее эффективно рендерит 3D-часть своего механизма рендеринга.
Примеры включают тот факт, что линии с псевдонимом Direct2D предназначены для реализации просто как два треугольника, отображаемых на графическом процессоре, в то время как GDI использует метод рисования линий Брезенхэма.
Direct2D визуализирует непрозрачные, прозрачные, сглаженные и сглаженные примитивы по внешнему виду. Прозрачность и движение часто используются в современных пользовательских интерфейсах.
Благодаря строгим гарантиям, он обеспечивает то, как он принимает и создает прозрачный контент, а также тот факт, что все его примитивы отображаются с использованием аппаратного ускорения, Direct2D упрощает разработку современного пользовательского интерфейса.
Direct2D не является полноценным надмножеством GDI, он не включает примитивы, которые были бы неприемлемо медленными, если бы они были реализованы на графическом процессоре. Поскольку Direct2D был разработан с упором на 3D-ускорение, его также легко использовать вместе с Direct3D.
Сообщите нам в разделе комментариев ниже, какое решение работает лучше всего для вас, а также как часто вы получаете ошибки файла. dll на вашем компьютере.
Источник: clickthis.blog
Интерфейс Windows графических устройств (GDI)
GDI (Graphics Device Interface) — интерфейс графических устройств является подсистемой Windows, используемой программами для рисования на экране. GDI позволяет рисовать на экране, принтере, графопостроителе или на других устройствах отображения с помощью драйверов. Программный драйвер является существенным элементом видеосистемы, с помощью которого осуществляется связь программного обеспечения с аппаратурой видеоадаптера. Плохой драйвер может свести на нет все преимущества быстродействующего адаптера. Главное в работе GDI — сделать программы в меру независимыми от реальной аппаратуры.
Раньше всякий раз с появлением нового поколения аппаратных средств высокопроизводительное программное обеспечение либо получало новые драйверы, либо устаревало. С помощью GDI набор драйверов для аппаратуры обновляет прикладные программы. Интерфейс GDI выполняет и другую важную функцию. Он определяет набор операций, которые программа может выполнять на дисплее. Поскольку набор операций ограничен, то можно создать аппаратуру (Windows-акселераторы), выполняющую эти операции быстрее, что позволит ускорить работу программ в среде Windows.
- GDI поддерживает следующие операции рисования:
- установку определенного цвета в конкретном пикселе;
- рисование линии с учетом характеристик толщины, шаблона, цвета и стиля кисти;
- рисование дуги;
- рисование эллипса (окружности);
- рисование прямоугольника, прямоугольника со скругленными углами или многоугольника;
- рисование замкнутых фигур, заполненных сплошным цветом или шаблоном;
- рисование текста с указанным шрифтом, цветом и размером;
- перемещение прямоугольника по экрану, возможно, с изменением размеров;
- ограничение операций рисования или операций перемещения в определенной области, чтобы не затрагивать изображение за пределами этой области.
Команды рисования, представленные простейшими рисующими программами, такими как входящая в Windows программа Paintbrush, эти команды в основном отражают функции GDI. Более сложные рисующие программы, например CorelDRAW, выполняют сложные операции типа закрашивания (заливки) фонтаном и рисования сложных кривых.
Наиболее общей операцией Windows является перемещение прямоугольников из одной области экрана в другую; эта операция называется пересылкой блока (строки) битов (Bit Block Transfer), или BitBLT (Название операции произносится как BitBlit или просто blit). Windows выполняет операцию blit во время процесса прокрутки в окне. При прокрутке в направлении конца файла изображение на экране движется вверх.
Хорошо написанные программы перемещают ранее созданное изображение вверх, занося новый рисунок в отображаемый участок окна с помощью операции blit. Поскольку перемещаемые прямоугольники обычно содержат много пикселей, происходит перемещение большого количества данных. Ускорение операции blit приводит к более быстрой прокрутке.
Аппаратно реализованная операция blit работает быстрее, чем программа, так как выполняется только одна операция. Нет необходимости выбирать команды, декодировать и выполнять их. С помощью аппаратных средств многоугольник можно закрасить быстрее, поскольку при этом возможен более быстрый доступ к видеопамяти, к тому же для этого не требуется выполнения программы.
Область применения операции blit в Windows даже шире, чем описано, потому что перемещение может происходить как из основной, так и из видеопамяти. Эта операция применяется, например, при рисовании текста. Поскольку шрифты являются наборами маленьких растров, при рисовании текста, состоящего из последовательности маленьких растров (по одному на символ), каждый растр перемещается из основной памяти в нужное место видеопамяти. Быстрые операции blit способствуют быстрому выводу текста.
Аппаратное выполнение функций GDI
Акселератор упрощает работу GDI, что приводит к более быстрому выполнению видеоопераций. Для каждой операции, затребованной программой. GDI определяет возможность ее осуществления непосредственно аппаратурой, и если находит возможным, то разрешает драйверу устройства выполнить рисунок аппаратными средствами.
В противном случае GDI моделирует операцию на программном уровне. Для каждой операции существует определенный уровень моделирования, и GDI решает, какую из простейших операций может полностью выполнить аппаратура. Покажем это более детально.
Программный интерфейс в GDI. Чтобы рисовать на экране, программы в среде Windows обращаются к GDI. Необходимые программам операции могут либо непосредственно выполняться аппаратными средствами, либо требуют дополнительных средств.
Программная реализация операций GDI. При отсутствии акселератора или наличии операций GDI, аппаратно не поддерживаемых акселератором, GDI моделирует эти операции с помощью программного обеспечения. Если, например, акселератор не рисует штриховые линии, то GDI моделирует эту операцию, рисуя последовательность из более коротких линий. Если акселератор не выводит линии вообще, то GDI моделирует операцию, рисуя последовательность точек.
Аппаратная реализация операций GDI. Видеоакселератор может выполнять операции с помощью аппаратных средств. Одним из наиболее общих и наиболее эффективных методов является аппаратная реализация операции BitBLT, потому что при выполнении операции прокрутки акселератор читает из памяти и пишет в память, не выходя на шину компьютера. Операции полностью реализованы в видеоплате, что устраняет какие-либо ожидания со стороны других компонентов компьютера. Акселератор с командой BitBLT позволяет сотни операций заменить одной командой.
Аппаратно-программная реализация операций GDI. В отдельных случаях GDI может использовать аппаратную поддержку, хотя запрашиваемую программой операцию модуль GDI может выполнить программно. Например, если в аппаратных средствах не предусмотрена операция закрашивания многоугольника, GDI разбивает эту операцию на несколько этапов для последовательного рисования горизонтальных линий. Акселератор может рисовать линии, ускоряя тем самым всю операцию.
Метафайлы в Windows
Операции, поддерживаемые GDI, непосредственно отражены в формате метафайлов операционной системы Windows (Windows Metafile Format), который хранится в файлах с расширением WMF и в объектах типа “рисунок”(picture), находящихся в буфере обмена.
Метафайлы содержат последовательность команд для вывода изображения, а не само изображение и поэтому они значительно меньше изображений в пикселах по объему (примерно 1: 10). Метафайлы допускают увеличение или уменьшение масштаба изображения без потери четкости и качества, а растровое изображение нет.
Источник: al-tm.ru