Организация и функционирование компьютеров
bf1271d8

Вывод на дисплей в текстовом и графическом режиме


Стандартный экран монитора состоит из отдельных точек - пикселов. Каждый пиксел может быть окрашен в определенный цвет. Обычно это один из 24=16 цветов. В более совершенных компьютерах пиксел можно окрасить в 28=256 цветов. Если используется 16 цветов, то для описания цвета пиксела требуется 4 байта. При стандартном размере экрана 640*480 пикселов для полного описания экрана требуется 153.6Кб.

Монитор может работать в двух режимах - текстовом и графическом. В графическом режиме можно управлять окраской каждого пиксела в отдельности. В текстовом режиме экран разбивается на строки и столбцы (обычно 25 строк и 80 столбцов), и в каждой клетке изображается символ (один из 256). Изображения символов хранятся в специальной таблице, называемой знакогенератором, и представляют собой совокупность выделенных клеток в прямоугольной матрице.

Состояние экрана задается строкой из 80*25*2=4000 байтов - по два байта на каждый символ. Первый байт - это код символа, первые четыре бита второго байта - это цвет символа (всего возможно 24=16 цветов), другие четыре бита второго байта - это цвет фона, на котором нарисован символ (всего возможно 23=8 цветов, еще один бит задает мерцание символа). Содержимое строки хранится в специальном разделе оперативной памяти, называемом видеопамятью. Физически видеопамять входит в состав монитора, а логически ей зерезервировано место в оперативной памяти (с адресами от A000 до DFFF  в 16-ричной системе счисления). Содержимое видеопамяти можно менять программным образом. Параллельно электронная трубка с определенной тактовой частотой выводит содержимое видеопамяти на экран монитора, формируя изображение.

Для изменения содержимого видеопамяти в текстовом режиме в Турбо-Паскале предусмотрен ряд процедур и функций. Перечислим основные из них (кроме функции write, описанной ранее).

Процедура window(l,u,r,d) устанавливает активное окно экрана, занимающее область от u-ой до d-ой строки и от l-ого до r-ого столбца включительно. После вызова процедуры window во всех процедурах вывода на экран текстовой информации номер строки и номер столбца отсчитывается от верхнего левого угла окна и действителен только в пределах окна.


Процедура textcolor(k)  устанавливает текущий цвет символа, где k - число от 0 до 15, нумерующее один из цветов символа (если k>15, то берется остаток от деления на 16).
Процедура textbackground(k) устанавливает текущий цвет фона (k от 0 до 7).
Процедура clrscr очищает окно с установленным цветом фона.
Процедура gotoxy(j,k) устанавливает курсор в к-ой строке и j-ом столбце (строки нумеруются от 1 до 25, столбцы - от 1 до 80).
Функции wherey и wherex (без параметров) возвращают номер строки и столбца текущего положения курсора.
В графическом режиме координаты пиксела на экране задаются номером столбца (от 0 до максимального значения) и номером строки (от 0 до максимального значения). Каждый пиксел может иметь один из 24=16 цветов и задается половиной байта. Итого для изображения цветного экрана при размере экрана 640*480 необходимо 153.6Кб. В принципе программным путем можно управлять светимостью каждого пиксела в отдельности, однако обычно на экране закрашиваются целые области. Как и в случае текстового режима, в Турбо-Паскале для управления изображением предусмотрен ряд процедур и функций.
Связка из вызовов двух процедур


detectgraph(graphdriver,graphmode);
initgraph (graphdriver,graphmode,’ ’);
автоматически определяет на диске файл программы работы с графическим экраном (файл драйвера экрана) и переводит монитор в графический режим работы с экраном, использующий этот драйвер. В зависимости от драйвера экран может иметь разное число строк и столбцов. Процедура сloseпraph прекращает работу с экраном в текстовом режиме и возвращает монитор в текстовой режим.
Функции getmaxy и getmaxx
возвращают максимальное число строк и столбцов экрана, используемых в текущем графическом режиме.
Процедура setviewport(l,u,r,d,w) устанавливает активное графическое окно экрана, занимающее область от u-ой до d-ой строки и от l-ого до r-ого столбца включительно. После вызова процедуры setviewport во всех процедурах вывода на экран графической информации номер строки и номер столбца пиксела отсчитываются от верхнего левого угла окна и действительны только в пределах окна.


Параметр w определяет характер вывода изображений в окне: если w=true, то изображение усекается, а если w=false, то изображение продолжается за границы окна.
Процедура setcolor(k)  устанавливает в качестве текущего цвет с номером k (число от 0 до 15). Этот цвет используется в дальнейшем для рисования всех линий (прямых, дуг, многоугольников, окружностей).
Процедура setbkcolor(k)  устанавливает в качестве цвета фона цвет с номером k (число от 0 до 15). В результате действия процедуры изменяется цвет всех тех областей окна, которые служат фоном изображения.
Процедура setlinestyle(<вид линии>,<образец линии>,<толщина>) устанавливает стиль проведения линий, прямоугольников и многоугольников. Целые константы <вид линии> и <образец линии> задают сплошную, точечную или пунктирную и т.п. линии, <толщина> в пикселах равна 1 или 3. Установленный стиль используется при проведении линий до тех пор, пока он снова не изменится.
Процедура setfillstyle (<штриховка>,k) устанавливает вид и цвет узора, которым будут заполняться области на экране. Узор представляет собой рисунок цвета k
на фоне, установленном процедурой setbkcolor. Значение штриховки, равное 0, соответствует отсутствию узора вообще, значение 1 обозначает сплошное закрашивание цветом узора.
Процедура cleardevice устанавливает положение окна и всех параметров рисования и заполнения в исходное состояние (например, окно во весь экран и черный цвет для фона).
Процедура clearviewport очищает окно черным цветом.
Процедура moveto(x,y) устанавливает курсор в y-ой строке и x-ом столбце. Процедура moverel(dx,dy) сдвигает положение курсора на dx столбцов вправо и dy строк вниз.
Функции gety и getx (без параметров) возвращают номер строки и столбца текущего положения курсора.
Процедура putpixel(x,y,k)
окрашивает пиксел в y-ой строке и x-ом столбце в цвет с номером k.
Функция getpixel(x,y)
возвращает цвет пиксела в y-ой строке и x-ом столбце.
Процедура line(lx,ly,rx,ry)


вычерчивает линию от точки с координатами (ly,lx) до точки (ry,rx)
текущим цветом и текущим стилем. Процедура lineto(x,y) вычерчивает линию от текущего положения курсора до точки (y,x). Процедура linerel(dx,dy)
вычерчивает линию от текущего положения курсора до точки, сдвинутой на dy
строк и dx столбцов вправо.
Процедура rectangle(lx,ly,rx,ry)
вычерчивает текущим цветом и текущим стилем прямоугольник, левый верхний угол которого имеет координаты (ly,lx), а правый нижний угол - координаты (ry,rx).
Процедура circle(x,y,r)
вычерчивает текущим цветом и сплошной линией текущей толщины окружность с центром в точке с координатами (y,x) и радиусом r.
Процедура arc(x,y,a,b,r)
вычерчивает дугу окружности с центром в точке (y,x) и радиуса r
от начального угла a до конечного угла b. Углы отсчитываются в градусах против часовой стрелки.
Процедура floodfill (x,y,k)
закрашивает заданным узором замкнутую область, ограниченную контуром цвета k, внутри которого лежит точка с координатами (y,x). Если такого контура нет, то будет закрашено все окно.

Содержание раздела