Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задание Информатика и программирование.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1.62 Mб
Скачать

Рисуем картинку

Теория

  1. Рисуем на форме

  2. Класс TBrush

  3. Класс TPen

  4. Класс TFont

  5. Класс TBitMap

  6. Свойства Canvas и класс TCanvas

  7. Палитра цветов со значениями

Нарисовать картину, содержащую минимум: пять прямоугольников, квадратов; пять кругов, эллипсов; три отрезка; фон формы не стандартный. Картина должна отображать какой-нибудь сюжет.

Пусть у вас получился примерно такой рисунок сразу после запуска программы (смотри рисунок 2):

Рисунок 2 – Примет графического изображения к заданию 2

На рисунке можно заметить, что одни графические примитивы имеют контур, другие нет, некоторые как бы не полностью нарисованы, например, плавник у рыбы изображен частью эллипса.

Как убрать часть графического примитива:

  • рисуем графический примитив, например, эллипс у рыбки;

  • накладываем сверху на эллипс другой графический объект так, чтобы он закрывал часть эллипса;

  • убираем у него контур (цвет кисти равен цвету раскраски) и выставляем цвет закраски в Brush как цвет фона, на котором нарисован плавник.

Примерные задания для пятого урока

Нарисовать картину, содержащую минимум: пять прямоугольников (квадратов); пять эллипсов (кругов); три отрезка; фон формы не стандартный.

  1. Новый год

  2. Лето

  3. Морская или речная тема

  4. Космос

  5. Природа

  6. Твоя комната

Рисунок 3 – Палитра цветов c RGB значениями

Рисуем на форме

Изучим основные приемы рисования. Рисование на форме (как, впрочем, и на многих других объектах) происходит через контекст устройства (холст). Этот объект появляется в виде подсказки после точки при наборе программы.

К этому объекту (Canvas) мы можем приписывать разные другие объекты, в частности кисть (TBrush), перо (TPen) и шрифт (TFont). Кроме того, на холсте (Canvas) мы можем использовать картинку (TBitmap). Эти объекты будут рассмотрены подробнее в следующих уроках.

Так как при рисовании нам постоянно придется использовать конструкции вида Form1.Canvas, то лучше эту часть вынести за скобки с помощью with.

 

Код:

 

            with Form1.Canvas do

            begin

            ...

            end;

 

Между begin и end мы как раз и будем рисовать. Куда поместить весь этот код, зависит от задачи. Можно написать его в обработчике нажатия какой-нибудь кнопки или еще где-нибудь, где вам надо. Мы же поместим его в обработчик FormPaint для нашей формы. Логично это сделать потому, что, в частности, это событие возникает и при создании формы. Кроме того, если окно нашей формы будет закрыто другим окном, а потом снова окажется видимым, то код FormPaint также будет выполняться, так что мы остановимся именно на этом обработчике.

 

Давайте для начала нарисуем кружок желтого цвета:

 

procedure TForm1.FormPaint(Sender: TObject);

begin

            with Form1.Canvas do

            begin

            //Задаем кисть желтого цвета

            Brush.Color:=RGB(255, 255, 0);

            //Рисуем круг

            Ellipse(10, 10, 30, 30);

            end;

end;

 

Аналогичным образом можно нарисовать прямоугольник (используем Square), напечатать некой текст (TextOut) или вывести еще какие-нибудь примитивы.

Для рисования линий используются методы LineTo и MoveTo. Первый из них рисует отрезок, второй - просто передвигает точку рисования.

 

Вот пример их использования:

 

             //Передвигаем перо в точку (10, 10)

            Form1.Canvas.MoveTo(10, 10);

            //Рисуем три линии

            Form1.Canvas.LineTo(30, 70);

            Form1.Canvas.LineTo(80, 40);

            Form1.Canvas.LineTo(10, 10);

 

Тот же результат можно получить и через метод Polygon.

 

Он в качестве параметра берет массив точек (вершин):

 

var

            points: Array [1..3] of TPoint;

            …

            points[1].X:=10; points[1].Y:=10;

            points[2].X:=30; points[2].Y:=70;

            points[3].X:=80; points[3].Y:=40;

            Form1.Canvas.Polygon(points);

           

