GDI (Graphics Device Interface) - интерфейс графических устройств является подсистемой Windows, используемой программами для рисования на экране. GDI позволяет рисовать на экране, принтере, графопостроителе или на других устройствах отображения с помощью драйверов. Программный драйвер является существенным элементом видеосистемы, с помощью которого осуществляется связь программного обеспечения с аппаратурой видеоадаптера. Плохой драйвер может свести на нет все преимущества быстродействующего адаптера. Главное в работе GDI - сделать программы в меру независимыми от реальной аппаратуры.
Раньше всякий раз с появлением нового поколения аппаратных средств высокопроизводительное программное обеспечение либо получало новые драйверы, либо устаревало. С помощью GDI набор драйверов для аппаратуры обновляет прикладные программы. Интерфейс GDI выполняет и другую важную функцию. Он определяет набор операций, которые программа может выполнять на дисплее. Поскольку набор операций ограничен, то можно создать аппаратуру (Windows-акселераторы), выполняющую эти операции быстрее, что позволит ускорить работу программ в среде Windows.
Команды рисования, представленные простейшими рисующими программами, такими как входящая в Windows программа Paintbrush, эти команды в основном отражают функции GDI. Более сложные рисующие программы, например CorelDRAW, выполняют сложные операции типа закрашивания (заливки) фонтаном и рисования сложных кривых.
Наиболее общей операцией Windows является перемещение прямоугольников из одной области экрана в другую; эта операция называется пересылкой блока (строки) битов (Bit Block Transfer), или BitBLT (Название операции произносится как BitBlit или просто blit). Windows выполняет операцию blit во время процесса прокрутки в окне. При прокрутке в направлении конца файла изображение на экране движется вверх. Хорошо написанные программы перемещают ранее созданное изображение вверх, занося новый рисунок в отображаемый участок окна с помощью операции blit. Поскольку перемещаемые прямоугольники обычно содержат много пикселей, происходит перемещение большого количества данных. Ускорение операции blit приводит к более быстрой прокрутке.
Аппаратно реализованная операция blit работает быстрее, чем программа, так как выполняется только одна операция. Нет необходимости выбирать команды, декодировать и выполнять их. С помощью аппаратных средств многоугольник можно закрасить быстрее, поскольку при этом возможен более быстрый доступ к видеопамяти, к тому же для этого не требуется выполнения программы.
Область применения операции blit в Windows даже шире, чем описано, потому что перемещение может происходить как из основной, так и из видеопамяти. Эта операция применяется, например, при рисовании текста. Поскольку шрифты являются наборами маленьких растров, при рисовании текста, состоящего из последовательности маленьких растров (по одному на символ), каждый растр перемещается из основной памяти в нужное место видеопамяти. Быстрые операции blit способствуют быстрому выводу текста.
Акселератор упрощает работу GDI, что приводит к более быстрому выполнению видеоопераций. Для каждой операции, затребованной программой. GDI определяет возможность ее осуществления непосредственно аппаратурой, и если находит возможным, то разрешает драйверу устройства выполнить рисунок аппаратными средствами.
В противном случае GDI моделирует операцию на программном уровне. Для каждой операции существует определенный уровень моделирования, и GDI решает, какую из простейших операций может полностью выполнить аппаратура. Покажем это более детально.
Программный интерфейс в GDI. Чтобы рисовать на экране, программы в среде Windows обращаются к GDI. Необходимые программам операции могут либо непосредственно выполняться аппаратными средствами, либо требуют дополнительных средств.
Программная реализация операций GDI. При отсутствии акселератора или наличии операций GDI, аппаратно не поддерживаемых акселератором, GDI моделирует эти операции с помощью программного обеспечения. Если, например, акселератор не рисует штриховые линии, то GDI моделирует эту операцию, рисуя последовательность из более коротких линий. Если акселератор не выводит линии вообще, то GDI моделирует операцию, рисуя последовательность точек.
Аппаратная реализация операций GDI. Видеоакселератор может выполнять операции с помощью аппаратных средств. Одним из наиболее общих и наиболее эффективных методов является аппаратная реализация операции BitBLT, потому что при выполнении операции прокрутки акселератор читает из памяти и пишет в память, не выходя на шину компьютера. Операции полностью реализованы в видеоплате, что устраняет какие-либо ожидания со стороны других компонентов компьютера. Акселератор с командой BitBLT позволяет сотни операций заменить одной командой.
Аппаратно-программная реализация операций GDI. В отдельных случаях GDI может использовать аппаратную поддержку, хотя запрашиваемую программой операцию модуль GDI может выполнить программно. Например, если в аппаратных средствах не предусмотрена операция закрашивания многоугольника, GDI разбивает эту операцию на несколько этапов для последовательного рисования горизонтальных линий. Акселератор может рисовать линии, ускоряя тем самым всю операцию.
Операции, поддерживаемые GDI, непосредственно отражены в формате метафайлов операционной системы Windows (Windows Metafile Format), который хранится в файлах с расширением WMF и в объектах типа “рисунок”(picture), находящихся в буфере обмена.
Метафайлы содержат последовательность команд для вывода изображения, а не само изображение и поэтому они значительно меньше изображений в пикселах по объему (примерно 1: 10). Метафайлы допускают увеличение или уменьшение масштаба изображения без потери четкости и качества, а растровое изображение нет.