Основные типы графических редакторов
Изучение методики создания графического редактора, используя объектно-ориентированный язык программирования, описание его функциональных возможностей. Характеристика методики и этапов разработки алгоритма и его блок-схемы. Методика тестирования программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 07.06.2016 |
Размер файла | 829,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
- ОГЛАВЛЕНИЕ
- ВВЕДЕНИЕ
- 1.ПОСТАНОВКА ЗАДАЧИ
- 1.1 Средства разработки
- 2. ПРОЭКТИРОВАНИЕ
- 2.1 Разработка алгоритма
- 2.2 Блок-схема алгоритма
- 3. РЕАЛИЗАЦИЯ
- 4. ТЕСТИРОВАНИЕ
- ЗАКЛЮЧЕНИЕ
- БИБЛИОГРАФИЧЕСКИЙ СПИСОК
- ВВЕДЕНИЕ
- алгоритм программирование редактор графический
- Компьютерная графика - это специальная область информатики, изучающая методы и средства создания и обработки изображений с помощью программно-аппаратных вычислительных комплексов. Она охватывает все виды и формы представления изображений, доступных для восприятия человеком либо на экране монитора, либо в виде копии на внешнем носителе (бумага, киноплёнка, ткань и прочее).
- Без компьютерной графики невозможно представить себе не только компьютерный, но и обычный, вполне материальный мир. На сегодняшний день компьютеры и компьютерная графика неотъемлемая часть жизни современного общества. Для примера назовём медицину (компьютерная томография), научные исследования (визуализация строения вещества, векторных полей и других данных), моделирование тканей и одежды, опытно-конструкторские разработки, рекламные щиты, цветные журналы, спецэффекты в фильмах - всё это в той или иной мере имеет отношение к компьютерной графике. Поэтому созданы программы для создания и редактирования изображений, то есть графические редакторы.
- Компьютерной графикой в последнее время занимаются многие, что обусловлено высокими темпами развития вычислительной техники. Более 90% информации здоровый человек получает через зрение или ассоциирует с геометрическими пространственными представлениями. Компьютерная графика имеет огромный потенциал для облегчения процесса познания и творчества.
- Целью курсовой работы является создание графического редактора, используя объектно-ориентированный язык программирования, описание его функциональных возможностей.
1. ПОСТАНОВКА ЗАДАЧИ
Составьте программу для реализации графического редактора линий, изображенного на рисунке 1.1.:
Рисунок 1.1. - Пример работы
Целью данной работы является разработка простейшего графического редактора с помощью объектно-ориентированного языка программирования, с использованием его графических функций и методов. Реализованный графический редактор должен осуществлять работу с как уже имеющимися изображениями, так и создавать собственные с помощью возможности создание рисунков с помощью линий.
1.1 Средства разработки
Задача решена с помощью алгоритма, реализованного в среде Borland Developer Studio 2006 и на языке программирования С++.
2. ПРОЭКТИРОВАНИЕ
2.1 Разработка алгоритма
Разработка алгоритма происходила в два этапа. Это создание «каркаса» программы и расширение возможностей.
На первом этапе необходимо определить, как будет рисоваться линия. Для этого в автоматически созданной форме Form1 создаем два объекта: Image и PaintBox. В свойствах Image1 указываем растягивание на всю форму. Расположение PaintBox1 не принципиально, оно будет меняться в процессе работы программы соответственно расположению курсора мыши. В Image1 указываем три события:
По нажатию кнопки мыши (событие OnMouseDown) перемещаем PaintBox1 по координатам указателя мыши:
PaintBox1->Left=X;
PaintBox1->Top=Y;
PaintBox1->Width=0;
PaintBox1->Height=0;
При движении мыши (OnMouseMove) меняем ширину и высоту PaintBox1 соответственно указателю мыши, рисуем линию по координатам верхнего левого и нижнего правого угла PaintBox1, одновременно с этим выводим рисуемую линию на экран:
PaintBox1->Width=X-PaintBox1->Left;
PaintBox1->Height=Y-PaintBox1->Top;
Application->ProcessMessages();
PaintBox1->Canvas->MoveTo(0,0);
PaintBox1->Canvas->LineTo(X-PaintBox1->Left, Y-PaintBox1->Top);
При отпускании кнопки мыши (OnMouseUp) записываем линию в Image1 по координатам верхнего левого и нижнего правого угла PaintBox1 с учетом разницы координат между PaintBox1 и Image1:
Image1->Canvas->MoveTo(PaintBox1->Left,PaintBox1->Top);
Image1->Canvas->LineTo(PaintBox1->Left+PaintBox1->Width,
PaintBox1->Top+PaintBox1->Height);
В данном виде программа имеет недостаток, линия выводится на экран не только, когда пользователь держит кнопку мыши нажатой, но и в остальное время (из последней использовавшейся координаты при событии Image1MouseDown). Для избавления от данного недостатка добавим логическую переменную bool F, которая будет изменяться в соответствии с действием пользователя. Таким образом, что при нажатии кнопки мыши F=true, а при отпускании F=falce и используем оператор if-else включения отображения рисуемой линии при нажатой кнопки мыши и исключения рисования лини после отпускания.
«Каркас» Программы закончен, программа запускается, в ней можно рисовать линии. Окно программы показано на рисунке 2.1.1.:
Рисунок 2.1.1 - Основа программы
Теперь необходимо создать дополнительный функционал, в виде задания цвета и ширины рисуемой линии, сохранения изображения в файл, загрузки изображения из файла и очистки полотна.
Для удобства работы с компонентами создадим две панели (компонент Panel), Panel1 и Panel2 которые служат для разделения основного и дополнительного функционала программы.
На Panel1 выведем Image1 и PaintBox1. После расположения Image1 и PaintBox1 на Panel1 случился сдвиг координат PaintBox1 на 1 вниз и вправо. Внесем поправки в отображение линии:
PaintBox1->Canvas->MoveTo(1,1);
PaintBox1->Canvas->LineTo(X+1-PaintBox1->Left, Y+1-PaintBox1->Top);
Так же необходимо задать команду, выполняющуюся при открытии программы - заливка полотна белым цветом. Иначе цвет полотна будет таким же, как и у Form1 - серым:
Image1->Canvas->FloodFill(0,0,RGB(255,255,255), fsSurface);
На Panel2 расположим элементы управления, такие как: кнопки изменения цветов (Shape), селектор выбора толщины линии (TCSpinEdit), , кнопку очистки полона (Button1) и меню (MainMenu) с сохранением и открытием файла. И настроим их внешний вид.
На рисунке 2.1.2. видно, как стала выглядеть программа:
Рисунок 2.1.2 - Будущий внешний вид
Но расположенные объекты еще ничего не делают, к ним необходимо привязать соответствующие функции.
За Shape1-Shape8 закрепим изменение цвета линии по нажатию в соответствии с цветом самих компонентов:
Image1->Canvas->Pen->Color=RGB(255,255,255);
PaintBox1->Canvas->Pen->Color=RGB(255,255,255);
Аналогично для остальных кнопок. По коду видно, что необходимо изменять цвет линии сразу в двух компонентах, это необходимо для того, чтобы цвет линии во время ее рисования и после того, как она была нарисована, был одинаков.
Дальше закрепим за TCSpinEdit1 выбор толщины линии:
Image1->Canvas->Pen->Width=StrToInt(CSpinEdit1->Text);
PaintBox1->Canvas->Pen->Width=StrToInt(CSpinEdit1->Text);
Так же этот код надо выполнить при старте программы, для синхронизации значений толщины линии выбранным по умолчанию (5) в CSpinEdit1 и толщиной линии, выставляемой по умолчанию (1) в Image1 и PainpBox1.
Кнопке «Очистить» задаем такой код:
TRect r;
r.left=Image1->Left-1;
r.right=Image1->Width;
r.bottom=Image1->Height;
r.top=Image1->Top-1;
Image1->Canvas->Brush->Color=RGB(255,255,255);
Image1->Canvas->FillRect(r);
Данная команда создает белый прямоугольник на Image1 равный ему по размеру.
Дальше программируем диалоговые окна сохранения и загрузки изображения:
if (SaveDialog1->Execute())
{
Image1->Picture->SaveToFile(SaveDialog1->FileName );
}
if (OpenPictureDialog1->Execute())
{
Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName );
}
Так же была добавлена статусная строка для отображения текущих координат мыши на рисунке и цвет линии выбранный в данный момент. Реализуем это с помощью этого кода:
StatusBar1->SimpleText=
"Положение мыши: X [ "+IntToStr(X)+" ] Y [ "+IntToStr(Y)+" ] "+
"Цвет: R"+IntToStr(GetRValue(ColorToRGB(Image1->Canvas->Pen->Color)))+
"G"+IntToStr(GetGValue(ColorToRGB(Image1->Canvas->Pen->Color)))+
"B"+IntToStr(GetBValue(ColorToRGB(Image1->Canvas->Pen->Color)));
Программа готова
2.1 Блок-схема алгоритма
РЕАЛИЗАЦИЯ
Для реализации приложения был использован языка программирования C++. Код получившейся программы представлен ниже:
Код в файле Unit1.h:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "IWBaseControl"
#pragma link "IWBaseHTMLControl"
#pragma link "IWCompListbox"
#pragma link "IWControl"
#pragma link "IWVCLBaseControl"
#pragma link "cspin"
#pragma resource "*.dfm"
TForm1 *Form1;
bool F;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
F=false;
Image1->Canvas->Pen->Width=StrToInt(CSpinEdit1->Text) ;
PaintBox1->Canvas->Pen->Width=StrToInt(CSpinEdit1->Text) ;
Image1->Canvas->FloodFill(0,0,RGB(255,255,255), fsSurface);
Form1->DoubleBuffered=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
PaintBox1->Left=X;
PaintBox1->Top=Y;
PaintBox1->Width=0;
PaintBox1->Height=0;
F=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
if (F)
{
PaintBox1->Width=X-PaintBox1->Left;
PaintBox1->Height=Y-PaintBox1->Top;
Application->ProcessMessages();
PaintBox1->Canvas->MoveTo(1,1);
PaintBox1->Canvas->LineTo(X+1-PaintBox1->Left, Y+1-PaintBox1->Top);
}
StatusBar1->SimpleText="Положение мыши: X [ "+IntToStr(X)+" ] Y [ "+IntToStr(Y)+" ]"+"Цвет: R"+IntToStr(GetRValue(ColorToRGB(Image1->Canvas->Pen->Color)))+" G"+IntToStr(GetGValue(ColorToRGB(Image1->Canvas->Pen->Color)))+" B"+IntToStr(GetBValue(ColorToRGB(Image1->Canvas->Pen->Color)));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
F=false;
Image1->Canvas->MoveTo(PaintBox1->Left,PaintBox1->Top);
Image1->Canvas->LineTo(PaintBox1->Left+PaintBox1->Width,PaintBox1->Top+PaintBox1->Height);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SBlackMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
Image1->Canvas->Pen->Color=RGB(0,0,0);
PaintBox1->Canvas->Pen->Color=RGB(0,0,0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SRedMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
Image1->Canvas->Pen->Color=RGB(255,0,0);
PaintBox1->Canvas->Pen->Color=RGB(255,0,0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SGreenMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
Image1->Canvas->Pen->Color=RGB(0,255,0);
PaintBox1->Canvas->Pen->Color=RGB(0,255,0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SWhiteMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
Image1->Canvas->Pen->Color=RGB(255,255,255);
PaintBox1->Canvas->Pen->Color=RGB(255,255,255);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SBlueMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
Image1->Canvas->Pen->Color=RGB(0,0,255);
PaintBox1->Canvas->Pen->Color=RGB(0,0,255);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N1Click(TObject *Sender)
{
if (SaveDialog1->Execute())
{
Image1->Picture->SaveToFile(SaveDialog1->FileName );
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N2Click(TObject *Sender)
{
if (OpenPictureDialog1->Execute())
{
Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName );
}
Image1->Canvas->Pen->Width=StrToInt(CSpinEdit1->Text) ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CSpinEdit1Change(TObject *Sender)
{
Image1->Canvas->Pen->Width=StrToInt(CSpinEdit1->Text) ;
PaintBox1->Canvas->Pen->Width=StrToInt(CSpinEdit1->Text) ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Shape1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
Image1->Canvas->Pen->Color=RGB(0,255,255);
PaintBox1->Canvas->Pen->Color=RGB(0,255,255);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Shape2MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
Image1->Canvas->Pen->Color=RGB(255,0,255);
PaintBox1->Canvas->Pen->Color=RGB(255,0,255);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Shape3MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
Image1->Canvas->Pen->Color=RGB(255,255,0);
PaintBox1->Canvas->Pen->Color=RGB(255,255,0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TRect r;
r.left=Image1->Left-1;
r.right=Image1->Width;
r.bottom=Image1->Height;
r.top=Image1->Top-1;
Image1->Canvas->Brush->Color=RGB(255,255,255);
Image1->Canvas->FillRect(r);
StatusBar1->SimpleText="Стёрли!";
}
//---------------------------------------------------------------------------
Код в файле Unit1.h:
// ---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
// ---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Menus.hpp>
#include <FileCtrl.hpp>
#include <ExtCtrls.hpp>
#include <Dialogs.hpp>
#include <ExtDlgs.hpp>
#include "IWBaseControl.hpp"
#include "IWBaseHTMLControl.hpp"
#include "IWCompListbox.hpp"
#include "IWControl.hpp"
#include "IWVCLBaseControl.hpp"
#include <DBCtrls.hpp>
#include <ActnList.hpp>
#include <Buttons.hpp>
#include "cspin.h"
#include <ComCtrls.hpp>
// ---------------------------------------------------------------------------
class TForm1 : public TForm {
__published: // IDE-managed Components
TImage *Image1;
TPaintBox *PaintBox1;
TPanel *Panel1;
TMainMenu *MainMenu1;
TOpenPictureDialog *OpenPictureDialog1;
TSaveDialog *SaveDialog1;
TPanel *Panel2;
TShape *SBlack;
TShape *SRed;
TShape *SGreen;
TShape *SWhite;
TShape *SBlue;
TLabel *Label2;
TLabel *Label1;
TMenuItem *N1;
TMenuItem *N2;
TCSpinEdit *CSpinEdit1;
TShape *Shape1;
TShape *Shape2;
TShape *Shape3;
TButton *Button1;
TStatusBar *StatusBar1;
void __fastcall Image1MouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y);
void __fastcall Image1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y);
void __fastcall Image1MouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y);
void __fastcall SBlackMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y);
void __fastcall SRedMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y);
void __fastcall SGreenMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y);
void __fastcall SWhiteMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
int X, int Y);
void __fastcall SBlueMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
int X, int Y);
void __fastcall N1Click(TObject *Sender);
void __fastcall N2Click(TObject *Sender);
void __fastcall CSpinEdit1Change(TObject *Sender);
void __fastcall Shape1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
int X, int Y);
void __fastcall Shape2MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
int X, int Y);
void __fastcall Shape3MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
int X, int Y);
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public : // User declarations
__fastcall TForm1(TComponent* Owner);
};
// ---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
// ---------------------------------------------------------------------------
#endif
3. ТЕСТИРОВАНИЕ
Скриншоты, демонстрирующие работу программы представлены ниже на рисунках 4.1., 4.2., 4.3. и 4.4.:
Рисунок 4.1 - Интерфейс и результат работы программы
Рисунок 4.2 - Диалоговое окно сохранения файла
Рисунок 4.3 - Диалоговое окно открытия файла с предпросмотром
Рисунок 4.4 - очистка изображения
ЗАКЛЮЧЕНИЕ
Данная курсовая работа потребовала изучения большого количества литературного материала, в результате чего были изучены основные типы графических редакторов, их достоинства и недостатки. Познакомившись с наиболее популярными в настоящее время программами для просмотра графических изображений, была достигнута поставленная цель курсовой работы: создан графический редактор.
В ходе выполнения курсового проекта закреплены понятие объектно-ориентированного программирования, объектно-ориентированного анализа и объектно-ориентированного подхода, навыки по программированию в объектно-ориентированной среде.
Программа, описанная в курсовом проекте разработана в соответствии с постановкой задачи на курсовую работу по теме Разработка графического редактора по дисциплине объектно-ориентированное программирование.
Тестирование подтвердило, что программа корректно выполняет обработку данных и демонстрацию результатов.
Всё это свидетельствует о работоспособности программы и позволяет сделать вывод о ее пригодности для создания и редактирования графических изображений.
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Интернет-портал CyberForum.ru
2. Павловская, Т.А. С/С ++. Программирование на языке высокого уровня: учебник / Т.А.Павловская. - СПб.: Питер, 2010. - 461с.: ил.
3. Подбельский, В.В. Язык СИ++.: учебное пособие /В.В. Подбельский. -5-е изд.-М.: Финансы и статистика, 2006. - 260с.: ил.
4. Подбельский, В.В. Программирование на языке СИ: учеб. пособие / В.В.Подбельский, С.С.Фомин. - 2-е изд., доп. - М.: Финансы и статистика, 2002. - 600с.: ил.
5. Аляев, Ю.А. Алгоритмизация и языки программирования Pascal, C++, Visual Basic: учебно- справочное пособие / Ю.А.Аляев, О.А.Козлов. - М.: Финансы и статистика, 2004. - 320с.
6. Иванова Г.С. Основы программирования: Учебник для вузов. - 2-е изд., перераб, и доп. - М.: Изд-во МГТУ им. Н.Э. Баумана, 2002. - 416 с.
7. Культин, Н.Б. С.С ++ в задачах и примерах / Н.Б. Культин. - СПб.: БХВ_Петербург, 2003. -288с.: ил.
Размещено на Allbest.ru
Подобные документы
Изучение особенностей растровых и векторных графических редакторов. Создание графического редактора: выбор языка программирования, разработка структуры программы и алгоритма работы. Описание интерфейса программы. Руководство программиста и пользователя.
курсовая работа [1,3 M], добавлен 28.07.2013Разработка графического редактора для рисования двухмерной и трехмерной графики, используя язык программирования Java и интерфейсы прикладного программирования Java 2D и Java 3D. Создание графического редактора 3D Paint. Основные методы класса Graphics.
курсовая работа [197,5 K], добавлен 19.11.2009Объектно-ориентированный язык программирования: общая характеристика и свойства. Базовый и производный классы, конструкторы производного класса. Конструкторы и неопределенность при множественном наследовании. Роль наследования при разработке программ.
курсовая работа [688,3 K], добавлен 23.12.2013Общая характеристика возможностей языка программирования C++ Win32 Api. Выбор метода решения задачи по созданию простого графического редактора. Описание проектирования функциональных частей, разработки программы. Тестирование и анализ результатов.
курсовая работа [388,5 K], добавлен 24.01.2016Виды графических редакторов. Форматы файлов для хранения растровых графических изображений. Среда графического редактора. Панели инструментов и режимы работы графических редакторов. Инструменты редактирования рисунка. Изменение шрифта текста на рисунке.
контрольная работа [246,6 K], добавлен 16.12.2010Понятие "компьютерная графика". Изучение графических редакторов в школьном курсе для 8-го класса. Способы создания цифровых графических объектов. Представление о цветовых моделях. Анализ программы Inkscape. Копирование файла в папку установки приложения.
курсовая работа [1,5 M], добавлен 17.05.2014Обеспечение универсальности функций тестирования при разработке программы для тестирования студентов. Бесплатное программное обеспечение. Анализ выбора среды программирования. Особенности среды Delphi и СУБД MySQL. Описание алгоритма и блок-схемы.
курсовая работа [1,6 M], добавлен 01.02.2013Понятие алгоритма, его назначение, представление (изобразительные средства для описания), типы, способы записи, схемы. Основные принципы разработки алгоритмов и программ. Характеристика языков программирования. Средства и правила построения блок-схем.
реферат [87,9 K], добавлен 26.03.2010Delphi - среда быстрой разработки, в которой в качестве языка программирования используется типизированный объектно-ориентированный язык Delphi. Варианты программного пакета. Особенности работы, вид экрана после запуска. Описание структуры программы.
курсовая работа [1,3 M], добавлен 25.11.2014C# как объектно-ориентированный язык программирования. Объектно-ориентированный анализ и проектирование системы на языке UML. Сущность программы "Учёт пациентов в регистратуре поликлиники", ее достоинства и недостатки, пошаговая инструкция пользователя.
курсовая работа [1,5 M], добавлен 17.02.2013