Помощь в учёбе, очень быстро...
Работаем вместе до победы

Приложение «Графический редактор»

РефератПомощь в написанииУзнать стоимостьмоей работы

В процессе рисования заранее неизвестно, какого цвета закрашенная область. Это можно определить с помощью свойства Pixels, в котором хранятся цвета всех точек изображения. Pixels — цвет точки канвы с координатами X, Y. Для закрашивания воспользуемся процедурой FloodFill класса Canvas, которая может работать в двух вариантах (различаются значением последнего параметра процедуры: fsBorder или… Читать ещё >

Приложение «Графический редактор» (реферат, курсовая, диплом, контрольная)

Цель работы — создать простейший графический редактор. Левой кнопкой мыши можно рисовать непрерывную кривую, правой — закрашивать выбранным цветом полученные области.

План работы:

  • 1. Разместить на Форме компоненты Image, ColorGrid, SpinEdit.
  • 2. Написать обработчик события отслеживания траектории движения мыши.
  • 3. Написать обработчик события «перескакивания» курсора в новое положение без рисования траектории.
  • 4. Написать обработчик события закрашивания.
  • 5. Написать обработчик события изменения толщины линии.
  • 6. Проверить работоспособность проекта.

Размещаем на форме требуемые компоненты (рис. 98).

Окно проекта.

Рис. 98. Окно проекта

Для отслеживания движения мыши напишем обработчик события OnMouseMove:

procedure TForml. ImagelMouseMove (Sender: TObject;

Shift: TShiftState; X, Y: Integer);

begin

if ssLeft in Shift then

Imagel.Canvas.LineTo (X, Y);

end;

Чтобы в момент нажатия кнопки «перескакивать» в новое положение без рисования траектории, напишем обработчик события OnMouseDown:

procedure TForml. ImagelMouseDown (Sender: TObject;

Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin

Imagel.Canvas.MoveTo (X, Y);

end;

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

  • 1) закрашивать область текущим цветом до границы заданного цвета;
  • 2) перекрашивать точки заданного цвета до границы любого другого цвета (в этом случае граница может состоять из частей разного цвета).

Например, закрашивание области с границей черного цвета красным цветом:

Canvas.Brush.Color := clRed;

Canvas.FloodFill (X, Y, clBlack, fsBorder);

Перекрашивание красной области в синий цвет:

Canvas.Brush.Color := clBlue;

Canvas.FloodFill (X, Yj clRed, fsSurface);

В процессе рисования заранее неизвестно, какого цвета закрашенная область. Это можно определить с помощью свойства Pixels, в котором хранятся цвета всех точек изображения. Pixels [X, Y] — цвет точки канвы с координатами X, Y.

При изменении компонента ColorGrid будет изменяться и цвет закрашивания, и цвет линии:

procedure TForml. ColorGridlChange (Sender: TObject);

begin

Imagel.Canvas.Brush.Color := ColorGridl. BackgroundColor;

Imagel.Canvas.Pen.Color := ColorGridl. ForegroundColor;

end;

Поэтому обработчик OnMouseDown надо переписать:

procedure TForml. ImagelMouseDown (Sender: TObject; Button:

TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

with Imagel. Canvas do case Button of mbLeft:

MoveTo (X, Y); mbRight:

FloodFill (Xj Y, Pixels[X, Y], fsSurface);

end;

end;

Кроме того, можно изменять толщину линии с помощью компонента SpinEdit (вкладка Samples), который представляет собой поле ввода числового значения и стрелки вверх/вниз, с помощью которых можно прокручивать значения в поле ввода в заданных пределах (свойства MinValue и MaxValue). Границы, установленные для изменения значения TSpinEdit, можно изменять при вводе данных с клавиатуры. Поэтому, чтобы не возникла ошибка преобразования пустого значения в число, желательно запретить редактировать с клавиатуры значения поля ввода (свойство EditorEnabled = False).

Далее напишем обработчик события OnChange для объекта SpinEdit:

procedure TForml. SpinEditlChange (Sender: TObject);

begin

Imagel.Canvas.Pen.Width := SpinEditl. Value;

end;

Теперь протестируйте работу разработанного проекта (рис. 99).

Демонстрация работы приложения.

Рис. 99. Демонстрация работы приложения

Показать весь текст
Заполнить форму текущей работой