Графический редактор. 3

Введение

Целью данной работы является разработка программы, позволяющей рисовать графические  примитивы.

Представление данных на мониторе компьютера в графическом  виде впервые было реализовано в  середине 50-х годов для больших  ЭВМ, применявшихся в научных  и военных исследованиях. С тех пор графический способ отображения данных стал неотъемлемой принадлежностью подавляющего числа компьютерных систем, в особенности персональных.

В настоящее  время работа с графическими изображениями  актуальна. Это связано с тем, что представление информации в графическом виде является наиболее приемлемой для большинства пользователей вследствие ее наглядности (80% информации мозг человека получает по зрительному каналу).

Разработка  данной программы позволит приобрести навыки работы с графикой в интегрированной среде программирования Delphi.

Предложенный  продукт представляет собой средство для создания и редактирования графических изображений. Изображения можно открывать, сохранять в виде bmp-файлов, копировать, вставлять, печатать, делать черно-белыми или цветными. Созданные изображения можно использовать в качестве фона рабочего стола либо вставлять в другие документы.  
 
 
 
 
 
 
 
 
 

 

1.Анализ технического задания

   Примерами аналогичных программных продуктов  являются Microsoft Paint, Adobe Illustrator и другие. Специализируясь в конкретной области, каждый из них обладает рядом достоинств и недостатков. Практически все достоинства достигаются за счет увеличения требований к ресурсам системы. Данное же приложение не требует больших затрат ресурсов компьютера и занимает малый объем дискового пространства.

   В процессе подготовки к созданию программы  рассматривались различные средства программирования. В результате этого, в качестве среды разработки была выбрана среда визуального программирования Delphi. Данная система разработки прикладных программ выгодно отличается от других программных средств следующими критериями:

  • среда основана на языке Object Pascal, который проще и понятнее других языков программирования, например C++;
  • язык системы имеет простые синтаксические структуры и понятный код;
  • большая часть языка подобна ранним версиям Pascal’я, изучаемым ранее;
  • Delphi обладает достаточно мощной системой визуального проектирования.

    Delphi - язык и среда программирования, относящаяся к классу RAD- (Rapid Application Development - «Средство быстрой разработки приложений») средств CASE - технологии. Delphi сделала разработку мощных приложений Windows быстрым процессом, доставляющим удовольствие. Приложения  Windows,  для создания  которых требовалось большое  количество человеческих усилий например в С++, теперь могут быть написаны одним человеком, использующим Delphi.

    Исходя  из этого средой разработки  программы  стала  среда  визуального программирования Delphi.

   При анализе задания были дополнительно сформулированы следующие дополнительные возможности:

  1. сохранение рисунков в файл (в формате bmp);
  2. открытие рисунков (в формате bmp);
  3. печать изображений;
  4. копирование изображения в буфер обмена и вставка изображения из него;
  5. режим свободного рисования (инструмент «карандаш»);
 

  1. режим ластика;
  2. задание цветов лини и заливки;
  3. задание стилей линии и заливки;

Интерфейс программы содержит:

  1. Меню программы, состоящее из 4-х подменю Файл (Новый, Открыть, Сохранить, Печать, Выход), Правка (Отменить, Копировать, Вставить, Дополнительно…), Справка (Помощь, О программе). Каждая функция, находящаяся в меню имеет свою комбинацию «горячих» клавиш.
  2. Панель инструментов, на которой расположены инструменты линия, прямоугольник, окружность, текст, карандаш, ластик, заливка.
  3. Ниспадающие окна выбора цветов заливки и линии.
  4. Панель состояния, на которой отображаются текущие координаты курсора и толщина линии.
  5. Окно настроек Дополнительно, в котором задаётся толщина линии, стили линии и заливки, параметры шрифта.

При создании интерфейса программы предполагается использовать следующие основные компоненты: 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 предназначен для создания больших программ, которые неудобно размещать в одном файле. В связи с этим программа формируется из нескольких файлов.

     Основной частью программы является  проект. Файл, в котором размещается  проект, называется расширением  .dpr.

     Как правило, эта часть, являющаяся  собирательной частью программы,  небольшая и формируется самим 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.Руководство  пользователя

   Для нормального функционирования приложения должны быть обеспечены следующие минимальные требования к составу технических средств:

  1. операционная система «Windows 95»;
  2. так как в программе имеет место рисование фигур, с последующим ее заполнением произвольным цветом, то для нормальной работы программы необходимо наличии видеокарты, поддерживающей 256 цветов и размером видеопамяти 1 Mb;
  3. так как программа производит математические вычисления и отнимает процессорное время, поэтому компьютер должен иметь процессор с частотой 90 MHz;
  4. объем оперативной памяти 16 Mb.

   Соблюдение  этих условий обеспечит нормальную работу программы.

   Программа предоставляет пользователю возможность  рисования графических примитивов. При работе с программой пользователю предоставляются следующие возможности: рисование линии, прямоугольника, окружности, вставка строки текста, свободное рисование, стирание нарисованного изображения, заливка изображения, при помощи соответствующих инструментов, а также по мимо этого у пользователя есть возможность выбирать цвета, стили, толщину линии и заливки, настраивать шрифт строки текста, сохранять созданные изображения в формате .bmp, открывать изображения в формате .bmp, печатать изображения, копировать, вставлять изображения, задавать начальные размеры изображения. Приложение имеет встроенную справочную систему, позволяющую пользователю облегчить работу с программой.  Справочная система отображается  на экране при   нажатии клавиши F1 или из соответствующего пункта меню.  Так же программа содержит  систему контроля возникновения ошибок.

    Для запуска программы необходимо запустить  SFX-архив GrafRed.exe, указать путь извлечения и нажать кнопку «Извлечь». Затем по указанному пути найти файл Графический редактор.exe и запустить его. Так же возможен запуск программы с помощью командной строки, указав в ней путь и имя файла. Выйти из программы можно следующими способами: нажав “крестик” в правом верхнем углу приложения; нажав последовательность клавиш Alt+F4.

    

    В ходе выполнения программы могут  появится следующие сообщения рисунок 2 – сообщения:

    1. это сообщение появляется в том случае, если в меню Файл щёлкнуть мышкой по строке Новый или нажать комбинацию клавиш Ctrl+N. Если нажать кнопку Да, то откроется новый холст, иначе, при нажатии кнопки Нет новый холст создан не будет.
    2. это сообщение появляется каждый раз при закрытии приложения Графический редактор. Если нажата кнопка Да, то открывается диалоговое окно для сохранения изображения в формате bmp. Если нажата кнопка Нет, то происходит завершение приложения без сохранения изображения. Если нажата кнопка Отмена, то завершение приложения прекращается.
    3. это сообщение появляется в том случае, если пользователь задал хоть один из параметров размера изображения больше 1500 пикселов.

                                                               a

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):TBrushStyle;

 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:=psClear;

   Picture.Canvas.Brush.Style:=bsSolid;

   Picture.Canvas.Rectangle(0,0,Picture.Width,Picture.Height);

   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(OpenPictureDialog1.FileName);

    FileName := OpenPictureDialog1.FileName;

    PaintBox1.Height:=Picture.Height; //задание размера холста в

    PaintBox1.Width:=Picture.Width;   //соответствии с размерами                                   //открываемого изображения

    PaintBox1.Canvas.Draw(0,0,Picture);

  end;

end; 

procedure TForm1.N13Click(Sender: TObject); //о программе

Графический редактор. 3