В приведенном примере треугольник не закрашивается. Для его закраски (а также любой фигуры) используется метод FloodFill. Он закрашивает область текущей кистью, начиная с точки, передаваемой в него в качестве параметра.

 

Код:

 

//Берем кисть красного цвета

            Form1.Canvas.Brush.Color:=RGB(255, 0, 0);

            //Закрашиваем

            Form1.Canvas.FloodFill(12, 12, RGB(0, 0, 0), fsBorder);

 

Если последний параметр равен fsBorder, то заполнение цветом идет до тех пор, пока наша волна закраски не упрется в границу, заданную вторым параметром. Если же он равен fsSurface, то закрашиваться будут именно точки с цветом, задаваемым вторым параметром (начиная от точки, определяемой первыми двумя параметрами).

 

Кроме линий, можно выводить и отдельные точки.

 

Вот пример:

            //Выводим точку красного цвета

            Form1.Canvas.Pixels[9, 9]:=RGB(255, 0, 0);

 

Вообще говоря, рисовать можно не только на форме. Но об этом как-нибудь в следующий раз.

Всё на этом урок закончен.

Класс Tbrush

На этом уроке изучим класс Tbrush. На прошлом занятии мы рассматривали объект Canvas, на котором происходит рисование. К этому объекту можно, в частности, приписать кисть. Одно из свойств кисти мы уже знаем - это Color. Тут ничего хитрого нет - для приписывания к кисти определенного цвета используем функцию RGB (см. предыдущий урок). Следующее свойство - это style. Оно определяет способ закрашивания. Возможные значения - это bsSolid (сплошная кисть),bsHorizontal и (горизонтальные и вертикальные полоски соответственно), bsFDiagonal и bsBDiagonal (наклонные вправо или влево полосы соответственно) и другие. Тут тоже ничего хитрого нет - присваиваем соответствующее значение и любуемся на результат.

Кроме закрашивания сплошной кистью можно закрашивать некоторой картинкой. За это отвечает свойство Bitmap для нашей кисти. Если вы используете свойство Bitmap, то свойства Color и Style игнорируются.

 

Вот пример применения этого свойства:

 

var

            Bitmap: TBitmap; //Заводим переменную для картинки

begin

            Bitmap:=TBitmap.Create;

            Bitmap.LoadFromFile('1.bmp'); //Загружаем картинку из файла

            Form1.Canvas.Brush.Bitmap:=Bitmap; //Присваиваем Bitmap к холсту

            Form1.Canvas.Ellipse(10, 10, 60, 60); //Рисуем нашей кистью

end;

 

Этот код можно поместить, например, в обработчик для кнопки. Разумеется, файл 1.bmp должен существовать (в той же папке, что и exe-файл).             Всё на этом урок закончен.

Класс TPen

Изучим класс TPen. Класс TPen отвечает за перо. Оно, как и описанная в предыдущем уроке кисть, относится к холсту (Canvas). Перо предназначено для рисования различных линий. У него существует цвет (свойство Color), вид (сплошное, пунктирное и т. д. - свойство Style), ширина (свойство Width), режим отображения (свойство Mode).

 

Вот пример использования пера:

 

            //Задаем перо синего цвета

            Form1.Canvas.Pen.Color:=RGB(0, 0, 255);

            Form1.Canvas.MoveTo(10, 12);

            Form1.Canvas.LineTo(70, 12);

            //Задаем штрих-пунктирное перо

            Form1.Canvas.Pen.Style:=psDashDot;

            Form1.Canvas.MoveTo(10, 22);

            Form1.Canvas.LineTo(70, 22);

            //Задаем толстое перо

            Form1.Canvas.Pen.Width:=6;

            Form1.Canvas.MoveTo(10, 32);

            Form1.Canvas.LineTo(70, 32);

            //Задаем режим отображения

            Form1.Canvas.Pen.Mode:=pmMask;

            Form1.Canvas.MoveTo(10, 42);

            Form1.Canvas.LineTo(70, 42);

 

Наши линии мы наложили на рисунок из прошлого урока. Обратите внимание, что до смены режима отображения линия полностью непрозрачна, после же мы частично видим рисунок под линией. Еще возможные значения для режима отображения - pmNot (с конвертацией цветов), pmMerge и другие.

Всё на этом урок закончен.