Классификация и анализ графических режимов




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

Таблица 19.4

Драйвер Имя константы режима и ее значение Разрешение экрана (в точках) Палитра Число видеостраниц
CGA CGAC0 = 0 CGAC1 = 1 CGAC2 = 2 CGAC3 = 3 CGAHi = 4 320x200 320x200 320x200 320x200 640x200 4 цвета 4 цвета 4 цвета 4 цвета 2 цвета  
MCGA MCGAC0 = 0 MCGAC1 = 1 MCGAC2 = 2 MCGAC3 = 3 MCGAMed=4 MCGAHi = 5 320x200 320x200 320x200 320x200 640x200 640x480 4 цвета 4 цвета 4 цвета 4 цвета 2 цвета 2 цвета  
EGA EGALo = 0 EGAHi = 1 640x200 640x350 16 цветов 16 цветов 2 {412}
EGA64 EGA64Lo = 0 EGA64Hi = 1 640x200 640x350 16 цветов 4 цвета  
EGAMono EGAMonoHi = 3 640x350 2 цвета 1 (2)
Herc HercMonoHi = 0 720x348 2 цвета  
ATT400 ATT400C0 = 0 ATT400C1 = 1 ATT400C2 = 2 ATT400C3 = 3 ATT400C4 = 4 ATT400Hi = 5 320x200 320x200 320x200 320x200 640x200 640x200 4 цвета 4 цвета 4 цвета 4 цвета 2 цвета 2 цвета  
VGA VGALo = 0 VGAMed = 1 VGAHi = 2 640x200 640x350 640x480 16 цветов 16 цветов 16 цветов  
PC3270 PC3270Hi = 0 720x350 2 цвета  
IBM8514 IBM8514Lo = 1 IBM8514 = 1 640x480 1024x768 256 цветов 256 цветов  

Как видно из таблицы, наиболее качественная «картинка» получается при использовании адаптера IBM8514. Однако он редко встречается у нас в стране, и поэтому в дальнейшем мы не будем о нем упоминать.

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

19.2.3.1. Процедура DetectGraph. Для тестирования графического адаптера в модуле Graph объявлена процедура:

DetectGraph(VAR GraphDriver, GraphMode: Integer) {413}

Эта процедура может быть вызвана до инициализации графики. Через формальный параметр GraphDriver возвращается значение из первого столбца таблицы 19.4, а через параметр GraphMode — обычно последнее значение из соответствующего раздела второго столбца. Эти значения и рекомендуется подставлять в качестве фактических параметров в процедуру InitGraph. Если на ПЭВМ не установлена графическая плата, то функция GraphResult будет возвращать значение grNotDetected. После определения GraphDriver автоматически становится доступным диапазон графических режимов, реализуемых адаптером ПЭВМ. Дело в том, что по мере развития индустрии ПЭВМ возникали новые уровни возможностей графики (рис. 19.2).

┌────────┐ ──────────────────┐

400 │ 16 цветов │ │

│ из 256 │ │

└────────┘ │

640 │

┌────────┐ ────────────┐ │

350 │ 16 цветов │ ││

│ из 64 │ ││

└────────┘ │ │

│ │

640 ││

┌────────┐ │ │

200 │ 16 цветов │ │ │

└────────┘ │ │

│ ├─ VGA

320 ││

┌────────┐ │ │

200 │ 16 цветов │ │ │

└────────┘ ├─ EGA │

│ │

320 ││

┌────────┐ ─────┐ │ │

200 │ 4 цвета │ │ │ │

└────────┘ │ │ │

640 ├─ CGA │ │

┌────────┐ ─────┤ │ │

200 │ 2 цвета │ │ │ │

└────────┘ ─────┘ ───┘ ───┘

Рис. 19.2

Адаптер Hercules несколько отличается от остальных, но тем не менее «перекрывается» старшим уровнем — адаптером VGA. Таким образом, имея адаптер VGA, можно имитировать практически все режимы, возможные на платах EGA, CCA, Hercules и т.д., имея плату {414} EGA, можно то же, кроме режимов VGA. В результате получается так называемая совместимость «снизу вверх». Поясним это на примере (рис. 19.3).

USES Graph; { используется Graph } VAR gDriver: Integer; { для графического адаптера } gMode: Integer; { для графического режима } ErrorCode: Integer; { для кода ошибки } BEGIN DetectGraph(gDriver, gMode); { Опрос наличия и } ErrorCode:= GraphResult; { типа адаптера. } if ErrorCode <> grOk then begin { если ошибка, то... } WriteLn(GraphErrorMsg(ErrorCode)); Halt(1) end; {if} if gDriver in [EGA, EGA64, VGA] { Если адаптер } then begin { "старше" CGA, то } gDriver:= CGA; { возможен режим } gMode:= CGACO { работы CGA. } end; {if} InitGraph(gDriver,gMode,); { режим CGA } Line(0, 0, 319, 199); { работа как на CGA } CloseGraph { закрытие графики } END.

Рис. 19.3

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

19.2.3.2. Диапазоны графических режимов. Номер текущего графического режима для установленного драйвера определяется функцией

GetGraphMode: Integer,

а функция

GetMaxMode: Word

возвращает номер максимального режима для графического адаптера; таким образом, каждый драйвер поддерживает диапазон режимов 0..GetMaxMode. Обычно этот же результат можно получить из процедуры {415}

GetModeRange(GraphDriver: Integer;

VAR LoMode, HiMode: Integer),

через параметры LoMode и HiMode возвращающей соответственно нижнюю и верхнюю границу режимов для драйвера GraphDriver. Но по ряду технических соображений предпочтительнее пользоваться функцией GetMaxMode, полагая минимальный номер режима равным нулю.

19.2.3.3. Функции GetModeName и GetDriverName. Есть еще одна функция, которая может быть полезна для организации диалогового управления графическими режимами:

GetModeName(GraphMode: Word): String

Она возвращает строку, в которой содержится последовательно через пробелы разрешение, имя константы и иногда название палитры из табл. 19.4, например, '640x200 CGA'. Представленный пример (рис. 19.4) поможет определить, в каких графических режимах может работать используемая ПЭВМ.

USES Graph; { подключен модуль Graph } {$I initgraf.pas} { процедура инициализации } VAR mode: Integer; BEGIN GrInit; { инициализация } for mode:= 0 to GetMaxMode do { показ всех режимов } OutTextXY(10, 10+mode*10, GetModeName(mode)); ReadLn; { пауза до нажатия... } CloseGraph { закрытие графики } END.

Рис. 19.4

Функция

GetDriverName: String

позволяет получить имя используемого драйвера. Ее применение обосновано только в том случае, если в процедуре InitGraph переменная GraphDriver определена, как Detect (рис. 19.5).



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-11-01 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: