trains_hr.gif
 


В ПОМОЩЬ СТУДЕНТУ И ШКОЛЬНИКУ

 


Горбачев Л.И. Основы программирования в среде Turbo Pascal.

[НАЗАД]  [ДАЛЕЕ]

6. Определение атрибутов графического изображения.

   Модуль Graph располагает рядом процедур и функций, позволяющих определять атрибуты выводимого на экран графического изображения. К числу таких атрибутов следует отнести цвет, фон, стиль, шаблон и толщину линий, с помощью которых на экране отображается любое графическое изображение, а также шаблон и цвет заполнения высвечиваемых на экране различных геометрических фигур.

   Вполне возможен следующий алгоритм построения какой-либо фигуры:
- установить цвет фона (SetBkColor) и цвет контура фигуры (SetColor);
- установить толщину линий контура (SetLineStyle) и ее шаблон;
- установить шаблон "заливки" фигуры (SetFillStyle);
- вывести изображение фигуры на экран;
- "заливка" замкнутой области, ограниченной контуром фигуры (FloodFill).

   6.1. Управление цветом и фоном.

   Для управления цветом и фоном используются следующие процедуры и функции:

  • GetDefaultPalette(var Pal: PaletteType); - возвращает значение переменной типа запись (PaletteType), содержащей информацию о палитре, установленной во время инициализации графического режима.
  • GetPalette(var Palette: PaletteType); - возвращает текущую палитру и ее размер в переменную типа PaletteType.
  • SetAllpalette(var Palette); - изменяет все цвета палитры на указанные в переменной Palette.
  • SetBkColor(Color: word); - устанавливает текущий фоновый цвет, используя текущую палитру.
  • SetColor(Color: word); - устанавливает текущий цвет изображения, используя заданную палитру.
  • SetPalette(ColorNum: word; Color: shortint); - изменяет один из цветов палитры с номером ColorNum на цвет Color.
  • SetRGBPalette(ColorNum, RedValue, GreenValue, BlueValue: integer); - позволяет модифицировать компоненты палитры (только для VGA). RedValue, GreenValue, BlueValue - определяют составляющие цветов для заданной компоненты палитры.
  • GetBkColor: word; - возвращает значение текущего фонового цвета в соответствии с текущей палитрой.
  • GetColor: word; - возвращает значение текущего цвета в соответствии с текущей палитрой.
  • GetMaxColor: word; - возвращает значение максимального номера цвета, который может быть использован в SetColor.
  • GetPaletteSize: word; - возвращает размер палитры.

   6.2. Выбор стиля, шаблона и толщины линии.

   Для этого используются следующие процедуры и функции:

  • GetLineSettings(var LinInfo: LineSettingsType); возвращает текущий стиль, образец и толщину линии.
  • LineStyle - стиль линии - определяется, исходя из следующего списка констант модуля Graph:
    const SolidLn = 0; {Сплошная линия}
    DotteLn = 1; {Линия из 3-х точек}
    CenterLn = 2; {Линия из точек и тире}
    DashedLn = 3; {Пунктирная линия}
    UserBitLn = 4; {Тип, определенный пользователем}
    Pattern имеет значение, если LineStyle = 4. В этом параметре задается шаблон линии. Thickness принимает одно из следующих значений из соответствующего списка констант:
    const NormWidth = 1; {Нормальная толщина}
    ThickWidth = 3; {Увеличенная толщина}
  • SetLineStyle(LineStyle, Pattern, Thickness:word); - устанавливает текущую толщину и тип линии. Значения параметров LineStyle, Pattern, Thickness должны соответствовать значениям одноименных элементов записи типа LineSettingsType. Если LineStyle = UserBitLn, то тип линии задается шаблоном Pattern по следующему принципу. Если отдельный бит шаблона равен 1, то соответствующий ему пиксель будет высвечиваться на экране. Например, если Pattern = &AAAA и &AAAA = 1010101010101010, то такой шаблон соответствует сплошной линии нормальной толщины (50%-ная яркость). По результатам SetLineStyle формируется GraphResult. Параметры, сформированные SetLineStyle, определяют линию в процедурах Line, LineRel, LineTo и Rectangle.
  • SetWriteMode(WriteMode: integer); - устанавливает режим при вычерчивании линий. В качестве возможных значений WriteMode используются соответствующие константы или их значения, описанные в разделе интерфейса модуля Graph как:
    const CopyPut = 0; {MOV}
    XORPut = 1; {XOR}

       Каждая из этих констант соответствует известной из Ассемблера бинарной операции MOV (поместить) или XOR (исключающее ИЛИ). Если WriteMOde = CopyPut, то рисуемая линия просто выводится на экран. Если WriteMode = XORPut, то рисуемая линия накладывается на экран в соответствии с используемой бинарной операцией XOR. Два последовательных оператора вывода линии на экран при SetWriteMode(1) восстанавливают первоначальное изображение экрана (до вывода на него этой линии). вычерчивании линий.

   6.3. Выбор шаблона и цвета заполнения.

   Для выбора шаблона и цвета заполнения используются следующие процедуры:

  • GetFillPattern(var FillPattern: FillPatternType); - возвращает в переменной FillPattern образец заполнения.
  • SetFillPattern(Pattern:FillPatternType; Color: word); - устанавливает определенный пользователем шаблон и цвет заполнения.
  • GetFillSettings(var FillInfo: FillSettingsType); - возвращает последний образец заполнения и цвет, установленный предыдущим вызовом SetFillPattern или SetFillStyle. Переменная FillInfo должна иметь структуру, описанную в разделе интерфейса модуля Graph как:
    type FillSettingsType = record
    Pattern: word;
    Color: word;
    end;
    Поле Pattern содержит текущий выбранный образец заполнения и соответствует одному из значений следующего списка констант:
    const EmptyFill = 0; {Заполнение фоновым цветом}
    SolidFill = 1; {Заполнение сплошным цветом}
    LineFill = 2; {Шаблон заполнения '- - -'}
    LtSlashFill = 3; {Шаблон заполнения '///'}
    SlashFill = 4; {Шаблон заполнения '///' - толстые линии}
    BKSlashFill = 5;{Шаблон заполнения '\\\' - толстые линии}
    LtBKSlashFill = 6; {Шаблон заполнения '\\\'}
    HatchFill = 7; {Редкая штриховка}
    XHatchFill = 8; {Частая штриховка}
    InterLeaveFill = 9; {Заполнение пунктирной линией}
    WideDotFill = 10; {Заполнение редкими точками}
    CloseDotFill = 11; {Заполнение точками}
    UserFill = 12;{Заполнение, определяемое пользователем}
    Поле Color содержит текущий цвет заполнения в соответствии с используемой палитрой.
  • SetFillStyle(Pattern, Color: word); - устанавливает шаблон и цвет заполнения, используемые при выполнении процедур FillPoly, Bar, Bar3D. Значение Pattern выбирается из соответствующего списка констант, приведенного в GetFillSettings. Только в случае, если Pattern = UserFill, становится активным шаблон, заданный в SetFillPattern.

   6.4. Управление текущим указателем.

   Текущий указатель в графическом режиме представляет собой невидимую точку, имеющую координаты (X, Y). Координата X отображает местоположение текущего указателя в горизонтальном направлении, а Y - его местоположение в вертикальном направлении. Отсчет координат ведется от левого верхнего угла (0, 0) активного окна. Для управления текущим указателем в модуле Graph предусмотрены следующие процедуры и функции:

  • GetMaxX: integer; - возвращает максимальное значение координаты X. Например, если определен графический режим VGA с разрешающей способностью 640х480, то GetMaxX = 639.
  • GetMaxY: integer; - возвращает максимальное значение координаты Y.
  • GetX: integer; - возвращает X-координату текущего указателя (значение GetX выдается относительно активного окна).
  • GetY: integer; - возвращает Y-координату текущего указателя (значение GetY выдается относительно активного окна).
  • MoveRel(Dx, Dy: integer); - перемещает текущий указатель в точку, которая находится на расстоянии (Dx, Dy) от текущей позиции.
  • MoveTo(X, Y: integer); - перемещает текущий указатель в точку с координатами (X, Y). Значения X и Y указываются относительно активного окна.

   Кроме перечисленных процедур и функций полезно знать другие процедуры и функции, которые изменяют местоположение текущего указателя. Это - ClearDevice, ClearViewPort, GraphDefaults, InitGraph, LineRel, LineTo, PutPixel, SetGraphMode, SetViewPort.

   6.5. Вывод графической информации.

   Модуль Graph позволяет выводить на экран изображение различных геометрических фигур, а также получать информацию о них. Это осуществляется с помощью следующих процедур и функций:

  • Arc(X, Y: integer; StAngle, EndAngle, Radius: word); - рисует на экране дугу с центром в точке (X, Y), радиусом Radius, от начального угла StAngle до конечного угла EndAngle с использованием текущего цвета. Отсчет углов осуществляется относительно горизонтальной оси в направлении против часовой стрелки (3 часа - 0 градусов, 12 часов - 90 градусов и т.д.). Если StAngle = 0, а EndAngle = 360 градусов, то будет нарисована окружность.
  • Bar(X1, Y1, X2, Y2: integer); - выводит на экран закрашенный прямоугольник с координатами верхнего левого угла (X1, Y1) и правого нижнего угла (X2, Y2). При закраске прямоугольника используются шаблон и цвет, определенные процедурами SetFillStyle и SetFillPattern.
  • Bar3D(X1, Y1, X2, Y2: integer; Depth: word; Top: boolean); - выводит на экран изображение закрашенного прямоугольного параллелепипеда текущим цветом и стилем линий (SetColor, SetLineStyle). При закраске параллелепипеда используется шаблон и цвет, определенные процедурами SetFillStyle и SetFillPattern. Прямоугольный параллелепипед рисуется в изометрическом изображении с глубиной, задаваемой в параметре Depth (обычно Depth = (X2 - X1 + 1) div 3). Параметр Top определяет, рисовать ли верхнюю грань параллелепипеда (при изображении нескольких параллелепипедов). Значение Top выбирается из соответствующего списка констант раэдела интерфейса модуля Graph:
    const TopOn = True;

    TopOff = False;
    Координаты X1, Y1, X2, Y2 определяют ближнюю фронтальную плоскость параллелепипеда.
  • Circle(X, Y: integer; Radius: word); - выводит на экран изображение окружности с центром (X, Y) и радиусом Radius. Окружность рисуется цветом, установленным SetColor.
  • DrawPoly(NumPoints: word; var PolyPoins); - выводит на экран контур многоугольника, используя текущий цвет (SetColor) и стиль линии (SetLineStyle). Число вершин многоугольника задается в NumPoints. В параметре NumPoints задаются координаты вершин многоугольника. Каждая координата состоит из двух слов: X и Y. Например:
    const T: array[1..4] of PointType = (X: 10, Y: 50),
    (X: 100, Y: 50),
    (X: 10, Y: 100),
    (X: 100, Y: 100);
    ..............
    begin
    ..............
    DrawPoly($, T);
    ..............
    end.
  • Ellipse(X, Y: integer; StAngle, EndAngle: word; XRadius, YRadius: word); - выводит на экран изображение эллиптической с центром в точке (X, Y) от начального угла StAngle до конечного угла EndAngle с горизонтальной полуосью XRadius и вертикальной полуосью YRadius. Эллиптическая дуга высвечивается на экране текущим цветом (SetColor). Если StAngle = 0 и EndAngle = 360 градусам, то будет выведено изображение полного эллипса.
  • FillEllipse(X, Y: integer; XRadius, YRadius: word); - выводит на экран изображение полного закрашенного эллипса с центром (X, Y) с горизонтальной и вертикальной полуосями XRadius и YRadius. Эллипс высвечивается текущим цветом (SetColor) и закрашивается текущим цветом и стилем заполнения (SetFillStyle, SetFillPattern).
  • FillPoly(X, Y: integer; Border: word); - аналогична процедуре DrawPoly. Отличие состоит в том, что изображение многоугольника закрашивается текущим цветом и стилем заполнения (SetFillStyle, SetFillPattern).
  • FloodFill(X, Y: integer; Border: boolean); - заполняет (закрашивает) ограниченную область текущим цветом и стилем заполнения (SetFillStyle, SetFillPattern). Граница закрашиваемой области высвечивается цветом, задаваемым в Border. Если точка (X, Y) находится внутри области, то эта область закрашивается, если же она находится вне области, то заполняется внешняя часть области.
  • GetArcCoords(var ArcCords: ArcCordsType); - возвращает переменную типа ArcCordsType. Этот тип определен в разделе интерфейса модуля Graph как:
    type ArcCordsType = record
    X, Y: integer;
    XStart, YStart: integer;
    Xend, Yend: integer;
    end;
    где X, Y - центр дуги, выведенной на экран процедурой Arc или Ellipse, а XStart, YStart, Xend, Yend - координаты начала и конца этой дуги. Эта процедура является весьма полезной, если необходимо соединить прямой линией начало и конец выведенного на экран изображения дуги.
  • Line(X1, Y1, X2, Y2: integer); - выводит на экран линию, соединяющую точки с координатами (X1, Y1) и (X2, Y2). Толщина, цвет и тип линии задается с помощью SetLineStyle и SetColor.
  • LineRel(Dx, Dy: integer); - выводит изображение прямой линии, соединяющей точку, где расположен текущий указатель, и точку, удаленную от нее на расстояние (Dx, Dy). Для изображения линии используется текущий стиль, цвет и шаблон, установленные процедурами SetColor и SetLineStyle.
  • LineTo(X, Y: integer); - выводит изображение линии, соединяющей точку, в которой находится текущий указатель, и точку с координатами (X, Y). При изображении линии используются цвет, стиль и шаблон, установленные процедурами SetColor и SetLineStyle.
  • PieSlice(X, Y: integer; StAngle, EndAngle, Radius: word); - выводит на экран изображение закрашенного сектора круга, используя в качестве центра круга точку (X, Y), начального угла StAngle, конечного угла EndAngle и радиуса Radius. Контур сектора высвечивается текущим цветом (SetColor). При заполнении сектора используется шаблон и цвет, определенные процедурами SetFillStyle и SetFillPattern. Если StAngle=0, а EndAngle = 360 градусам, то PieSlice выводит на экран закрашенную окружность.
  • PutPixel(X, Y: integer; Pixel: word); - высвечивает в точке с координатами (X, Y) пиксел цвета Pixel. Pixel задается исходя из соответствующего списка констант.
  • GetPixel(X, Y: integer): word; - возвращает значение цвета пиксела с координатами (X, Y).
  • Rectangle(X1, Y1, X2, Y2: integer); - выводит на экран изображение прямоугольника, используя при этом текущий цвет (SetColor) и тип линии (SetLineStyle). X1, Y1 - задает левый верхний угол, а X2, Y2 - правый нижний угол прямоугольника.
  • Sector(X, Y: integer; StAngle, EndAngle, XRadius, YRadius: word); - выводит на экран изображение эллиптического сектора от начального угла StAngle до конечного угла EndAngle, используя в качестве центра точку с координатами X, Y, а в качестве горизонтальной и вертикальной полуосей - XRadius и YRadius. Сектор выводится на экран с использованием текущего цвета (SetColor) и заполняется с использованием шаблона и цвета, определенных в SetFillStyle и SetFillPattern. Если StAngle=0, а EndAngle = 360 градусам, то на экран будет выведено изображение полного эллипса.
Пример: Вывод на экран окрашенных линий, используя процедуру LineTo. Пример построения линий, окрашенных в различные цвета.
[program DemoLineTo]

Пример: Построение прямоугольника с окраской его внутренней области.
[program DemoRectangle]

Пример: Программа, использующая различные шаблоны и цвет заполнения.
[program DemoBar]

Пример: Программа, демонстрирующая построение различных геометрических фигур.
[program DemoFigure]

[НАЗАД]  [ДАЛЕЕ]


Главная
Новости
TurboPascal
Учебное пособие
Лекции
Исходники
Математика
Книги
Лекции
Шпоры
ЦТ и ЕГЭ
Физика

Книги

Шпоры
ЦТ и ЕГЭ

Литература

Сочинения

Краткие содержания

Другое
Мой родной край
Фотогалерея
Форум
Ссылки

Гостевая






 

                                        © Copyright(c) 2004 Amro Group. All rights reserved

 

Hosted by uCoz