Графический редактор. 3
Введение
Целью данной работы является разработка программы, позволяющей рисовать графические примитивы.
Представление данных на мониторе компьютера в графическом виде впервые было реализовано в середине 50-х годов для больших ЭВМ, применявшихся в научных и военных исследованиях. С тех пор графический способ отображения данных стал неотъемлемой принадлежностью подавляющего числа компьютерных систем, в особенности персональных.
В настоящее время работа с графическими изображениями актуальна. Это связано с тем, что представление информации в графическом виде является наиболее приемлемой для большинства пользователей вследствие ее наглядности (80% информации мозг человека получает по зрительному каналу).
Разработка данной программы позволит приобрести навыки работы с графикой в интегрированной среде программирования Delphi.
Предложенный
продукт представляет собой средство
для создания и редактирования графических
изображений. Изображения можно открывать,
сохранять в виде bmp-файлов, копировать,
вставлять, печатать, делать черно-белыми
или цветными. Созданные изображения можно
использовать в качестве фона рабочего
стола либо вставлять в другие документы.
1.Анализ технического задания
Примерами
аналогичных программных
В
процессе подготовки к созданию программы
рассматривались различные
- среда основана на языке Object Pascal, который проще и понятнее других языков программирования, например C++;
- язык системы имеет простые синтаксические структуры и понятный код;
- большая часть языка подобна ранним версиям Pascal’я, изучаемым ранее;
- Delphi обладает достаточно мощной системой визуального проектирования.
Delphi - язык и среда программирования, относящаяся к классу RAD- (Rapid Application Development - «Средство быстрой разработки приложений») средств CASE - технологии. Delphi сделала разработку мощных приложений Windows быстрым процессом, доставляющим удовольствие. Приложения Windows, для создания которых требовалось большое количество человеческих усилий например в С++, теперь могут быть написаны одним человеком, использующим Delphi.
Исходя из этого средой разработки программы стала среда визуального программирования Delphi.
При анализе задания были дополнительно сформулированы следующие дополнительные возможности:
- сохранение рисунков в файл (в формате bmp);
- открытие рисунков (в формате bmp);
- печать изображений;
- копирование изображения в буфер обмена и вставка изображения из него;
- режим свободного рисования (инструмент «карандаш»);
- режим ластика;
- задание цветов лини и заливки;
- задание стилей линии и заливки;
Интерфейс программы содержит:
- Меню программы, состоящее из 4-х подменю Файл (Новый, Открыть, Сохранить, Печать, Выход), Правка (Отменить, Копировать, Вставить, Дополнительно…), Справка (Помощь, О программе). Каждая функция, находящаяся в меню имеет свою комбинацию «горячих» клавиш.
- Панель инструментов, на которой расположены инструменты линия, прямоугольник, окружность, текст, карандаш, ластик, заливка.
- Ниспадающие окна выбора цветов заливки и линии.
- Панель состояния, на которой отображаются текущие координаты курсора и толщина линии.
- Окно настроек Дополнительно, в котором задаётся толщина линии, стили линии и заливки, параметры шрифта.
При создании интерфейса
программы предполагается использовать
следующие основные компоненты: TPaintBox,
TMainMenu, TSavePictureDialog, TOpenPictureDialog, TPrintDialog, TFontDialog,
TColorBox, TSpeedButton.
2.Разработка алгоритмов
Одним из важнейших пунктов решения поставленной задачи является разработка алгоритмов для написания рабочей программы.
Рисунок1
– Блок-схема
Данный
алгоритм блок-схема содержит основные
пункты работы разработанного приложения.
Действительно при
Алгоритм рисования
графического примитива выглядит следующим
образом. В зависимости от того какой
инструмент на панели инструментов выбрал
пользователь некой переменной присваивается
определенное значение. При нажатии на
левую кнопку мыши на плоскости рисования
происходит следующее:
Линия, прямоугольник, окружность
Переменным
X_Begin и Y_Begin присваивается текущие координаты
курсора мыши X и Y.
Карандаш, ластик
Текущая
позиция пера устанавливается в
точку текущих координат курсора мыши
X, Y.
Заливка
Область,
в которой находится курсор мыши
заливается текущей кистью. Процесс
начинается с точки, в которой
было произведено нажатие левой
кнопки мыши и продолжается до тех
пор, пока есть соседние точки с тем
цветом, который был у данной точки.
При удерживании
левой кнопки мыши и перемещении
её на плоскости рисования происходит
следующее:
Линия
Текущая
позиция пера устанавливается в
точку с координатами X_Begin, Y_Begin. Затем
рисуется линия из текущей позиции пера
в точку текущих координат мыши X, Y. Текущая
позиция пера перемещается в точку текущих
координат мыши X, Y.
Прямоугольник
Рисуется
прямоугольник с координатами верхнего
левого угла X_Begin, Y_Begin и правого нижнего
угла X, Y (текущие координаты курсора мыши).
Окружность
Рисуется
прямоугольник с координатами верхнего
левого угла X_Begin, Y_Begin и правого нижнего
угла X, Y (текущие координаты курсора мыши)
и вписывает в него окружность.
Карандаш, ластик
Рисуется
линия из текущей позиции пера
в точку текущих координат мыши X,
Y. Текущая позиция пера перемещается в
точку текущих координат мыши X, Y.
При отпускании
левой кнопки мыши на плоскости рисования
происходит следующее:
Линия
Текущая
позиция пера устанавливается в
точку с координатами X_Begin, Y_Begin. Затем
рисуется линия из текущей позиции пера
в точку текущих координат мыши
X, Y. Текущая
позиция пера перемещается в точку текущих
координат мыши X, Y.
Прямоугольник
Если
разность текущих координат положения
курсора мыши и X_Begin, Y_Begin больше либо
равно нулю, то рисуется прямоугольник
с координатами верхнего левого угла X,
Y (текущие координаты курсора мыши) и правого
нижнего угла X_Begin, Y_Begin. Иначе рисуется
прямоугольник с координатами верхнего
левого угла X_Begin, Y_Begin и правого нижнего
угла X, Y (текущие координаты курсора мыши).
Окружность
Если
разность текущих координат положения
курсора мыши и X_Begin, Y_Begin больше либо
равно нулю, то рисуется прямоугольник
с координатами верхнего левого угла X,
Y (текущие координаты курсора мыши) и правого
нижнего угла X_Begin, Y_Begin и в него вписывается
окружность. Иначе рисуется прямоугольник
с координатами верхнего левого угла X_Begin,
Y_Begin и правого нижнего угла X, Y (текущие
координаты курсора мыши) и в него вписывается
окружность.
Текст
Рисуется строка текста, начиная с точки с координатами текущего положения курсора мыши X, Y.
3.Руководство программиста
Пакет Delphi предназначен для создания больших программ, которые неудобно размещать в одном файле. В связи с этим программа формируется из нескольких файлов.
Основной частью программы
Как правило, эта часть,
Кроме этой части в программе используются различные модули, файлы которые имеют расширение .pas и из которых в программу включаются необходимые элементы.
Многие из модулей написаны заранее и могут использоваться в любой программе (стандартные модули), другие формирует разработчик, полностью или частично.
Модули, которые формирует разработчик делятся на модули, содержащие информацию, и модули, не связанные непосредственно с формами (модули разработчика). Последние предназначены для размещения текста программы, связанного с решением задачи, для которой она создается, размещения данных и так далее.
Проект данной работы состоит из четырех форм. Все сведения об этом помещены в таблицу 1.
Таблица1 – Используемые модули
| Название | Описание | Размер | |
| Графический редактор | Главная форма | 26 Kb | |
| Дополнительно | Форма дополнительных настроек | 4 Kb | |
| Текст | Форма ввода текста | 2 Kb | |
| Помощь | Форма помощи | 7 Kb | |
| Размеры изображения | Форма задания размеров плоскости рисования | 866 b | |
Основной частью программы - проектом - является файл Project1.dpr .Здесь можно изменять свойства различных компонентов.
В файлах с расширением .pas расположены коды модулей- форм программы. Их пять:
GrafRed.pas, Dopolnit.pas, Help.pas, ImageSize.pas, InputBox.pas. Они содержат одноимённые формы (файлы с расширением .dfm).
Главной модуль-формой является модуль форма GrafRed. В ней реализованы все основные глобальные переменные и подпрограммы. Глобальные переменные: Picture, BitMap (плоскости рисования), X_Begin, Y_Begin (координаты курсора мыши), a,b,c (выбранные пользователем значения), MyFont (шрифт), Mdown (нажатие кнопки мыши), R (прямоугольник). Подпрограммы: функция BrushStyle в зависимости от выбраннього пользователем значения возвращает результат типа TBrushStyle; функция PenStyle в зависимости от выбраннього пользователем значения возвращает результат типа TPenStyle.
Листинг программы расположен в приложении А.
4.Руководство пользователя
Для нормального функционирования приложения должны быть обеспечены следующие минимальные требования к составу технических средств:
- операционная система «Windows 95»;
- так как в программе имеет место рисование фигур, с последующим ее заполнением произвольным цветом, то для нормальной работы программы необходимо наличии видеокарты, поддерживающей 256 цветов и размером видеопамяти 1 Mb;
- так как программа производит математические вычисления и отнимает процессорное время, поэтому компьютер должен иметь процессор с частотой 90 MHz;
- объем оперативной памяти 16 Mb.
Соблюдение этих условий обеспечит нормальную работу программы.
Программа
предоставляет пользователю возможность
рисования графических
Для запуска программы необходимо запустить SFX-архив GrafRed.exe, указать путь извлечения и нажать кнопку «Извлечь». Затем по указанному пути найти файл Графический редактор.exe и запустить его. Так же возможен запуск программы с помощью командной строки, указав в ней путь и имя файла. Выйти из программы можно следующими способами: нажав “крестик” в правом верхнем углу приложения; нажав последовательность клавиш Alt+F4.
В ходе выполнения программы могут появится следующие сообщения рисунок 2 – сообщения:
- это сообщение появляется в том случае, если в меню Файл щёлкнуть мышкой по строке Новый или нажать комбинацию клавиш Ctrl+N. Если нажать кнопку Да, то откроется новый холст, иначе, при нажатии кнопки Нет новый холст создан не будет.
- это сообщение появляется каждый раз при закрытии приложения Графический редактор. Если нажата кнопка Да, то открывается диалоговое окно для сохранения изображения в формате bmp. Если нажата кнопка Нет, то происходит завершение приложения без сохранения изображения. Если нажата кнопка Отмена, то завершение приложения прекращается.
- это сообщение появляется в том случае, если пользователь задал хоть один из параметров размера изображения больше 1500 пикселов.
b
c
Рисунок
2 – Сообщения.
Пользовательский интерфейс программы является стандартизированным и естественно понятным, что существенно сокращает время обучения пользователей работы в данной программе. Наличие «горячих» клавиш значительно упрощает использование программы. При наведении курсора мыши на какую-либо кнопку отображается подсказка.
Заключение
В результате выполнения данного курсового проекта была получена работоспособная программа, которая соответствует требованиям, предъявляемым на этапе проектирования.
В программе реализованы принципы объектно-ориентированного программирования.
Цель курсового проекта, достигнута: создана программа, позволяющая рисовать графические примитивы (линия, прямоугольник, окружность), а также реализованы возможность свободного рисования (карандаш), заливка указанных областей иображения и вставка строки текста. Кроме того, в программе реализован ряд дополнительных возможностей, свойственным подобным графическим системам (можно менять стили линии и заливки, толщину линии, параметры шрифта).
В
созданную программу можно
Рассмотрены основные принципы программирования в среде DELPHI.
Теоретические
сведения были закреплены практическими
занятиями.
Приложение
А – листинг программы
unit GrafRed;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Buttons,
ColorGrd, ExtDlgs, Menus, StdCtrls, ComCtrls, Printers, Clipbrd;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
OpenPictureDialog1: TOpenPictureDialog;
SaveP: TSavePictureDialog;
PrintDialog1: TPrintDialog;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
N12: TMenuItem;
N13: TMenuItem;
ScrollBox1: TScrollBox;
PaintBox1: TPaintBox;
FontDialog1: TFontDialog;
StatusBar1: TStatusBar;
Bevel1: TBevel;
Label3: TLabel;
Label4: TLabel;
CBLine: TColorBox;
CBBrush: TColorBox;
SBPen: TSpeedButton;
SBErase: TSpeedButton;
SBBrush: TSpeedButton;
SpeedButton4: TSpeedButton;
SBLine: TSpeedButton;
SBRect: TSpeedButton;
SBEllipse: TSpeedButton;
SBText: TSpeedButton;
Label1: TLabel;
N18: TMenuItem;
N19: TMenuItem;
N15: TMenuItem;
N16: TMenuItem;
N14: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N13Click(Sender: TObject);
procedure SBLineClick(Sender: TObject);
procedure PaintBox1MouseDown(Sender: TObject; mbLeft: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure PaintBox1MouseUp(Sender: TObject; mbLeft: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure SBRectClick(Sender: TObject);
procedure SBEllipseClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormPaint(Sender: TObject);
procedure SBTextClick(Sender: TObject);
procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure N4Click(Sender: TObject);
procedure N16Click(Sender: TObject);
procedure UndoClick(Sender: TObject);
procedure SBPenClick(Sender: TObject);
procedure PaintBox1Paint(Sender: TObject);
procedure SBBrushClick(Sender: TObject);
procedure N19Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N10Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure SBEraseClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Picture, BitMap: TBitmap;
X_Begin, Y_Begin:integer;
a,b,c:byte;
MyFont: TFont;
MDown: Boolean;
R:TRect;
implementation
uses Dopolnit, Help, InputBox,
ImageSize;
{$R *.dfm}
function BrushStyle(c:byte):
begin
case c of
{установка стиля заливки в зависимости от выбора пользователя}
0: Picture.Canvas.Brush.Style := bsClear;
1: Picture.Canvas.Brush.Style := bsSolid;
2: Picture.Canvas.Brush.Style := bsHorizontal;
3: Picture.Canvas.Brush.Style := bsVertical;
4: Picture.Canvas.Brush.Style := bsFDiagonal;
5: Picture.Canvas.Brush.Style := bsBDiagonal;
6: Picture.Canvas.Brush.Style := bsCross;
7: Picture.Canvas.Brush.Style := bsDiagCross;
end;
end;
function PenStyle(b:byte):TPenStyle;
begin
case b of
{установка стиля линии в зависимости от выбора пользователя}
0: Picture.Canvas.Pen.Style := psClear;
1: Picture.Canvas.Pen.Style := psSolid;
2: Picture.Canvas.Pen.Style := psDash;
3: Picture.Canvas.Pen.Style := psDot;
4: Picture.Canvas.Pen.Style := psDashDot;
5: Picture.Canvas.Pen.Style := psDashDotDot;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
MDown := false;
N14.Enabled := false;
N11.Enabled:=false;
BitMap := TBitmap.Create;
Picture := TBitmap.Create;
BitMap.Width := PaintBox1.Width;
BitMap.Height := PaintBox1.Height;
Picture.Width := PaintBox1.Width;
Picture.Height := PaintBox1.Height;
MyFont := Form1.Font;
end;
procedure TForm1.N2Click(Sender: TObject); //создание нового холста
begin
if Application.MessageBox('Сейчас будет создан новый холст. Вы хотите продолжить?','Новый холст',MB_YESNO or MB_ICONQUESTION)=ID_YES then
begin
Form5.Edit1.Text := IntToStr(273); {стандартный размер холста по горизнтали}
Form5.Edit2.Text := IntToStr(217); (стандартный размер холста по вертикали}
Form5.ShowModal; //появление окна задания размеров холста
Picture.Canvas.Brush.Color:= clWhite;
Picture.Canvas.Pen.Style:=
Picture.Canvas.Brush.Style:=
Picture.Canvas.Rectangle(0,0,
Form1.FormPaint(nil); //
end;
end;
procedure TForm1.N8Click(Sender: TObject);
begin
Close
end;
procedure TForm1.N3Click(Sender: TObject); //открытие изображения
var FileName: String;
begin
if OpenPictureDialog1.Execute then
begin
Picture.LoadFromFile(
FileName := OpenPictureDialog1.FileName;
PaintBox1.Height:=Picture.
PaintBox1.Width:=Picture.
PaintBox1.Canvas.Draw(0,0,
end;
end;
procedure TForm1.N13Click(Sender: TObject); //о программе

- Графический редактор Inkscape
- Графический рисунок в дизайне плаката
- Графическое изображение статистических данных
- Графическое изображение статистических данных
- Графическое моделирование
- Графическое моделирование
- Графическое моделирование
- Графический метод решения задачи линейного программирования
- Графический метод решения задач линейного программирования
- Графический пакет системы Mathematica
- Графический пакет системы Mathematica
- Графический пейзаж в технике точечного тонирования
- Графический редактор
- Графический редактор