Расширенные графические возможности Борланд Паскаля.
Борланд Паскаль- отличное средство разработки программ на паскале. В нем реализовано множество функций по работе с текстом и файлами.
Но графические возможности проработаны не так хорошо: все ограничивается 640*480*16, квадратиками, кружочками, линиями. И это является непреодолимым рубежом для всех начинающих программистов - паскалистов. В этой статье мы попытаемся преодалеть этот рубеж.
Стандартная паскалевская графика.
1. Библиотека GRAPH256.
Основным назначением библиотеки, как видно из названия, является поддержка палитры из 256 цветов. Библиотека является расширением библиотеки GRAPH, поэтому для работы нужно подключить их обе.
Графический режим подключается командой Graphic256, которую надо писать вместо Initgraph. Команда Graphic256 также задает каждый цвет новой палитры, и эти цвета расположены таким образом:
0-16 те же, что и в 16-ти цветовом режиме.
16-31 различные оттенки серого, где 16-черный, а 31-белый.
Остальные цвета разделены на три части, где каждая следующая - это более темная предыдущая
Все цвета палитры.
Цвета переключаются с помощью стандартной команды Setcolor.
Для работы этого графического модуля, нужно чтобы в одной папке с программой находился фаил Svga256.bgi или Egavga.bgi.
Библиотека Graph256 не ограничивается одной командой, в ней есть и другие интересные, на мой взгляд, команды.
Команда Wait_sync будет необходима тем, кто пишет игры с графикой. Дело в том, что в паскале (а также в бейсике, си, делфи) прорисовка изображения не совпадает с прорисовкой экрана.
Поэтому изображение появляется не сразу, а по частям: сначала верхняя часть, а потом все остальное. Из-за этого при движении изображения происходит его мерцание, а если интервал между двумя прорисовками меньше, чем время обновления экрана,
то картинка вообще может полностью отображаться (Это похоже на то, когда видеокамерой снимаешь элт - телевизор. В этом случае скорость обновления видеокамеры не совпадает со скоростью обновления телевизора.)
Команда Wayt_sync устраняет эти недостатки. Она ждет начала прорисовки экрана, для того, чтобы на прорисовку рисунка осталось больше времени. Писать ее следует перед командой рисования (например Putimage).
К сожалению, эта команда действует только на маленькие изображения. У больших изображений верняя часть не моргает, а нижняя- мерцает как обычно, поэтому большие картинки лучше не использовать в анимации.
Также GRAPH256 имеет функцию Rememberimage. Правда в стандартном модуле GRAPH уже есть эта же функция, здесь она немного изменена.
Команда имеет такой формат: Rememberimage(x1,y1,x2,y2,p),
где x1,y1,x2,y2 - координаты прямоугольника, внутри которого находится изображение.
P - указатель области памяти, в которую копируется изображение. Имеет тип Pointer.
В этой команде из стандартной библиотеки вместо типа Pointer используется тип Bitmap и там приходится перед командой запоминания изображения создавать объект Tbitmap и настраивать его ширину и высоту.
В нашем случае вся подготовка уже вложена в процедуру, а P- это указатель на BitMap, который содержит изображение.
Далее в программе его можно использовать также, как и битмап, но со значком ^ (например Putimage(100,50,p^,copyput);)
Еще в этой библиотеке есть функция Waitgraph. Это аналог C:=Readkey, только она не возвращает результат, а просто ждет нажатия какой-нибудь клавиши. Ее можно использовать вместо Readln, потому, что он ждет нажатия только на enter, то здесь можно нажать любую клавишу, и выполнение программы продолжится.
1. Библиотека Bmpview.
Эта библиотека, как видно из названия, предназначена для открытия BMP-файлов.
И это действительно удобно, так как не надо рисовать изображение по линиям и точкам, а можно просто нарисовать картинку в Paint'e, и загрузить его в свою программу.
Библиотека имеет всего одну функцию: Bmppas. Она выполняет загрузку изображения в программу. Комманда имеет следующий формат:
Bmppas(c ,filename, x, y), где
C-смещение. оно определяется индивидуально для каждого рисунка и методом тыка. Обычно оно бывает в диапазоне -2...2
Различные смещения.
Filename- путь к bmp файлу. Открываемый фаил должен быть в 256-и цветовом режиме. Даже если в нем 16 цветов или же он монохромный, его надо перевести в 256-и цветовой режим, а то он будет отображаться некорректно.
X, Y -это ширина и высота рисунка.
После выполнения этой команды, в левом верхнем углу экрана появится рисунок. Правда вначале будет задержка, а потом уже начнет прорисовываться сам рисунок. Все это происходит достаточно медленно, например, на pentium-200 рисунок размером 250*250 загружался где-то три секунды.
Также у этой библиотеки есть один минус: при загрузке картинки, она изменяет все цвета палитры, поэтому все, что было нарисовано ранее, поменяет цвета. Это значит, что картинки, загруженные этой же библиотекой, станут непригодными для использования, и чтобы загрузить несколько картинок, надо в одном BMP фаиле надо нарисовать все рисунки, которые будут использоваться в программе, а также несколько точек разного цвета, чтобы знать какой цвет под каким номером находится.
Пример загрузки
7. Dasaev Demo Guide.
Demo Guide это программа, содержащая набор различных графических эффектов с исходниками и описаниями. Здесь содержится много сложных синусоидальных, матричных,
3D эффектов. Все они написаны на паскале и являются библиотеками. Получить исходники можно нажав на кнопку «получить описание». После этого нужно нажать F2 и исходник появится в виде PAS файла в папке с программой. Чтобы использовать его в своей программе, надо эту библиотеку скомпилировать, найти запускающую процедуру, записать имя библиотеки в uses, и только тогда вписать запускающую процедуру в свой код.
Это сделано для того, чтобы не грузить программный код, так как листинги эффектов очень большие и будет трудно разобраться, где программа, а где эффект.
Все демки используют свою библиотеку на 256 цветов и имеют разрешение 320*240, поэтому при совместном использовании библиотеки Graph256 могут возникнуть глюки, поэтому перед проигрыванием эффекта, графический режим лучше отключать, а после - включать.
Оригинальный DemoGuide не поддерживает быстрых процессоров, и выдает Runtime error 200 (это глюк всех паскалевских программ, так как паскаль использует в качестве пауз циклы, а не таймер, а быстрые процессоры обходят пустые циклы и выдают ошибку деления на ноль)
, поэтому он идет только на pentium 200 или ниже. Однако я пропатчил программу, и теперь она идет на более мощных компьютерах, но некоторые эффекты идут слишком быстро, что легко решается модификацией исходного кода.
Ссылки:
Dasaev Demo Guide
Библиотека Graph256, Bmpwiev и пример использования