Скачиваний:
201
Добавлен:
17.06.2016
Размер:
2.69 Mб
Скачать

Управление пикселами и образами

Помимо функций черчения и рисования, графическая система BGI предос-

тавляет возможность использования некоторых предикатов в целях управления

состоянием образов и пикселов.

Так вы можете выделить и сохранить часть экранного образа, используя

getimage, вызвать imagesize для подсчета количества байтов, необходимых

для записи выделенного образа в память и, затем, поместить записанный об-

раз на экране (в любой произвольной его части, по желанию) посредством

предиката putimage. Образ экрана хранится в виде строки, так что вы имее-

те возможность обращаться с ним точно так же, как и с любыми другими пе-

ременными, но при этом не можете переписывать рассматриваемый образ из

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

ностью наличия нескольких последовательных нулей (другими словами, нуле-

вого байта) в записи образа, что в Турбо Прологе обозначает конец выход-

ного потока или базы данных.

Вы можете управлять цветом отдельных пикселов при помощи предикатов

getpixel (который выводит цвет цвет заданного пиксела) и putpixel (кото-

рый изображает указанный пиксел заданным цветом).

Предикаты

В этом разделе мы дадим краткое описание всех предикатов BGI, ис-

пользуемых для управления состоянием пикселов и образов. Более полное

описание находится в разделе "Стандартные Предикаты" в "Справочном Руко-

водстве по Турбо Прологу".

getpixel/3

getpixel возвращает цвет пиксела, расположенного в точке (X,Y).

getpixel(X, Y, Color) /*(i,i,o)*/

(integer, integer, integer)

putpixel/3

putpixel строит изображение пиксела в точке (X,Y) цветом PixelColor.

putpixel(X, Y, PixelColor) /*(i,i,i)*/

(integer, integer, integer)

getimage/5

getimage сохраняет битовый образ описанной области в памяти.

getimage(Left, Top, Right, Bottom, BitMap) /*(i,i,i,i,o)*/

(integer, integer, integer, integer, integer)

imagesize/5

imagesize выдает количество байтов, необходимых для записи прямоу-

гольной области экрана.

imagesize(Left, Top, Right, Bottom, Size) /*(i,i,i,i,o)*/

(integer, integer, integer, integer, integer)

putimage/4

putimage строит изображение предварительно сохраненного битового об-

раза на экране.

putimage(X, Y, BitMap, Operation) /*(i,i,i,i)*/

(integer, integer, integer, integer)

Файл GRAPDECL.PRO определяет постоянные, которые допустимы к исполь-

зованию в качестве аргумента Operation - инструкции, определяющей как

сохраненный образ будет накладываться на заданную область экрана.

Использование BGI с RGB графическими картами

Графические карты IBM-8514 и VGA с 256К цветоотображением являются

"RGB" (т.е. "красный - зеленый - голубой" - "Red - Green - Blue") графи-

ческими картами. Обе предоставляют возможность использования палитры в

256 цветов из списка 256К цветов. Цвета палитры определяются многочислен-

ными сочетаниями красного, зеленого и голубого цветов различной интенсив-

ности.

Карта IBM-8514 является графической картой высокого разрешения -

вплоть до 1024*768 пикселов. Имя файла ее BGI-драйвера - IBM8514.BGI.

BGI-логическая система автоматического распознавания не в состоянии долж-

ным образом идентифицировать IBM-8514-графическую карту. Она будет опоз-

навать ее как VGA при работе в режиме vgaHI. Для использования карты IBM

-8514, аргумент GrDriver предиката initgraph должен соответствовать зна-

чению величины ibm8514 (которое определяется в GRAPDECL.PRO), когда ваша

программа инициализирует BGI. Используя IBM-8514, вам не следует вызывать

detectgraph (или initgraph при GrDriver в положении detect), если не же-

лаете войти в режим, подобный режиму VGA низкого разрешения.

Режимами, поддерживаемыми IBM-8514-картой, являются ibm8514LO

(640*480 пикселов) и ibm8514HI (1024*768 пикселов). Оба режима задаются

константами в GRAPDECL.PRO.

IBM-8514 использует три 6-битовые величины для определения цветов.

каждый определенный цвет имеет по 6-битовой красной, зеленой и голубой

компоненте. Предикат setgrbpalette позволяет задать цвет для IBM-8514.

setrgbpalette(Index,RedComp,GreenComp,BlueComp) /*(i,i,i,i)*/

(integer, integer, integer, integer)

Аргумент Index определяет значение точки входа в палитру, которую

необходимо загрузить. Index является целой переменной со значением, лежа-

щим в диапазоне 0 - 225. Аргументы RedComp, GreenComp и BlueComp задают

компоненты цветов для данной точки входа в палитру. Лишь самый нижний

байт каждой из величин используется и в этом байте всего 6 значимых бит

загружается в палитру.

Соседние файлы в папке Документация