Современные аппаратные средства растровой графики
Представление изображений
Теперь следует подробнее остановиться на форматах представления растровых изображений в памяти. Обычно пиксели описываются набором неотрицательных целых чисел. Изображения обычно хранятся построчно; в каждой строке информация о пикселях упорядочена слева направо, а строки соответственно располагаются по порядку сверху вниз12Как ни странно, в формате BMP по умолчанию строки расположены снизу вверх, что приводит к дополнительным затратам на операции с этими файлами.. При этом, как правило, каждая следующая строка начинается с границы машинного слова13в современных ПК это чаще всего 4 байта = 32 бита (при этом, возможно, конец предыдущей строки дополняется нулями), т.к. это оптимально для обработки процессором.
По глубине цвета изображения делятся на:
2- и 4-битные режимы CGA и EGA, применявшиеся в ПК в 1980-х гг., но устаревшие на данный момент, в таблице не представлены.
В палитровом 8-битном режиме преобразование из палитрового в отображаемый цвет выполняется аппаратно устройством RAMDAC, в регистрах которого и содержится палитра. Этот режим сейчас уже мало используется из-за слишком ограниченного количества одновременно отображаемых цветов.
Как нетрудно подсчитать, True Color позволяет представить 16,7 млн возможных оттенков, чего вполне достаточно для полноценного восприятия человеком большинства фотографий. В то же время, в некоторых случаях заметна недостаточность диапазона яркости. Серьезной проблемой является также потеря точности при операциях над пикселями с целочисленным описанием. Например, при работе в True Color режиме сначала уменьшим яркость в два раза, а затем увеличим. При этом младший значащий бит каждого компонента обнулится, т.к. сначала биты были сдвинуты вправо, а потом обратно влево с дополнением 0. Поэтому, несмотря на то, что графическая подсистема ПК пока может воспроизводить изображения с не более чем 8 бит/канал, некоторые программы обработки изображений имеют режим 16 бит/канал (48 bpp), служащий для предотвращения потери точности при редактировании.
К тому же некоторые из устройств ввода, рассмотренных выше, позволяют получать изображения с большей глубиной цвета. Некоторые high-end видеокарты уже способны работать с точностью 10 и 12 бит/канал (т.е. 30 и 36 bpp).
В последнее время становится достаточно популярной концепция Изображений с увеличенным динамическим диапазоном (англ. HDRI - High Dynamic Range Images), которые могли бы одновременно описывать очень разную степень освещенности, комбинируя, например, съемку фотоаппаратом сразу с несколькими значениями экспозиции. Во многих реализациях каждый канал описывается числом с плавающей точкой одинарной точности (размером 32 бита). Современные дисплеи могут однако показывать такие изображения только с определенной экспозицией.
Программный интерфейс
Самые первые ПК, появившиеся в начале 1980-х годов, работали исключительно в текстовом режиме. В этом режиме наименьшим примитивом при выводе на дисплей является символ целиком, а не отдельные пиксели. Хотя можно было управлять видом этих символов, загрузив соответствующие монохромные растры в специальную таблицу видеокарты14Таким образом, в частности, производилась русификация DOS программ..
Потом появились карты с графическими возможностями. В связи с малым размером адресного пространства (1 Мб) процессора Intel 8086 приходилось отображать только часть видеопамяти в адресное пространство процессора и специальными командами задавать, какая именно это часть. Такая технология получила название bank switching. Команды видеокарте посылались путем прерываний или записи информации непосредственно в ее аппаратный порт. Для использования дополнительных возможностей видеокарт разработчикам прикладных программ и игр приходилось самим реализовывать простейшие операции для каждого их типа, т.к. поддержка видеокарт со стороны ОС15Операционная Система была минимальной.
С появлением ОС с графическим интерфейсом ситуация изменилась. Прослойка между прикладной программой и аппаратурой стала "толще". Непосредственно на низком уровне видеокартой управляет ее драйвер - программа, поставляемая, как правило, самой фирмой-разработчиком видеокарты. А прикладная программа обращается к нему через вызовы четко определенного общего для всех драйверов абстрактного интерфейса (англ. API - Application Programming Interface). Таким образом, появилась аппаратная независимость, что явилось важным шагом вперед, с учетом все более разраставшегося множества видеокарт с ограниченной совместимостью друг с другом.
Типичные функции такого интерфейса включают в себя как раз операции блиттинга и растеризации примитивов, а также работу с палитрами, хотя сейчас палитры уже почти не используются.
В UNIX-подобных ОС графический интерфейс предоставляется системой X Windows, работающей по принципу "клиент-сервер". Программа-клиент отправляет какой-либо запрос API по сети (хотя для самой программы это выглядит как просто вызов функции); получив этот запрос, программа-сервер отвечает за его исполнение. Хотя такая схема и является гибкой (можно, например, иметь несколько дисплеев у одного компьютера или, наоборот, много компьютеров, подключенных к одному дисплею), но в то же время она требует и дополнительных затрат на передачу данных по сетевому протоколу. На самом деле, в ПК не используется эта гибкость, а все запросы передаются в рамках одной системы (через разделяемую между процессами клиента и сервера память).