Описание процедур и функций из библиотеки подпрограмм для работы в графическом режиме 13h (320x200 256 colors) - (GRAPHICS.ZIP).

(какой длинный заголовок получилс

Кстати, для любителей ассемблера - графические режимы.

Примечание: в следующей таблице под термином "экран" следует понимать не только активную видеостраницу, но и возможный промежуточный буфер (если используется двойная буферизация). В этом случае изображение сначала выводится в этот буфер, а затем, с помощью процедуры copy_buf_to_screen оно копируется в видеобуфер и на экране монитора можно что-нибуть увидеть.

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

Имя функции Параметры Назначение
set_mode unsigned int mode Установка графического режима через BIOS. Параметром mode задаётся номер видеорежима. Возможна установка режимов для CGA/EGA/VGA.
get_mode

-

Получение текущего видеорежима. Функция возвращает номер видеорежима.
put_pixel unsigned int x, unsigned int y, unsigned char color Установка точки на экране. Координаты точки задаются параметрами x и y. Цвет точки задаётся параметром color.
get_pixel unsigned int x, unsigned int y Получение цвета точки с заданными координатами на экране.
cls unsigned char color Очистка экрана цветом, задаваемым параметром color.
bar1 int x, int y, unsigned int w, unsigned int h, unsigned char color Рисование закрашенного прямоугольника (цвет задаётся параметром color). Координаты левого верхнего угла задаются параметрами x и y. Ширина прямоугольника (всё в пикселях) задаётся параметром w (width), а высота, соответственно, параметром h (height).
bar2 int x1, int y1, int x2, int y2, unsigned char color Рисование закрашенного прямоугольника (цвет задаётся параметром color). Координаты левого верхнего угла задаются параметрами x1 и y1. Координаты правого нижнего угла задаются параметрами x2 и y2.
rect1 int x, int y, unsigned int w, unsigned int h, unsigned char color Всё аналогично процедуре bar1, но рисуется только контур прямоугольника цветом color.
rect2 int x1, int y1, int x2, int y2, unsigned char color Всё аналогично процедуре bar2, но рисуется только контур прямоугольника цветом color.
put_render_image int x1, int y1, unsigned int w, unsigned int h, unsigned int x2, unsigned int y2, unsigned int w_, void far *buf Выводит битовый растр (типа спрайт) на экран. Имеется возможность не выводить прозрачный цвет (см. здесь). Координаты спрайта на экране задаются параметрами x и y. Параметр w задаёт ширину, с которой спрайт выводится на экран (может не совпадать с реальной шириной). Параметр h задаёт высоту, с которой спрайт выводится на экран. Параметр w_ нужен для задания реальной (!) ширины спрайта. Параметры x2 и y2 задают координаты, начиная с которых выводятся данные из спрайта на экран (координаты внутри спрайта). Параметр buf задаёт область памяти из которой будут выводиться данные на экран (адрес спрайта в памяти).
put_image int x1, int y1, unsigned int w, unsigned int h, unsigned int x2, unsigned int y2, unsigned int w_, void far *buf То же самое, что и put_render_image, но выводит на экран всё изображение, включая прозрачный цвет.
get_image int x, int y, unsigned int w, unsigned int h, void far *buf Копирует изображение с экрана в буфер. Буфер определяется параметром buf. Область экрана, с которой копируется изображение определяется параметрами x, y, w,h.
vert_line1 int x, int y, unsigned int h, unsigned char color Рисование вертикального отрезка. Начальная точка отрезка задаётся параметрами x и y, длина отрезка задаётся параметром h. Цвет отезка задаётся параметром color.
vert_line2 int x, int y1, int y2, unsigned char color Рисование вертикального отрезка. Начальная точка отрезка задаётся параметрами x и y1, конечная точка задаётся параметром только параметром y2, т.к. x2=x (отрезок ведь вертикальный. Цвет отезка задаётся параметром color.
hor_line1 int x, int y, unsigned int w, unsigned char color Рисование горизонтального отрезка. Начальная точка отрезка задаётся параметрами x и y, длина отрезка задаётся параметром w. Цвет отезка задаётся параметром color.
hor_line2 int x1, int y, int x2, unsigned char color Рисование вертикального отрезка. Начальная точка отрезка задаётся параметрами x1 и y, конечная точка задаётся параметром только параметром x2, т.к. y2=y (отрезок ведь горизонтальный. Цвет отезка задаётся параметром color.
copy_buf_to_screen void far *buf Копирование 64000 байт (320x200) из буфера, задаваемого параметром buf на экран (в данном случае под "экраном" уже подразумевается видеобуфер с адресом A000:000). Используется при двойной буферизации.
copy_buf_to_buf void far *buf1, void far *buf2 Копирование 64000 байт (320x200) из буфера, задаваемого параметром buf1 в другой буфер (buf2). Разумеется, под второй буфер должно быть выделено достаточно памяти.
copy_screen_to_buf void far *buf Копирование содержимого всего экрана (видеобуфера A000:000) в буфер, задаваемый параметром buf.
set_screen_buf void far *buf Установка буфера (параметр buf), в который все процедуры будут выводить результаты своей работы. Если не предполагается использовать двойную буферизацию, то указатель buf должен указывать на начало видеобуфера (word ptr buf = 0000h, word ptr buf + 2 = A000h).
free_screen_buf

-

Освобождение промежуточного буфера (см set_screen_buf). Если не использовалась двойная буферизация, то использовать данную процедуру не нужно.
vert_ret

-

Очень полезная процедура. Ожидает обратного хода луча системы развёртки монитора. Возвращает управление вызвавшей программе после того, как данное событие произошло. Может использоваться для синхронизации процедуры вывода изображения со сменой кадров на экране монитора. Если изображение должно перемещаться на экране, то получается очень плавное движение.
set_rgb unsigned char n, unsigned char r, unsigned char g, unsigned char b Установка одного цвета палитры (модификация регистров DAC видеоадаптера). Параметр n определяет номер цвета, который будет изменён. Параметры r, g, b определяют соответственно красную, зелёную и синюю составляющие цвета в цветовой модели RGB (значение каждой составляющей может быть как для True Color - от 0 до 255.
get_rgb unsigned char n, RGB &color Получение цветовых составляющих заданного цвета (параметр n). Цветовые составляющие записываются в структуру RGB (см. здесь).
set_pal_768 unsigned char *pal Установка цветовых составляющих всех цветов палитры (их 256) из буфера размером 768 байт (удобно при работе с PCX). Получается по три байта на каждый цвет. Буфер задаётся параметром buf.
set_pal_1024 unsigned char *pal Установка цветовых составляющих всех цветов палитры из буфера размером 1024 байт (удобно при работе с BMP256). Получается по три байта на каждый цвет и ещё один байт со значением 0 (зарезервирован). Буфер задаётся параметром buf.
get_pal_768 unsigned char *pal Получение цветовых составляющих всех цветов палитры в буфер размером 768 байт. Получается по три байта для каждого цвета. Буфер задаётся параметром buf.
get_pal_1024 unsigned char *pal Получение цветовых составляющих всех цветов палитры в буфер размером 1024 байт. Получается по три байта на каждый цвет и ещё один байт со значением 0 (зарезервирован). Буфер задаётся параметром buf.
out_char int x, int y, unsigned char ch, unsigned char color Вывод символа с использованием растрового шрифта. Параметры x и y задают координаты символа на экране, параметр ch задаёт символ из таблицы EBCDIC (расширенная ASCII - 8 бит). Параметр color задаёт цвет символа. О работе со шрифтом см. здесь.
out_string int x, int y, char *s, unsigned char color Вывод строки символов с использованием растрового шрифта. Параметры x и y задают координаты строки на экране, параметр s задаёт положение null terminated string в памяти (типа указатель на строку). Параметр color задаёт цвет строки.
out_size_char int x, int y, unsigned char ch, unsigned char color, unsigned char scale_x, unsigned char scale_y То же самое, что и out_char, но размер символа можно изменять. Параметр scale_x задаёт размер по горизонтали (в пикселях) одного "пикселя" символа (если шрифт 8x8, а scale_x=2, то ширина символа будет не 8, а 16 пикселей). Параметр scale_y задаёт размер по вертикали (в пикселях) одного "пикселя" символа.
out_size_string int x, int y, char *s, unsigned char color, unsigned char scale_x, unsigned char scale_y Вывод строки символов (см. out_string) с использованием out_size_char. Параметры scale_x и scale_y определяют ширину и высоту каждого символа в строке.

Описание глобальных переменных.

Имя переменной Тип переменной Назначение
font void far * определяет положение растрового шрифта в памяти
RENDER_COLOR unsigned char определяет значение "прозрачного" цвета (для процедуры put_render_image).
FONT_HEIGHT unsigned char определяет высоту шрифта (в пикселях) для процедур работы с текстом

Описание структуры RGB.

Название поля Тип Назначение
r unsigned char красная составляющая цвета
g unsigned char зелёная составляющая цвета
b unsigned char синяя составляющая цвета

Несколько слов о работе со шрифтами.

Досовский растровый шрифт представляет собой файл (обычно с расширением .fnt) который имеет следующюю структуру:

блок 1
блок 2

...

...

...

блок 256

Каждый блок занимает столько байт, какую высоту имеет символ в конкретном шрифте (бывают высоты 8, 14 и 16 пикселей и блок занимает соответственно 8, 14 и 16 байт). Ширина символа в досовском шрифте всегда равна 8 пикселям, что позволяет кодировать каждую строку символа одним байтом. Установленные биты в таком байте означают, что соответствующая точка видна на экране. Для примера ниже показано, как кодируется буква A (латинская) в шрифте 8x16:

0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 1 1 0 0 0
0 0 1 0 0 1 0 0
0 1 0 0 0 0 1 0
0 1 0 0 0 0 1 0
0 1 0 0 0 0 1 0
0 1 0 0 0 0 1 0
0 1 0 0 0 0 1 0
0 1 1 1 1 1 1 0
0 1 0 0 0 0 1 0
0 1 0 0 0 0 1 0
0 1 0 0 0 0 1 0
0 1 0 0 0 0 1 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

Байты, которыми будет кодироваться буква A будут следующими: 0h,0h,18h,24h,42h,42h,42h,42h,7Eh,42h,42h,42h,42h.

Для загрузки подобного шрифта в память нужно прочитать 256*height из файла, где height - высота шрифта в пикселях (8, 14 или 16). Следующий фрагмент кода на C++ показывает как практически реализовать всё вышеописанное:

#include <iostream.h>

#include <stdlib.h>

#define HEIGHT 16

...

...

...

ifstream in("font.fnt", ios::binary);

char *buf = new char[256 * HEIGHT];

if (!in)

{

cout << "Невозможно открыть файл \n";

exit(1);

}

in.read(buf, 256 * HEIGHT);

in.close();

..

..

..

 

Возврат к разделу "Библиотеки"Переход на главную страницу

Copyright © 1999 by HackMaster

Hosted by uCoz