Файл: Актуальность На сегодняшний день графика имеет не маловажное значение для языков программирования Она разрешает визуализировать все возможные программы, что придаёт яркость и удобство использования Так как живём в трехмерном мире,.docx
Добавлен: 23.11.2023
Просмотров: 103
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
Во втором параграфе описывается основные функции и процедуры работы с графикой в PascalABCNet
Подключение библиотеки к основной программе
Алгоритм поиска имен в библиотеках
Подпрограммы для работы с пером
Класс Picture графического рисунка
Подпрограммы для работы с координатами графического окна
Можно также изменять свойства системы координат графического окна через объект Coordinate
Подпрограммы режимов рисования
Кроме того, анимацию всех спрайтов можно выключить/включить вызовом следующих процедур:
procedure StartSprites; Стартует анимацию всех спрайтов |
procedure StopSprites; Останавливает анимацию всех спрайтов |
Для работы с рисунками используется класс Picture, позволяющий рисовать на себе те же графические примитивы, что и на экране
Режим блокировки рисования на экране (LockDrawing) позволяет осуществлять прорисовку лишь во внеэкранном буфере, после чего с помощью метода Redraw восстанавливать все графическое окно Данный метод используется для ускорения анимации и создания анимации без мерцания
Модули Timers и Sounds позволяют создавать таймеры и звуки, которые также реализованы в процедурном стиле Эти модули можно использовать даже в консольных программах
Основные понятия графики
Экраны цветных мониторов состоят из прямоугольной решётки точек(пикселей),светящихся разным цветом Каждый цветной пиксель образован тремя более мелкими по площади участками красного, зелёного и синего цветов При свечении этих участков с разной интенсивностью цвета смешиваются, создавая элементы изображения различных оттенков и яркости Важной характеристикой растра является его расширение Расширение экрана-это количество точек(пикселей) на единицу длины Чем это число выше, тем более мелкими являются сами пиксели, и, соответственно, более плотно они располагаются на плоскости, что и приводит к тому, что воспринимаем их как единое, цельное изображение Из года в год разрешающая способность принтеров, мониторов, сканеров и тп растёт Для использования графических возможностей языка Паскаль необходимо в блоке описания uses подключить графический модуль Graph Модуль содержит набор графических функций и процедур, основные из них которые рассмотрены ниже Положение каждой точки изображения задано координатами Х и У Координаты- целые числа, они задают номера колонки и строки и не зависят от физического размера экрана Оси координат направлены следующим образом: горизонтальная ось Х направлена слева направо; вертикальная ось У направлена сверху вниз; верхний левый угол имеет координаты(0, 0)
Рис1 Ось координат
Очевидно, что запись изображения требует хранения информации о положении множества точек, для каждой из которых должен быть задан цвет Цветное изображение получается смешиванием трех основных цветов - красного, зеленого и синего Такая модель представления цвета называется моделью RGB ( Red - Green - Blue ) Управляя интенсивностью компонентов, можно получить различные оттенки и степени интенсивности цвета В частности, для получения градаций серого надо взять интенсивности трех основных цветов равными друг другу Стандартный модуль GraphABC системы PascalABCNet содержит типы, константы, переменные, процедуры и функции, позволяющие создавать изображения в специально графическом окне
§2 Основные функции и процедуры работы с графикой в PascalABCNet
Для рисования в PascalABCNET необходимо запустить специальный модуль GraphABC, использование специальных функций и процедур помогут нарисовать точку, отрезок, окружность, прямоугольник и другие фигуры:
-
SetPixel(x,y,color) - Закрашивает один пиксел с координатами (x,y) цветом color LineTo(x,y) - рисует отрезок от текущего положения пера до точки (x,y); координаты пера при этом также становятся равными (x,y) -
Line(x1,y1,x2,y2) - рисует отрезок с началом в точке (x1,y1) и концом в точке (x2,y2) -
SetPenColor(color) - устанавливает цвет пера, задаваемый параметром color SetPenWidth(n) - устанавливает ширину (толщину) пера, равную n пикселям Rectangle(x1,y1,x2,y2) - рисует прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2) -
FloodFill(x,y,color) - заливает область одного цвета цветом color, начиная с точки (x,y) -
SetBrushColor(color) - устанавливает цвет кисти Заливка кистью распространяется на замкнутый контур, описание которого следует за процедурой установки цвета кисти -
Ellipse(x1,y1,x2,y2) - рисует эллипс, заданный своим описанным прямоугольником с координатами противоположных вершин (x1,y1) и (x2,y2) Circle(x,y,r) - рисует окружность с центром в точке (x,y) и радиусом r -
Arc(x,y,r,a1,a2) - Рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 - вещественные, задаются в градусах и отсчитываются против часовой стрелки)
Таблица1 Цветовая гамма Pascal ABCNet
clBlack | черный |
clWhite | белый |
clRed | красный |
clGreen | зеленый |
clBlue | синий |
clYellow | желтый |
clAqua | бирюзовый |
clFuchsia | сиреневый |
clGray | темно-серый |
clMoneyGreen | цвет зеленых денег |
clDkGray | темно-серый |
clSilver | серебряный |
clPurple | фиолетовый |
clMaroon | темно-красный |
clNavy | темно-синий |
clBrown | коричневый |
clSkyBlue | голубой |
clCream | кремовый |
clOlive | оливковый |
clTeal | сине-зеленый |
clLime | ярко-зеленый |
clLtGray | светло-серый |
clMedGray | серый |
Графические примитивы
procedure Arc(x, y, r, angle1, angle2: real; c: Color);
Рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенную между двумя лучами, образующими углы angle1 и angle2 с осью OX, цветом c
procedure Circle(x,y,r: real; c: Color);
Рисует окружность с центром в точке (x,y), радиусом r и цветом c
procedure DrawCircle(x,y,r: real; c: Color);
Рисует контур окружности с центром в точке (x,y), радиусом r и цветом c
procedure DrawCircle(p: Point; r: real; c: Color);
Рисует контур окружности с центром в точке p, радиусом r и цветом c
procedure DrawEllipse(x,y,rx,ry: real; c: Color);
Рисует контур эллипса с центром в точке (x,y), радиусами rx и ry и цветом c
procedure DrawPixels(x,y: real; pixels: array [,] of Color; px,py,pw,ph: integer); Рисует прямоугольную область (px,py,pw,ph) двумерного массива пикселей pixels начиная с левого верхнего угла с координатами (x,y)
procedure DrawPolygon(points: array of Point; c: GColor);
Рисует контур многоугольника, заданного массивом точек и цветом
procedure DrawRectangle(x,y,w,h: real; c: Color);
Рисует контур прямоугольника с координатами вершин (x,y) и (x+w,y+h) цветом c
procedure DrawSector(x, y, r, angle1, angle2: real; c: Color);
Рисует контур сектора окружности с центром в точке (x,y) и радиусом r, заключенного между двумя лучами, образующими углы angle1 и angle2 с осью OX, цветом c
procedure Ellipse(p: Point; rx,ry: real; c: Color);
Рисует эллипс с центром в точке p, радиусами rx и ry и цветом внутренности c
procedure FillCircle(x,y,r: real; c: Color);
Рисует внутренность окружности с центром в точке (x,y), радиусом r и цветом c
procedure FillEllipse(x,y,rx,ry: real; c: Color);
Рисует внутренность эллипса с центром в точке (x,y), радиусами rx и ry и цветом c
procedure FillEllipse(p: Point; rx,ry: real; c: Color);
Рисует внутренность эллипса с центром в точке p, радиусами rx и ry и цветом c
procedure FillRectangle(x,y,w,h: real; c: Color);
Рисует внутренность прямоугольника с координатами вершин (x,y) и (x+w,y+h) цветом c
procedure FillSector(x, y, r, angle1, angle2: real; c: Color);
Рисует внутренность сектора окружности с центром в точке (x,y) и радиусом r, заключенного между двумя лучами, образующими углы angle1 и angle2 с осью OX, цветом c
procedure Line(x,y,x1,y1: real; c: Color);
Рисует отрезок прямой от точки (x,y) до точки (x1,y1) цветом c
procedure LineOn(dx,dy: real);
Рисует отрезок от текущей позиции до точки, смещённой на вектор (dx,dy) Текущая позиция переносится в новую точку
procedure Lines(a: array of (Point,Point); c: Color);
Рисует отрезки, заданные массивом пар точек, цветом c
procedure MoveOn(dx,dy: real);
Перемещает текущую позицию рисования на вектор (dx,dy)
procedure MoveRel(dx,dy: real);
Перемещает текущую позицию рисования на вектор (dx,dy)
procedure MoveTo(x,y: real);
Устанавливает текущую позицию рисования в точку (x,y)
procedure Pie(x, y, r, angle1, angle2: real);
Рисует сектор окружности с центром в точке (x,y) и радиусом r, заключенный между двумя лучами, образующими углы angle1 и angle2 с осью OX
procedure PolyLine(points: array of Point; c: Color);
Рисует ломаную заданную массивом точек и цветом
procedure Rectangle(x,y,w,h: real; c: Color);
Рисует прямоугольник с координатами вершин (x,y) и (x+w,y+h) цветом c
procedure Sector(x, y, r, angle1, angle2: real; c: Color);
Рисует сектор окружности с центром в точке (x,y) и радиусом r, заключенный между двумя лучами, образующими углы angle1 и angle2 с осью OX, цветом c
procedure SetPixel(x,y: real; c: Color);
Рисует пиксел в точке (x,y) цветом c
procedure SetPixels(x,y: real; w,h: integer; f: (integer,integer)->Color);
Рисует прямоугольник пикселей размера (w,h), задаваемых отображением f, начиная с левого верхнего угла с координатами (x,y)
Подпрограммы для работы с пером
Рисование линий осуществляется текущим пером Доступ к свойствам текущего пера можно осуществлять как в процедурном, так и в объектно-ориентированном стиле
Процедуры и функции для доступа к свойствам пера сгруппированы парами: если Prop - имя свойства пера, то функция PenProp возвращает значение этого свойства, а процедура SetPenProp(p) устанавливает это свойство: procedure SetPenColor(c: Color); Устанавливает цвет текущего пера |
function PenColor: Color; Возвращает цвет текущего пера |
procedure SetPenWidth(Width: integer); Устанавливает ширину текущего пера |
function PenWidth: integer; Возвращает ширину текущего пера |
procedure SetPenStyle(style: DashStyle); Устанавливает стиль текущего пера Константы стилей пера приведены здесь |
function PenStyle: DashStyle; Возвращает стиль текущего пера Константы стилей пера приведены здесь |
procedure SetPenMode(m: integer); Устанавливает режим текущего пера |
function PenMode: integer; Возвращает режим текущего пера |
function PenX: integer; Возвращают x-координату текущей позиции рисования |
function PenY: integer; Возвращают y-координату текущей позиции рисования |
Кроме этого, можно изменять свойства текущего пера через объект Pen
Класс Picture графического рисунка
Класс Picture представляет собой графический рисунок модуля GraphABC и является надстройкой над типом SystemDrawingBitmap Он имеет свойство прозрачности, которое можно включать/выключать, а также возможность непосредственного рисования на себе всех графических примитивов
Конструкторы класса Picture constructor Create(w,h: integer); Создает рисунок размера w на h пикселей |
property Width: integer; Ширина рисунка в пикселах |
property Height: integer; Высота рисунка в пикселах |
property Transparent: boolean; Прозрачность рисунка; прозрачный цвет задается свойством TransparentColor |
Методы класса Picture procedure Load(fname: string); Загружает рисунок из файла с именем fname |
procedure Save(fname: string); Сохраняет рисунок в файл с именем fname |
procedure SetSize(w,h: integer); Устанавливает размер рисунка w на h пикселей |
function Intersect(p: Picture): boolean; Возвращает True, если изображение данного рисунка пересекается с изображением рисунка p, и False в противном случае Для проверки пересечения оба объекта рисуются на белом фоне, и прямоугольник пересечения попиксельно проверяется на пересечение К сожалению, при таком алгоритме любые белые пиксели считаются не принадлежащими объекту Поэтому для корректной работы этого метода не следует использовать белый цвет для внутренности объекта |
procedure Draw(x,y: integer; r: SystemDrawingRectangle); // r - part of Picture Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y) |
procedure Draw(x,y: integer; r: SystemDrawingRectangle; g: Graphics); Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y) на поверхность рисования g |
procedure FlipHorizontal; Зеркально отображает рисунок относительно горизонтальной оси симметрии |
procedure FlipVertical; Зеркально отображает рисунок относительно вертикальной оси симметрии |
procedure SetPixel(x,y: integer; c: Color); Закрашивает пиксел (x,y) рисунка цветом c |
function GetPixel(x,y: integer): Color; Возвращает цвет пиксела (x,y) рисунка |
procedure Line(x1,y1,x2,y2: integer); Выводит на рисунке отрезок от точки (x1,y1) до точки (x2,y2) |
procedure FillCircle(x,y,r: integer); Заполняет на рисунке внутренность окружности с центром (x,y) и радиусом r |
procedure DrawEllipse(x1,y1,x2,y2: integer); Выводит на рисунке границу эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) |
procedure FillRect(x1,y1,x2,y2: integer); Заполняет на рисунке внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) |
procedure DrawRectangle(x1,y1,x2,y2: integer); Выводит на рисунке границу ы прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) |
procedure Rectangle(x1,y1,x2,y2: integer); Выводит на рисунке заполненный прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2) |
procedure RoundRect(x1,y1,x2,y2,w,h: integer); Выводит на рисунке заполненный прямоугольник со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев |
procedure Arc(x,y,r,a1,a2: integer); Выводит на рисунке дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) |
procedure FillPie(x,y,r,a1,a2: integer); Заполняет на рисунке внутренность сектора окружности, ограниченного дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) |
procedure Pie(x,y,r,a1,a2: integer); Выводит на рисунке заполненный сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) |
procedure Polygon(points: array of Point); Выводит на рисунке заполненный многоугольник, координаты вершин которого заданы в массиве points |
procedure Polyline(points: array of Point); Выводит на рисунке ломаную по точкам, координаты которых заданы в массиве points |
|
procedure TextOut(x,y: integer; s: string); Выводит на рисунке строку s в прямоугольник к координатами левого верхнего угла (x,y) |
procedure FloodFill(x,y: integer; c: Color); Заливает на рисунке область одного цвета цветом c, начиная с точки (x,y) |
procedure Clear; Очищает рисунок белым цветом |
|