Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Работа с графикой лаб9_new.doc
Скачиваний:
12
Добавлен:
26.09.2019
Размер:
392.19 Кб
Скачать

Лабораторная работа 8. Работа с графикой в Delphi

Цель работы:

- научиться работать с графикой;

- научиться строить графики простейших функций с возможностью масштабирования;

- научиться выводить графики функций с использованием стандартной компоненты Chart;

- научиться строить графики функций, заданных в параметрическом виде;

- научиться воспроизводить эффект анимации.

Отчет должен содержать:

1) Титульный лист

2) Задание

3) Математическую модель

4) Таблицу внешних спецификаций

5) Иерархию модулей (подпрограмм)

6) Описание основных алгоритмов (словесное/блок-схема)

7) Проектирование тестов

8) Результаты тестирования (копии экрана)

Необходимые теоретические сведения для выполнения работы

(Источник: Языки программирования: конспект лекций по специальности 230400 "Информ. системы и технологии" / сост. О. И. Китаева;  – Иркутск: Изд-во ИрГТУ, 2012. – 1 o=электрон. опт. диск (CD-ROM.), сс. 51-57)

Графический инструментарий Delphi

1 Основа графики в Delphi

GDI - Graphics Device Interface в Windows представляет собой интерфейс, который Windows использует для рисования 2D графики. Это хотя и медленный способ отображения графики, однако, самый простой для понимания основ. Графические функции в Delphi являются надстройками над стандартными GDI функциями Windows.

Основу графики в Delphi представляет класс TCanvas – это холст (канва) с набором инструментов для рисования. Для работы с графикой определены классы TGraphic, TPicture, TGraphicObject, TCanvas. TGraphic – это абстрактный класс для инкапсуляции различных графических форматов, поддерживаемых Windows. Наследниками этого класса являются TBitmap, TIcon, TMetafile.

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

Классы TGraphic и TPicture содержат ограниченное количество поддерживаемых ими форматов, однако на базе TGraphic можно создавать новые классы, которые будут поддерживать другие графические форматы.

Абстрактный класс TGraphicObject является родительским по отношению к классам TFont, TBrush, TPen. Классы TFont, TBrush, TPen используются только в качестве свойств других классов.

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

2 Программное рисование

Форма и все визуальные управляющие компоненты Delphi обладают свойством Canvas. Конструктор Create создаёт экземпляр класса TCanvas со свойствами: Brush, Pen, Font, CopyMode, ClipRect, PenPos, Pixels.

Brush, Pen и Font называются инструментами для рисования.

Свойство PenPos – это текущая позиция карандаша – невидимый маркер, который задается горизонтальной PenPos.x и вертикальной PenPos.y координатами. Pixels[X,Y]: integer]:color представляет собой массив, содержащий цвета пикселей. Для доступа к отдельному пикселю достаточно указать его координаты.

Определим некоторые важные классы:

TPen. Используется для рисования простых линий. Обычно применяется для функции LineTo или при рисовании рамки для определённой фигуры (например для функции Rectangle).

TBrush. Кисть используется для заполнения области определённым цветом. Применяется в функциях Rectangle, FillRect или FloodFill.

TFont. Используется для задания шрифта, которым будет нарисован текст. Можно указать имя шрифта, размер и т.д.

TRegion. Позволяет задать регион (замкнутое пространство). Регионом может быть круг, квадрат или произвольная фигура.

Программное рисование рассмотрим на примере рисования цветка, растущего в траве.

Для рисования использованы классы TPen (Перо) и TBrush (Кисть) Изображение построено с помощью процедур Polygon (Многоугольник) и Ellipse (Эллипс). Процедуры заданы следующим образом:

procedure Polygon(Points: array of TPoint); Замкнутая ломаной линии – многоугольник задается как массив точек, последняя объявленная в массиве точка соединяется с первой и область внутри многоугольника закрашивается текущим цветом кисти.

procedure Ellipse(x1, y1, x2, y2: Integer); Эллипс вписан в прямоугольник, x1,y1 – координаты верхнего левого угла прямоугольника, x2,y2 - координаты нижнего правого угла.

Результат рисования представлен на рисунке 1.

Листинг программы

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

ExtCtrls, StdCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

const a:array[1..24] of integer=(95,-12,115,-32,75,-6,95,-26,115,-6,135,-26,95,14,75,-6,115,14,135,-6,95,22,115,2);

var

Form1: TForm1;

x1,y1,x2,y2:integer;

i,k,a1,a2,b1,b2:integer;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);

begin

x1:=100;

y1:=100;

Refresh;

Canvas.pen.Color:=clBlack;

Canvas.Brush.Color:=$0000C400;

Canvas.Polygon([Point(x1, y1+80),Point(x1+200, y1+80),Point(x1+180, y1+60),Point(x1+170, y1+70),Point(x1+160, y1+60),Point(x1+150, y1+70)

,Point(x1+140, y1+60),Point(x1+130, y1+70),Point(x1+120, y1+60),Point(x1+110, y1+70),Point(x1+100, y1+60),Point(x1+90, y1+70),Point(x1+80, y1+60),Point(x1+70, y1+70)

,Point(x1+60, y1+60),Point(x1+50, y1+70),Point(x1+40, y1+60),Point(x1+30, y1+70),Point(x1+20, y1+60),Point(x1+10, y1+70)]);

Canvas.Polygon([Point(x1+100, y1+80),Point(x1+110, y1+80),Point(x1+110, y1+50),Point(x1+130, y1+30),Point(x1+110, y1+40),Point(x1+110, y1+10),Point(x1+105, y1-10)]);

Canvas.Brush.Color:=clYellow;

Canvas.Ellipse(x1+95,y1-15,x1+115,y1+5);

Canvas.Brush.Color:=$005B5BFF;

i:=1;

for k:=1 to 6 do

begin

Canvas.Ellipse(x1+a[i],y1+a[i+1],x1+a[i+2],y1+a[i+3]);

i:=i+4;

end;

end;

end.

Рисунок 1 - Результат выполнения программы