Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#13| Storm King
Demon's Souls |#11| Мaneater part 2
Demon's Souls |#10| Мaneater (part 1)
Demon's Souls |#9| Heart of surprises

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Различные авторы Весь текст 2311.07 Kb

Программирование и кодирование

Предыдущая страница Следующая страница
1 ... 130 131 132 133 134 135 136  137 138 139 140 141 142 143 ... 198
         ла в последний раз регистр выбора чтения  матрицы устанавливается
         в 0, значение по умолчанию.

          Листинг 9-7. Программа, возвращающая цвет элемента изображения
         -----------------------------------------------------------------

         /* возвращает цвет элемента изображения */
         int readdot(row,col)
         int row,col;
         {
            registr color = 0 ;
            registr latch ;
            unsigned char far *rgen = (char far *)(0xA0000000L +
                                      (col >> 3) +
                                      (row * GET_CRT_COLS())) ;
            int bit_number = (col & 7)^7 ;
            int bit_mask = (1 << bit_number) ;
            int plane ;
            /* Пройти через каждый массив 3, 2, 1, 0 */
            for(plane = 3; plane >= 0; plane--)
            {
               EGA_GRFX(4,plane) ;           /* выбрать массив */
               latch = *(rgen) & bit_mask ;  /* бит из этого массива */
               latch >>= bit_number ;        /* выровнять справа */
               color <<= 1 ;            /* место для следующего бита */
               color |= latch ;         /* прибавить бит */
            }
            return(color) ;
         }
         ----------------------------------------------------------------

                               Цветовые палитры EGA

             При использовании  с усовершенствованным цветным дисплеем EGA
         может отображать любые  16  цветов  из  64-цветной  палитры.  Для
         представления  16  цветов требуется 4 бита.  Каждый из этих битов
         соответствует одной из четырех битовых матриц EGA.  В режиме  CGA
         или в исходной палитре EGA 4 бита соответствуют красному, зелено-
         му, синему  ярким   цветам,  что обычно описывается IRGB.  Но как
         только исходная палитра EGA изменится, то 4-битовый код цвета бу-
         дет представлять собой просто индекс новой палитры.
             64-цветная палитра имеет те же три  основных  цвета  (красный,
         зеленый,   синий),  что  и  16-цветная  палитра,  но  бит  яркости
         отсутствует.  Вместо него каждый цвет имеет 2 бита для яркости от-
         дельного цвета,  что дает три уровня яркости каждого цвета.  Таким
         образом 64-цветная палитра может быть  представлена  6  битами  (3
         цвета  х  2 бита/цвет).  Биты меньшей яркости трех цветов являются
         самыми значимыми битами в 6-битовом значении  и  аббревиатура  rgb
         соответствует  красному,  зеленому  и синему цветам малой яркости.
         Самые незначимые 3 бита представляют красный, зеленый и синий цве-
         та  высокой  яркости  и  им соответствует аббревиатура RGB.  Общее
         6-битовое значение,  rgbRGB   используется для выбора одного из 64

                                      - 9-26 -
         цветов. Как только один из 16  отображаемых  цветов  установлен  в
         значение rgbRGB,  этот цвет может быть выбран с помощью 4-битового
         значения  IRGB.  Биты  значения  rgbRGB  будут  всегда  показывать
         красный,  зеленый и синий компоненты результирующего цвета,  но  с
         подключенным усовершенствованным цветным дисплеем,  значение  IRGB
         является просто индексом текущей палитры.
             Цвета rgbRGB могут применяться только с  EGA,  подключенным  к
         расширенному  цветному  монитору.  Когда  EGA подключен к цветному
         дисплею, могут использоваться только 16 цветов исходной палитры. В
         текстовых режимах и графических режимах EGA отдельные регистры па-
         литры могут быть установлены в любой из 16 исходных цветов.  В ре-
         жимах,  совместимых с CGA, палитра должна изменяться с использова-
         нием CGA-совместимых вызовов BIOS.
             EGA также  имеет  регистр  выходящей  строки развертки.  Цвет,
         посылаемый в этот регистр, отображается как граница. Тем не менее,
         выходящая  строка развертки приемлема только в режимах с 200 стро-
         ками развертки.
             Регистры палитры  EGA чаще всего устанавливаются с помощью но-
         вых вызовов EGA BIOS.  Вызов BIOS может установить или один из  16
         цветов, или все 16 цветов сразу. Вызов BIOS является функцией 0х10
         прерывания 0х10.  Имеется четыре подфункции:  0 устанавливает  от-
         дельные регистры палитры в любое значение rgbRGB (или в любое зна-
         чение IRGB,  если EGA не подключен к усовершенствованному цветному
         дисплею),  1  устанавливает регистр выходящей строки развертки,  2
         устанавливает все регистры палитры и регистр выходящей строки раз-
         вертки,  и  4  служит  переключателем между мерцанием текста и яр-
         костью. Подфункция выбирается в регистре AL.

                                Установить палитру

             Результат:  Int   0x10
             Вызывается: AH =  0х10
                         AL =  0, Установить отдельный регистр палитры
                         BL =  Изменяемый номер цвета (IRGB)
                         BH =  Установить значение rgbRGB
                         AL =  1, Установить регистр выходящей строки
                               развертки
                         BH =  Номер устанавливаемого цвета
                         AL =  2, Установить все регистры палитры и ре-
                               гистр выходящей строки развертки
                               ES:DX указывает на 17-байтовую таблицу
                               Байты 0 - 15 имеют 16 значений rgbRGB для
                               цветов 0 - 15
                               Байт 16 является номером цвета для ре-
                               гистра выходящей строки развертки
                         AL =  3, Переключает бит яркость/мерцание
                               Меняет значение бита 7 байта атрибута
                               текста
                         BL =  0, Разрешает яркость фона
                         BL =  1, Разрешает мерцание переднего плана
             К сожалению,  регистры палитры  EGA  только  записываемые.  В
         обычном  состоянии  невозможно определить,  какое значение rgbRGB
         представляет заданный номер цвета. При изменении регистров палит-
         ры EGA BIOS проверит наличие 256-байтовой таблицы, называемой об-
         ластью сохранения параметров.  Если эта таблица имеется,  то BIOS
         сохранит в ней значения rgbRGB. Здесь не рассматривается создание
         и сопровождение области сохранения параметров, но важно использо-

                                      - 9-27 -
         вать  вызовы BIOS для установки палитры таким образом,  чтобы эта
         таблица параметров обновлялась.
             VGA имеет  считываемые/записываемые регистры палитры, поэтому
         отдельные цвета rgbRGB могут быть определены чтением соответству-
         ющего регистра палитры.  VGA также имеет более широкую палитру, в
         которой любой из 16 отображаемых цветов может быть цветом из  па-
         литры 262.144  возможных цветов. Вместо 2 битов на цвет в EGA, VGA
         использует 6 битов на цвет (2 х 3 цвета = 262.144 цвета).
             Программа, представленная  в листинге 9-8,  демонстрирует ис-
         пользование регистров палитры.  Эта программа работает  только  в
         сочетании  EGA  с усовершенствованным цветным дисплеем (или VGA).
         Сначала программа,  применяя функцию rect() программы 9-5, начер-
         тит  16  цветных прямоугольников.  Затем палитра будет непрерывно
         меняться.

                         Листинг 9-8. Программа PALETTE.C
         ---------------------------------------------------------------

         /* palette.c */
         /* Демонстрирует палитру 64 цветов */
         #include 
         #include 
         #include 
         #include "ega.h"

         void set_all_pal(char*) ;
         void gotoXY(int,int) ;
         main()
         {
         int i,j,ch = 0;
         char palette[17] ;  /* эта матрица содержит палитру */
         set_crt_mode(16) ;  /* имейте правильный монитор! */

         /* Начертить несколько цветных штрихов: */
         printf("\nЦвет #:\n") ;
         for (i=0,j=0;i<16;++i,j+=40)
         {
            printf (" %2i ",i);
            rect(50,j,300,j+39,i);    /* из программы 9-5 */
            palette[i] = (char)i ;    /* инициализировать матрицу */
         }
            gotoXY(15,22) ;
            printf("rgbRGB цвета 7") ;
            printf("%c%c%c%c%c%c",205,205,205,205,205,190) ;
            gotoXY(20,0) ;
            printf("Нажмите Space для одного пробела, Esc для выхода");

            palette[16] = (char)0 ;
            while(ch != 27)          /* пока не нажата клавиша Esc */
               {
               if (kbhit())          /* если клавиша нажата, */
                 ch = getch() ;      /* принять символ */
               for (i = 1; i<=15; ++i)
                 {
                    palette[i]++;
                    if (palette[i] == 64)
                    /* максимальное значение rgbRGB */

                                      - 9-28 -
                        palette[i] = 1 ;
                 }
                 set_all_pal(palette) ;   /* установить палитру */
                 gotoXY(15,23) ;
                 /* Перевести значение rgbRGB в двоичное */
                 for(i = 5;i>=0; --i)
                 if(palette[7] & 1<
Предыдущая страница Следующая страница
1 ... 130 131 132 133 134 135 136  137 138 139 140 141 142 143 ... 198
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 

Реклама