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;

⇐ Предыдущая| |Следующая ⇒