Главная / Решение задач компьютерной графики в системе Turbo Pascal (статьи)

Содержание
1. Теоретические сведения

1.1. Библиотечный модуль Graph.

Для решения графических задач в языке Turbo Pascal предназначен стандартный библиотечный модуль Graph. Модуль Graph представляет собой библиотеку подпрограмм, обеспечивающую полное управление графическими режимами различных адаптеров дисплеев. В нем содержится 79 графических процедур, функций, десятки стандартных констант и типов данных. Все они составляют единый комплекс средств, позволяющих разрабатывать профессиональные программные продукты. Подключение модуля Graph к пользовательской программе осуществляется стандартным способом - с помощью зарезервированного слова USES:

Пример:
USES GRAPH;


После чего все графические средства языка Turbo Pascal доступны пользователю.
Чтобы запустить программу, использующую процедуры модуля Graph, необходимо, чтобы в рабочем каталоге находились соответствующие графические драйверы (файлы с расширением BGI), а если программа использует еще и штриховые шрифты, то необходимо, чтобы там же находились файлы шрифтов (с расширением CHR). Кроме того, в системе программирования (компилятору) должен быть доступен модуль GRAPH.TPU. Файл BGI представляет собой графический интерфейс (Borland Graphic Interface) фирмы Borland. Он обеспечивает взаимодействие программ с графическими устройствами. Перед работой программы в графических режимах дисплея процедура InitGraph определяет тип видеоадаптера ПЭВМ, и загружает в память соответствующий BGI-драйвер, в котором определены возможные режимы работы. Процедура CloseGraph выгружает графический драйвер из памяти и восстанавливает текстовый режим работы видеоадаптера. Таким образом для работы в графическом режиме в рабочем каталоге должен находиться требуемый файл графического драйвера (обычно используют файл EGAVGA.BGI).
Все процедуры и функции модуля Graph по функциональному назначению можно разделить на следующие группы:
  1. Процедуры управления графическим режимом

    CloseGraph Прекращение работы графического режима
    DetectGraph Проверка оборудования и режима
    GetModeRange Получение минимального и максимального номера графического режима
    GraphDefaults Сброс параметров графического режима
    InitGraph Инициализация графического режима
    RestoreCrtMode Возвращение в текстовый режим
    SetGraphBufSize Изменение размера графического буфера
    SetGraphMode Вход в графический режим и очистка экрана

  2. Функции управления графическим режимом

    GetGraphMode Получение номера текущего режима
    GetMaxMode Максимальное число режимов текущего драйвера
    GetModeName Получение имени заданного графического режима
    GraphErrorMsg Формирование сообщения об ошибке
    GraphResult Получение кода ошибки
    GetDriverName Получение имени текущего драйвера
    InstallUserDriver Размещение драйвера в таблице
    InstallUserFont Установка нового шрифта
    RegisterBGIdriver Регистрация драйвера
    RegisterBGIfont Регистрация шрифта

  3. Процедуры управления экраном, окном, страницей

    ClearDevice Очистка графического экрана
    ClearViewPort Очистка графического окна
    GetAspectRatio Получение относительного масштаба изображения по горизонтали и вертикали
    GetViewSettings Получение параметров текущего графического окна
    SetActivePage Задание активной страницы
    SetAspectRatio Изменение относительного масштаба изображения по горизонтали и вертикали
    SetViewPort Задание размеров окна
    SetVisualPage Задание отображаемой на экране страницы

  4. Процедуры управления цветом и палитрой

    GetDefaultPalette Получение исходных параметров палитры
    GetPalette Получение параметров палитры
    SetAllPalette Задание всех цветов палитры
    SetBkColor Задание цвета фона экрана
    SetColor Задание текущего цвета
    SetPalete Задание одного цвета палитры
    SetRGBPalette Задание палитры для адаптеров IBM - 8514 и VGA

  5. Функции управления цветом и палитрой

    GetBkColor Получение цвета фона
    GetColor Получение текущего цвета
    GetMaxColor Получение максимального кода цвета
    GetPaletteSize Получение количества цветов в палитре

  6. Функции работы с точками

    GetMaxX Получение максимального значения координаты X
    GetMaxY Получение максимального значения координаты Y
    GetPixel Получение цвета пиксела активной страницы
    GetX Получение координаты X текущей позиции на экране
    GetY Получение координаты Y текущей позиции на экране

  7. Процедуры работы с точками

    PutPixel Помещение пиксела в активную страницу

  8. Процедуры работы с линиями

    GetLineSettings Получение параметров линии
    Line Построение линии от одной точки до другой
    LineRel Построение линии с относительными координатами
    LineTo Построение линии с абсолютными координатами
    LineToMoveRel Перемещение указателя в точку с относительными координатами
    LineToMoveTo Перемещение указателя в точку с абсолютными координатами
    LineToSetLineStyle Задание характеристик линии
    LineToSetWriteMode Задание способа построения линии

  9. Процедуры построения фигур из линий

    LineToBar Построение закрашенного прямоугольника
    LineToBar3D Построение закрашенного параллепипеда
    LineToDrawPoly Построение многоугольника
    LineToFillPoly Построение закрашенного многоугольника
    LineToFloodFill Заполнение области текущим орнаментом
    LineToGetFillPattern Получение орнамента заполнения фигур
    LineToGetFillSettings Получение параметров заполнения фигур
    LineToRectangle Построение прямоугольника
    LineToSetFillPattern Задание произвольных параметров заполнения фигур
    LineToSetFillStyle Задание стандартных параметров заполнения фигур

  10. Процедуры построения криволинейных фигур

    LineToArc Построение дуги окружности
    LineToCircle Построение окружности
    LineToEllipse Построение дуги эллипса
    LineToFillEllipse Построение закрашенного эллипса
    LineToGetArcCoords Получение координат последней дуги
    LineToPieSlice Построение закрашенного сектора круга
    LineToSector Построение закрашенного сектора эллипса

  11. Процедуры работы с текстом

    LineToGetTextSettings Получение характеристик текста
    LineToOutText Вывод последовательности символов
    LineToOutTextXY Вывод последовательности символов, начиная с заданных координат
    LineToSetTextJustify Задание способа выравнивания текста
    LineToSetTextStyle Задание типа, начертания шрифта и коэффициента увеличения символов
    LineToSetUserCharSize Задание высоты и ширины символов

  12. Функции работы с текстом

    LineToTextHeight Получение высоты строки в пикселах
    LineToTextWidth Ширина строки в пикселах

  13. Процедуры обмена с памятью

    LineToGetImage Сохранение изображения в буфере
    LineToPutImage Вывод изображения из буфера на экран

  14. Функции обмена с памятью

    LineToImageSize Получение размера требуемой для изображения памяти
