Московский государственный университет имени М.В.Ломоносова
Опубликован: 23.04.2007 | Доступ: свободный | Студентов: 3275 / 437 | Оценка: 4.18 / 3.71 | Длительность: 17:54:00
ISBN: 978-5-9556-0098-7
Специальности: Программист
Лекция 2:

Современные аппаратные средства растровой графики

< Лекция 1 || Лекция 2: 123456 || Лекция 3 >

Представление изображений

Теперь следует подробнее остановиться на форматах представления растровых изображений в памяти. Обычно пиксели описываются набором неотрицательных целых чисел. Изображения обычно хранятся построчно; в каждой строке информация о пикселях упорядочена слева направо, а строки соответственно располагаются по порядку сверху вниз12Как ни странно, в формате BMP по умолчанию строки расположены снизу вверх, что приводит к дополнительным затратам на операции с этими файлами.. При этом, как правило, каждая следующая строка начинается с границы машинного слова13в современных ПК это чаще всего 4 байта = 32 бита (при этом, возможно, конец предыдущей строки дополняется нулями), т.к. это оптимально для обработки процессором.

По глубине цвета изображения делятся на:

Глубина цвета в bpp Название Примечания
1 Монохромное Представимы 2 цвета - черный и белый
8 Палитровое Байт является индексом в таблице палитры, с помощью этой палитры представимо любое 256-элементное подмножество всех True Color цветов
8 Полутоновое (Оттенки серого) Содержит только один канал интенсивности без цветовой информации с точностью 8 бит. Можно рассматривать как подвид палитрового, где элементы палитры соответствуют оттенкам серого
16 High Color Полноцветное, количество бит на каждую компоненту R-G-B: 5-5-5 (т.е. на самом деле 15 бит, один не используется) или 5-6-5
24 True Color Полноцветное, на каждую из RGB компонент по 8 бит
32 True Color То же самое, что и предыдущее, только добавляется еще один байт для выравнивания информации по машинному слову. Этот байт может также использоваться как альфа-канал, т.е. задавать степень прозрачности

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 программ..

Текстовый режим в ОС Linux.

Рис. 2.8. Текстовый режим в ОС Linux.

Потом появились карты с графическими возможностями. В связи с малым размером адресного пространства (1 Мб) процессора Intel 8086 приходилось отображать только часть видеопамяти в адресное пространство процессора и специальными командами задавать, какая именно это часть. Такая технология получила название bank switching. Команды видеокарте посылались путем прерываний или записи информации непосредственно в ее аппаратный порт. Для использования дополнительных возможностей видеокарт разработчикам прикладных программ и игр приходилось самим реализовывать простейшие операции для каждого их типа, т.к. поддержка видеокарт со стороны ОС15Операционная Система была минимальной.

С появлением ОС с графическим интерфейсом ситуация изменилась. Прослойка между прикладной программой и аппаратурой стала "толще". Непосредственно на низком уровне видеокартой управляет ее драйвер - программа, поставляемая, как правило, самой фирмой-разработчиком видеокарты. А прикладная программа обращается к нему через вызовы четко определенного общего для всех драйверов абстрактного интерфейса (англ. API - Application Programming Interface). Таким образом, появилась аппаратная независимость, что явилось важным шагом вперед, с учетом все более разраставшегося множества видеокарт с ограниченной совместимостью друг с другом.

Графический интерфейс ОС Windows XP.

Рис. 2.9. Графический интерфейс ОС Windows XP.

Типичные функции такого интерфейса включают в себя как раз операции блиттинга и растеризации примитивов, а также работу с палитрами, хотя сейчас палитры уже почти не используются.

В UNIX-подобных ОС графический интерфейс предоставляется системой X Windows, работающей по принципу "клиент-сервер". Программа-клиент отправляет какой-либо запрос API по сети (хотя для самой программы это выглядит как просто вызов функции); получив этот запрос, программа-сервер отвечает за его исполнение. Хотя такая схема и является гибкой (можно, например, иметь несколько дисплеев у одного компьютера или, наоборот, много компьютеров, подключенных к одному дисплею), но в то же время она требует и дополнительных затрат на передачу данных по сетевому протоколу. На самом деле, в ПК не используется эта гибкость, а все запросы передаются в рамках одной системы (через разделяемую между процессами клиента и сервера память).

< Лекция 1 || Лекция 2: 123456 || Лекция 3 >