Алгоритм - Учебный центр

Версия сайта для слабовидящих
Заполните форму ниже! Мы вам перезвоним!

Нажав на кнопку "Отправить", Я даю своё согласие на автоматизированную обработку указанной информации, распространяющейся на осуществление всех действий с ней, включая сбор, передачу по сетям связи общего назначения, накопление, хранение, обновление, изменение, использование, обезличивание, блокирование, уничтожение и обработку посредством внесения в электронную базу данных, систематизации, включения в списки и отчетные формы.


Метафайлы в Windows.

Метафайлы в Windows.

Операции, поддерживаемые GDI, непосредственно отражены в формате метафайлов операционной системы Windows (Windows Metafile Format), который хранится в файлах с расширением WMF и в объектах типа “рисунок”(picture), находящихся в буфере обмена.

Метафайлы содержат последовательность команд для вывода изображения, а не само изображение и поэтому они значительно меньше изображений в пикселах по объему (примерно 1: 10). Метафайлы допускают увеличение или уменьшение масштаба изображения без потери четкости и качества, а растровое изображение нет. GDI (Graphics Device Interface) - интерфейс графических устройств является подсистемой Windows, используемой программами для рисования на экране. GDI позволяет рисовать на экране, принтере, графопостроителе или на других устройствах отображения с помощью драйверов. Программный драйвер является существенным элементом видеосистемы, с помощью которого осуществляется связь программного обеспечения с аппаратурой видеоадаптера. Плохой драйвер может свести на нет все преимущества быстродействующего адаптера. Главное в работе GDI - сделать программы в меру независимыми от реальной аппаратуры.

Рассмотрим, каким образом GDI рисует текст на экране т. е. алгоритм, выполняемый GDI для вывода текста на экран. Символы хранятся в виде растров, которые GDI хранит в памяти шрифта. Каждый символ имеет собственный маленький растр. Для различных размеров всевозможных шрифтов существует отдельный набор растров. Курсивные и полужирные шрифты имеют свои собственные растры. Для шрифтов TrueType GDI создает растры из очертаний символов, которые он может масштабировать к необходимому размеру в процессе создания растра.

При рисовании текста на экране GDI вначале создает необходимые растры шрифта, а затем в цикле выводит все символы. В каждой итерации цикла копируется растр шрифта из основной памяти в нужную позицию на экране. Каждая отдельная операция рисования символа - это BitBLT маленького растра шрифта из основной памяти в видеопамять. Если аппаратный акселератор имеет функцию BitBLT, процессор может просто выдавать акселератору последовательность команд и поручать ему всю работу. Для каждого символа требуется одна операция BitBLT.

Главное достоинство акселератора состоит в том, что каждый символ содержит сотни пикселей и процессор должен выполнять цикл для копирования каждого символа на экран. Даже если процессор может обрабатывать несколько пикселей одновременно за один проход цикла при копировании растра, для вывода символа на экран потребуются сотни или даже тысячи команд, в зависимости от числа пикселей. Для крупных символов требуется намного больше пикселей. Независимо от величины символа для управления акселератором при копировании растра требуется одно и то же число команд процессора, поэтому процессор может делать другую работу, в то время когда акселератор выполняет команду. Рисование текста представляет собой последовательность операций BitBLT - по одной операции на каждый символ строки текста

Функция BitBLT используется для ускорения вывода текста. Для копирования растра в позицию на экране процессору требуется не просто дать команду акселератору, а выполнить намного больше работы.

Еще больший объем работы требуется выполнить процессору для закрашивания многоугольников, поэтому производительность может существенно зависеть от акселератора. В ходе операции закрашивания на экран заносится линия за линией сверху вниз, пока не будет достигнута последняя линия внутри многоугольника, т.е. процессор может рисовать линию нужного цвета, перемещаясь вниз на следующую линию. Вычисления, связанные с вычерчиванием концов линий, могут быть сложными для многоугольников необычной формы, поручая часть работы акселератору, можно повысить производительность.

Акселератор упрощает работу GDI, что приводит к более быстрому выполнению видеоопераций. Для каждой операции, затребованной программой. GDI определяет возможность ее осуществления непосредственно аппаратурой, и если находит возможным, то разрешает драйверу устройства выполнить рисунок аппаратными средствами.

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

Программный интерфейс в GDI. Чтобы рисовать на экране, программы в среде Windows обращаются к GDI. Необходимые программам операции могут либо непосредственно выполняться аппаратными средствами, либо требуют дополнительных средств.

Программная реализация операций GDI. При отсутствии акселератора или наличии операций GDI, аппаратно не поддерживаемых акселератором, GDI моделирует эти операции с помощью программного обеспечения. Если, например, акселератор не рисует штриховые линии, то GDI моделирует эту операцию, рисуя последовательность из более коротких линий. Если акселератор не выводит линии вообще, то GDI моделирует операцию, рисуя последовательность точек.

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

Аппаратно-программная реализация операций GDI. В отдельных случаях GDI может использовать аппаратную поддержку, хотя запрашиваемую программой операцию модуль 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 способствуют быстрому выводу текста.


Лицензия