Каждая графическая функция или процедура вызывается с соответ ствующими параметрами, информацию о которых можно получить по контекстно-зависимой помощи, либо из литературы [1].

1.2. Инициализация и закрытие графического режима.

Любая программа, работающая в графическом режиме, должна содержать вызовов процедуры инициализации графического режима, анализ ошибок инициализации, непосредственно работу с графикой и обращение к процедуре его закрытия после окончания работы. Приведем простой пример инициализации и закрытия графического режима.
    USES Graph;                      {подключен модуль Graph}
    PROCEDURE GrInit;    {процедура инициализации режима графики}
    VAR
       GraphDriver: Integer;          {для графического адаптера}
       GraphMode  : Integer;          {для графического режима}
       ErrorCode  : Integer;          {для кода ошибки}
    BEGIN
       GraphDriver :=Detect;          {режим автоопределения}
       InitGraph(GraphDriver ,GraphMode,''); {инициализация}
       ErrorCode :=GraphResult;       {результат инициализации}
       if ErrorCode <>  grOk then     {если не успешно,то...}
       begin
        Writeln('Ошибка графики:',GraphErrorMsg(ErrorCode ));
        Writeln('Программа остановлена.');
        Halt(1)
       end {if}
    END;
    BEGIN
       GrInit;                              {вызов инициализации}
       LINE(0,0,GetMaxX,GetMaxY);             {работа с графикой}
       Readln;                         {пауза до нажатия }
       CloseGraph;                 {закрытие графического режима}
    END.
В дальнейшем процедуру GrInit лучше записать в отдельный файл (например, INITGRAF.PAS) и использовать директиву включения этого файла при компиляции. Приведенный в примере блок всегда включает стандартный графический режим максимального разрешения.
При написании некоторых программ, использующих и графические, и текстовые режимы работы, является полезной процедура RestoreCRTMode, которая возвращает систему в текстовый режим, работавший до инициализации графики, без закрытия графики. Ее использование позволяет упростить возврат в графический режим, что демонстрируется следуюшим примером.
    USES Graph;         {подключение модуля}
     {$I Initgraph.pas} {процедура  инициализации}
    CONST
        graph_str ='Это графический режим';
        text_str  ='А это текстовый режим';
        graph_bask='А это снова графический режим';
  BEGIN
       GrInit;            {инициализация}
       Line (0,0,GetMaxX,GetMaxY); {диагональ экрана}
       OutTextXY(0,100,graph_str); {вывод первого сообщения}
       Readln;             {пауза}
       RestoreCRTMode;     {восстановление текстового режима}
       Write(text_str);    {вывод второго сообщения}
       Readln;
       SetGraphMode(GetGraphMode); {восстановление граф. режима}
       Line (0,0,GetMaxX,GetMaxY);
       OutTextXY(0,100,graph_bask);{вывод третьего сообщения}
       Readln;
       CloseGraph;            {закрытие графики}
    END.


содержание     вперед     на главную


Rambler's Top100
Hosted by uCoz