4.8.1. Режим чтения О

В этом режиме возвращается байт из latch-регистра (плоскости) с номером из регистра Read Map Select.

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

У // File ReadPxl.cpp

int readPixel (int x, int у ) {

int color = 0;
char far * vptr = (char far *) MK_FP (OxAOOO, y*80+(x»3)); char mask = pixelMask ( x );
for (int plane = 3; plane >= 0; plane- ) {
writeReg ( EGAJ3RAPHICS, EGA__READJVIAP_SELECT, plane ); color «= 1; if (*vptr & mask ) color |= 1;
}
return color;
}

4.8.2. Режим чтения 1

В возвращаемом значении z-й бит равен единице, если GetPixel & ColorDon'tCare = ColorCompare & ColorDon'tCarc

В случае, если ColorDon'tCare == OF, в прочитанном байте в тех позициях, где цвет пиксела совпадает со значением в регистре ColorCompare, будет стоять единица.

Этот режим очень удобен для поиска точек заданного цвета.

Приведенная процедура осуществляет поиск пиксела цвета Color в строке у начиная с позиции л*. При этом используется режим чтения 1. Все байты, соот4. Работа с основными графическими устройствами ветствующие данной строке, читаются по очереди, и, как только будет получено ненулевое значение (найден по крайней мере 1 пиксел данного цвета в байте), оно возвращается.

07/File FindPxI.cpp
int findPixel (int x1, int x2, int y, int color)
{
char far * vptr = (char far *) MK_FP (OxAOOO, y*80+(x1 »3)); int cols = ( x2 » 3 ) - ( x1 » 3 ) -1; char Imask = leftMask ( x1 ); char rmask = rightMask ( x2 ); char mask;
setRWMode(1,0);
writeReg ( EGAJ3RAPHICS, EGA_COLOR__COMPARE, color); if ( cols < 0 )
return *vptr & Imask & rmask;
if ( mask = *vptr++ & Imask ) return mask;
while ( cols- > 0 ) if ( mask = *vptr++ ) return mask;
return "Vptr & rmask;
}

4.9. Режимы записи

4.9.1. Режим записи О

Это, пожалуй, самый сложный из всех рассматриваемых режимов, дающий, однако, и самые большие возможности.


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