Файл: Актуальность На сегодняшний день графика имеет не маловажное значение для языков программирования Она разрешает визуализировать все возможные программы, что придаёт яркость и удобство использования Так как живём в трехмерном мире,.docx
Добавлен: 23.11.2023
Просмотров: 394
Скачиваний: 5
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
Во втором параграфе описывается основные функции и процедуры работы с графикой в PascalABCNet
Подключение библиотеки к основной программе
Алгоритм поиска имен в библиотеках
Подпрограммы для работы с пером
Класс Picture графического рисунка
Подпрограммы для работы с координатами графического окна
Можно также изменять свойства системы координат графического окна через объект Coordinate
Подпрограммы режимов рисования
Кроме того, анимацию всех спрайтов можно выключить/включить вызовом следующих процедур:
Для работы с рисунками используется класс Picture, позволяющий рисовать на себе те же графические примитивы, что и на экранеРежим блокировки рисования на экране (LockDrawing) позволяет осуществлять прорисовку лишь во внеэкранном буфере, после чего с помощью метода Redraw восстанавливать все графическое окно Данный метод используется для ускорения анимации и создания анимации без мерцанияМодули Timers и Sounds позволяют создавать таймеры и звуки, которые также реализованы в процедурном стиле Эти модули можно использовать даже в консольных программахОсновные понятия графикиЭкраны цветных мониторов состоят из прямоугольной решётки точек(пикселей),светящихся разным цветом Каждый цветной пиксель образован тремя более мелкими по площади участками красного, зелёного и синего цветов При свечении этих участков с разной интенсивностью цвета смешиваются, создавая элементы изображения различных оттенков и яркости Важной характеристикой растра является его расширение Расширение экрана-это количество точек(пикселей) на единицу длины Чем это число выше, тем более мелкими являются сами пиксели, и, соответственно, более плотно они располагаются на плоскости, что и приводит к тому, что воспринимаем их как единое, цельное изображение Из года в год разрешающая способность принтеров, мониторов, сканеров и тп растёт Для использования графических возможностей языка Паскаль необходимо в блоке описания uses подключить графический модуль Graph Модуль содержит набор графических функций и процедур, основные из них которые рассмотрены ниже Положение каждой точки изображения задано координатами Х и У Координаты- целые числа, они задают номера колонки и строки и не зависят от физического размера экрана Оси координат направлены следующим образом: горизонтальная ось Х направлена слева направо; вертикальная ось У направлена сверху вниз; верхний левый угол имеет координаты(0, 0)Рис1 Ось координатОчевидно, что запись изображения требует хранения информации о положении множества точек, для каждой из которых должен быть задан цвет Цветное изображение получается смешиванием трех основных цветов - красного, зеленого и синего Такая модель представления цвета называется моделью RGB ( Red - Green - Blue ) Управляя интенсивностью компонентов, можно получить различные оттенки и степени интенсивности цвета В частности, для получения градаций серого надо взять интенсивности трех основных цветов равными друг другу Стандартный модуль GraphABC системы PascalABCNet содержит типы, константы, переменные, процедуры и функции, позволяющие создавать изображения в специально графическом окне
§2 Основные функции и процедуры работы с графикой в PascalABCNetДля рисования в PascalABCNET необходимо запустить специальный модуль GraphABC, использование специальных функций и процедур помогут нарисовать точку, отрезок, окружность, прямоугольник и другие фигуры:
Рисует отрезки, заданные массивом пар точек, цветом cprocedure 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 с осью OXprocedure PolyLine(points: arrayof 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) цветом cprocedure SetPixels(x,y: real; w,h: integer; f: (integer,integer)->Color); Рисует прямоугольник пикселей размера (w,h), задаваемых отображением f, начиная с левого верхнего угла с координатами (x,y)
Кроме этого, можно изменять свойства текущего пера через объект Pen
| procedure StartSprites; Стартует анимацию всех спрайтов |
| procedure StopSprites; Останавливает анимацию всех спрайтов |
§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 - вещественные, задаются в градусах и отсчитываются против часовой стрелки)
| 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, цветом cprocedure Circle(x,y,r: real; c: Color); Рисует окружность с центром в точке (x,y), радиусом r и цветом cprocedure DrawCircle(x,y,r: real; c: Color); Рисует контур окружности с центром в точке (x,y), радиусом r и цветом cprocedure DrawCircle(p: Point; r: real; c: Color); Рисует контур окружности с центром в точке p, радиусом r и цветом cprocedure DrawEllipse(x,y,rx,ry: real; c: Color); Рисует контур эллипса с центром в точке (x,y), радиусами rx и ry и цветом cprocedure DrawPixels(x,y: real; pixels: array [,] of Color; px,py,pw,ph: integer); Рисует прямоугольную область (px,py,pw,ph) двумерного массива пикселей pixels начиная с левого верхнего угла с координатами (x,y)procedure DrawPolygon(points: arrayof Point; c: GColor); Рисует контур многоугольника, заданного массивом точек и цветомprocedure DrawRectangle(x,y,w,h: real; c: Color); Рисует контур прямоугольника с координатами вершин (x,y) и (x+w,y+h) цветом cprocedure DrawSector(x, y, r, angle1, angle2: real; c: Color); Рисует контур сектора окружности с центром в точке (x,y) и радиусом r, заключенного между двумя лучами, образующими углы angle1 и angle2 с осью OX, цветом cprocedure Ellipse(p: Point; rx,ry: real; c: Color); Рисует эллипс с центром в точке p, радиусами rx и ry и цветом внутренности cprocedure FillCircle(x,y,r: real; c: Color); Рисует внутренность окружности с центром в точке (x,y), радиусом r и цветом cprocedure FillEllipse(x,y,rx,ry: real; c: Color); Рисует внутренность эллипса с центром в точке (x,y), радиусами rx и ry и цветом cprocedure 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) цветом cprocedure 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: arrayof (Point,Point); c: Color);Рисует отрезки, заданные массивом пар точек, цветом cprocedure 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 с осью OXprocedure PolyLine(points: arrayof 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) цветом cprocedure 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-координату текущей позиции рисования |
Класс 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; Очищает рисунок белым цветом |
| |