OOOOOOOOrrrrrrrrggggggggbbbbbbbb
Несколько сложнее организация режимов HiColor, где под каждый пиксел отводится по 2 байта и возможны два варианта:
под каждую компоненту отводится по 5 бит, последний бит не используется (32 тыс. цветов);
под красную и синюю компоненты отводится по 5 бит, под зеленую - 6 бит (64
тыс. цветов).
Соответствующая этим режимам раскладка памяти выглядит следующим образом: Omrrgggggbbbbb
или
rrrrrggggggbbbbb
Замечание. В связи с некорректного работой Windows 95/98 с непалитровыми режимами некоторые из приведенных далее примеров следует запускать в DOS-режиме.
Ниже приводится простая программа, иллюстрирующая работу с режимом HiColor 32 тыс. цветов.
Ю // File HiColor.cpp // tes, for VESA #include <conio.h> #include <dos.h> #inc!ude <stdio.h> #include <string.h>
4. Работа с основными графическими устройствам
#include "Vesa.h"
#define LOWORD(I) ((int)(l)) #define HIWORD(I) ((int)((l) »16»
inline int RGBColor (int red, int green, int blue )
{
return ((red » 3 ) « 10 ) | (( green » 3 ) « 5 ) | ( blue » 3 );
}
static int curBank = 0;
static int granularity - 1;
static VESAModelnfo curMode;
int findVESA ( VESAInfo& vi) {
#if defined(_COMPACT__) || defined(_JJ\RGE_J || defined(__HUGE__) asm {
push es push di
les di, dword ptr vi mov ax, 4F00h int 10h pop di pop es
}
#else
asm {
push di
mov di, word ptr vi
mov ax, 4F00h
int 10h
pop di
>
#endif
if ( _AX0x004F ) return 0;
return Istrncmp ( vi.sign, "VESA", 4 );
}
int findVESAMode (int mode, VESAModelnfo& mi) {
#if definedL_COMPACT_) || defined(._LARGE_J || definedC_HUGE_J
asm {
push es push di
les di, dword ptr mi mov ax, 4F01h mov cx, mode int „ 10h pop di pop es
}
Компьютерная графика. Полигональные модели
#else
asm {
push di
mov di, word ptr mi mov ax,4F01h mov cx, mode int 10h pop di
}
#endif
return _AX == 0x004F;
}
int setVESAMode (int mode ) {
if (IfindVESAMode ( mode, curMode )) return 0;