На бирже курсовых и дипломных проектов можно найти образцы готовых работ или получить помощь в написании уникальных курсовых работ, дипломов, лабораторных работ, контрольных работ, диссертаций, рефератов. Так же вы мажете самостоятельно повысить уникальность своей работы для прохождения проверки на плагиат всего за несколько минут.

ЛИЧНЫЙ КАБИНЕТ 

 

Здравствуйте гость!

 

Логин:

Пароль:

 

Запомнить

 

 

Забыли пароль? Регистрация

Повышение уникальности

Предлагаем нашим посетителям воспользоваться бесплатным программным обеспечением «StudentHelp», которое позволит вам всего за несколько минут, выполнить повышение уникальности любого файла в формате MS Word. После такого повышения уникальности, ваша работа легко пройдете проверку в системах антиплагиат вуз, antiplagiat.ru, etxt.ru или advego.ru. Программа «StudentHelp» работает по уникальной технологии и при повышении уникальности не вставляет в текст скрытых символов, и даже если препод скопирует текст в блокнот – не увидит ни каких отличий от текста в Word файле.

Работа № 80538


Наименование:


Лабораторка РАЗРАБОТКА РАСТРОВОГО ГРАФИЧЕСКОГО РЕДАКТОРА

Информация:

Тип работы: Лабораторка. Добавлен: 11.9.2014. Сдан: 2010. Страниц: 70. Уникальность по antiplagiat.ru: < 30%

Описание (план):



Оглавление

1. Задание.................................................................................................... 3
2. Разработка общего алгоритма построения графического редактора...................................................................................................... 4
3. Разработка графического редактора. Алгоритмы работы и блок-схемы пользовательских функций:
3.1 Создание нового изображения...................................................... 3.2 Удаление закрытых форм….......................................................... 6 9
3.3 Загрузка изображения.................................................................... 3.4 Подстройка размеров формы........................................................ 3.5 Сохранение изображения.............................................................. 3.6 Поддержка буфера обмена............................................................ 3.7 Поддержка буфера отката............................................................. 3.8 Изменение размеров изображения............................................... 3.9 Разработка инстуменов редактирования изображения: линия, кисть, ластик, заливка, прямоугольник, эллипс, многоугольник...... 3.10 Выбор цвета рисования и заливки.............................................. 3.11 Установка индивидуальных параметров рисования................. 3.12 Разработка графического фильтра.............................................. 3.13 Разработка справочной системы................................................. 4. Приложение............................................................................................ 12 14 16 17 19 20 24 41 42 43 47 48

1. Задание

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

Требования к редактору:
1. Создание нового изображения.
2. Загрузка и сохранение графических файлов в формате BMP.
3. Поддержка до 10 окон редактирования.
4. Поддержка буфера обмена.
5. Возможность «отката» последней операции редактирования.
6. Возможность изменения размеров изображения (с масштабированием и без него).
7. Поддержка инструментов: линия, кисть, ластик, заливка, прямоугольник, эллипс, многоугольник с индивидуальными параметрами (толщина, количество углов).
8. Персональные курсоры в режиме редактирования для каждого инструмента.
9. Возможность выбора цвета рисования и заливки.
10. Переключение между инструментами с помощью панели инструментов и с помощью контекстного меню окна редактирования.
11. Отображение дополнительной информации в строке состояния формы с редактируемым изображением (режим работы, текущие координаты курсора и цвет пикселя под ним).
12. Реализация модального графического фильтра по апертуре «диагональный крест» с размерами от 3х3 до 9х9.
13. Наличие справочной системы по основным функциям редактора: элементам интерфейса, инструментам и фильтру.

2. Разработка общего алгоритма построения графического редактора

Для соответствия графического редактора предъявленным требованиям разработаем общий алгоритм его работы:
1. Если пользователю необходимо создать новое изображение, то создаем новую форму для редактирования;
2. Если пользователю необходимо загрузить изображение, то загружаем изображение;
3. Если изображение загружено или создано в данном графическом редакторе, пользователь может:
a. изменить размеры изображения;
b. редактировать изображение, используя программные инструменты;
c. применить фильтр к изображению;
4. Если пользователю необходимо сохранить изображение:
a. Предлагается ввести имя файла изображения;
b. Изображение сохраняется в указанную пользователем директорию;
5. Пользователь может воспользоваться справочной системой
6. Если пользователю необходимо завершить работу с графическим редактором, то осуществляется выход из программы, иначе алгоритм повторяется.

Блок-схема, соответствующая разработанному алгоритму, представлена на рис.1.

Рисунок 1 - Блок-схема общего алгоритма работы графического редактора
3. Разработка графического редактора. Алгоритмы работы и блок-схемы пользовательских функций
3.1 Создание нового изображения
Для создания нового изображения в модуле Unit_main создана процедура-обработчик нажатия на пункт меню N2 («Новая картинка») формы Form_Main - TForm_Main.N2Click.
Алгоритм работы процедуры создания изображения следующий:
1) пункты меню N4 («Сохранить картинку»), N_size («Размер...») и N_filter («Фильтр») становятся доступны:

// разрешить изменение размеров, использование фильтра, сохранение
N_size.Enabled:=true;
N_filter.Enabled:=true;
N4.Enabled:=true;

2) для подсчета количества открытых форм проверяем массив состояний форм - Form_Picture_Flag. Если есть закрытые формы, запускается процедура удаления закрытых форм RemovePicForms (эта процедура будет рассмотрена в пункте 3.2):

//Проверяем наличие закрытых форм. Если есть, запускаем процедуру удаления закрытых форм
if Form_Picture_Flag[0] then RemovePicForms;
3) для выполнения требования поддержки до 10 окон редактирования проверяем количество открытых форм редактирования - N_of_Forms. Если число форм для редактирования равно 10, выводится сообщение об ошибке:

//Ошибка, если количество форм уже равно 10
if N_of_Forms>10 then MessageDlg(Ошибка!,mtInformation,mbOKCancel,0);

Если форм меньше 10, то:
-увеличиваем количество форм:

Inc(N_of_Forms);

-создаем форму редактирования в массиве форм - Form_Picture. Очищаем изображение на ней (компонент Image_Pic):

Application.CreateForm(TForm_Pic, Form_Picture[N_of_Forms]);
Form_Picture[N_of_Forms].Image_Pic.Canvas.Rectangle(0,0,Form_Picture[N_of_Forms].Image_Pic.Width,Form_Picture[N_of_Forms].Image_Pic.Height);
-используем свойство Tag для присвоения новой форме номера:

Form_Picture[N_of_Forms].Tag:=N_of_Forms;

-создаем заголовок формы:

Form_Picture[N_of_Forms].Caption:=Unnamed Image;

-показываем созданную форму:

Form_Picture[N_of_Forms].Show;

-поднимаем флаг наличия созданной формы в массиве Form_Pic_flag:

Form_Picture_Flag[N_of_Forms]:=true;

Блок-схема алгоритма создания нового изображения приведена на рис.2.


Рисунок 2 - Блок-схема алгоритма работы процедуры создания нового изображения


3.2 Удаление закрытых форм
Для удаления закрытых форм, создадим процедуру RemovePicForms, созданную в модуле Unit_Main.
Алгоритм работы процедуры удаления закрытых форм следующий:
1) для того, чтобы отсортировать массив форм, разместив открытые формы последовательно в начале массива, запускаем цикл для прохождения по созданным формам:

//цикл перебирает все значения массива Form_Picture_Flag, кроме последнего
for i:=1 to (N_of_Forms-1) do
-используем массив состояний форм для проверки, закрыта ли i-я форма:

//находим номер закрытой формы
if (Form_Picture_Flag[i]=false) then
Если форма закрыта, то:
- проверяем флаг наличия закрытых форм. Если имеется открытая форма, то записываем ее вместо закрытой и в массиве состояний форм устанавливаем соответствующие флаги.
Фрагмент кода:

j:=i;
repeat
Inc(j);
if Form_Picture_Flag[j]=true then
begin
Form_Picture[i]:=Form_Picture[j];
Form_Picture_Flag[j]:=false;
Form_Picture[i].Tag:=i;
k:=i;
break;
end;
until (j = N_of_Forms);
-определяем число открытых форм, если была закрыта последняя форма редактирования изображения. Фрагмент кода:

if (Form_Picture_flag[n_of_forms]=false) then
begin
k:=0;
for i:=1 to (n_of_forms-1) do
if Form_Picture_flag[i]=true then k:=k+1;
end;

2) обновляем количество открытых форм:

N_of_Forms:=k;

3) опускаем флаг наличия закрытых форм:

Form_Picture_Flag[0]:=false;

Блок-схема алгоритма удаления закрытых форм приведена на рис.3.



Рисунок 3 - Блок-схема алгоритма удаления закрытых форм

3.3 Загрузка изображения
Для загрузки изображения в модуле Unit_main создана процедура-обработчик нажатия на пункт меню N3 («Загрузить картинку») формы Form_Main - TForm_main.N3Click.
Алгоритм работы процедуры загрузки изображения следующий:
1) если диалог открытия выполнен:

if OpenPictureDialog_Main.Execute then
-для временного хранения загружаемого изображения создаем буферное изображение:

BMP:=TBitmap.Create; //создается буферное изображение

-для подсчета количества открытых форм проверяем массив состояний форм - Form_Picture_flag. Если есть закрытые формы, то запускается процедура удаления закрытых форм RemovePicForms (рассмотрена в пункте 3.2):

//есть закрытые формы? Запускаем процедуру удаления закрытых форм
if Form_Picture_Flag[0] then RemovePicForms;
-если количество открытых форм редактирования N_of_Forms равно нулю, то необходимо создать новую форму. Для этого вызываем процедура Form_Main.N2.Click (рассмотрена в пункте 3.1):

if(N_of_Forms=0) then Form_Main.N2.Click;
-загружаем картинку в созданный ранее буфер:

//загружаем буферное изображение из файла
BMP.LoadFromFile(OpenPictureDialog_Main.FileName);

-для подстройки размеров формы под загружаемую картинку используем процедуру AjustFormWH (будет рассмотрена в пункте 3.4):

//задаем размеры окна
AjustFormWH(Form_Picture[Current_Form],BMP.Width,BMP.Height);

-копируем изображение из буфера на форму:

//изображение загружается в поле Bitmap выбранного окна из буфера
Form_Picture[Current_Form].Image_Pic.Picture.Bitmap:=BMP;

-изменяем заголовок формы на имя загруженного файла:

//изменяем заголовок окна
Form_Picture[Current_Form].Caption:=OpenPictureDialog_Main.FileName;

-уничтожаем буфер изображения:

BMP.Destroy;

Блок-схема алгоритма загрузки изображения приведена на рис.4.

Рисунок 4 - Блок-схема алгоритма работы процедуры загрузки изображения

3.4 Подстройка размеров формы
Рассмотрим процедуру подстройки размеров формы редактирования AjustFormWH, созданную в модуле Unit_main. Она имеет три входных параметра: p_form типа TForm_Pic, содержащий форму редактирования, размеры которой надо подстроить; p_w типа integer содержит ширину изображения; p_h типа integer содержит высоту изображения.
Алгоритм работы процедуры подстройки размеров изображения следующий:
1) для того, чтобы подстроить размер формы, рассчитываем его, учитывая ширину и высоту загружаемого рисунка, а также высоту панели статуса:

w:=p_w;
h:=p_h+ p_form.StatusBar_Pic.Height;

2) устанавливаем размеры формы: минимальное значение ширины - 300, максимальное - 900; минимальное значение высоты - 200+высота панели статуса, максимальное - 900+высота панели статуса:

//изменяем значение высоты и ширины окна
if(p_w<=300)then w:=300;
if(p_h<=200) then h:=200+p_form.StatusBar_Pic.Height;
if(p_w>=900)then w:=900;
if(p_h>=900) then h:=900;

3) устанавливаем выравнивание компонента Image_pic на форме Form_picture в зависимости от ширины и высоты изображения:

if(p_w>=300) and (p_h>=200)and (p_w<=900)and (p_h<=900) then
p_form.Image_Pic.Align:=alClient
else p_form.Image_Pic.Align:=alTop;

4) устанавливаем новые значения высоты и ширины формы редактирования:

p_form.ClientWidth:=w;
p_form.ClientHeight:=h;

Блок-схема алгоритма загрузки подстройки размеров приведена на рис.5.


Рисунок 6 - Блок-схема алгоритма работы процедуры сохранения изображения

3.5 Сохранение изображения
Для сохранения изображения в модуле Unit_main создана процедура-обработчик нажатия на пункт меню N4 («Сохранить картинку») формы Form_main - TForm_main.N4Click.
Алгоритм работы процедуры сохранения изображения следующий:
1) если диалог сохранения выполнен:

//если выполнен диалог сохранения...
if SavePictureDialog_main.Execute then

-сохраняем изображение с текущей формы редактирования в файл, указанный в диалоге сохранения:

Form_picture[Current_Form].Image_Pic.Picture.Bitmap.SaveToFile(SavePictureDialog_main.FileName);

-меняем заголовок текущей формы на имя файла:

Form_picture[Current_Form].Caption:=SavePictureDialog_main.FileName;

Блок-схема алгоритма сохранения изображения в файл приведена на рис.6.

Рисунок 6 - Блок-схема алгоритма работы процедуры сохранения изображения


3.6 Поддержка буфера обмена
Буфер обмена Copy_buffer инициализируется при создании формы Form_picture:

// инициализация буфера копирования
Copy_Buffer:=TBitmap.Create;

Чтобы использовать буфер обмена, необходимо выделить часть изображения с помощью инструмента «Выделение». Рисование выделяющей рамки производится в процедуре-обработчике движения мыши на компоненте Image_pic формы Form_picture - TForm_pic. Image_picMouseMove (подробно эта процедура будет рассмотрена в пункте 3.9).
Для копирования выделенного участка в модуле Unit_pic создана процедура-обработчик нажатия на пункт N2 («Копировать») контекстного меню формы Form_picture - TForm_pic.N2Click.
Алгоритм работы процедуры копирования изображения следующий:
1) для определения, есть ли на данной форме выделение, проверяем флаг выделения (Selected):

if Selected=1 then begin

Если выделение есть:
-для того, чтобы убрать выделение опускаем флаг выделения Selected:

// снимаем выделение
Selected:=0;

-изменяем размер буфера копирования под выделенный участок:

// изменяем размер буфера
Copy_Buffer.Width:= XS-XBegin+1;
Copy_Buffer.Height:=YS-YBegin+1;

-выделенный участок копируем в буфер:

// копирум выделенный кусок в буфер
Copy_Buffer.Canvas.CopyRect(Rect(0,0,XS-XBegin,YS-YBegin),
Image_pic.Canvas,
Rect(XBegin,YBegin,XS,YS));
Иначе (ничего не выделено), выводим сообщение об ошибке:

else
showmessage(Сначало надо создать выделение);

Блок-схема алгоритма копирования выделенного участка изображения в буфер приведена на рис.7.



Рисунок 7 - Блок-схема алгоритма работы процедуры копирования выделенного участка изображения в буфер обмена

Для вставки содержимого буфера обмена на форму в модуле Unit_pic создана процедура-обработчик нажатия на пункт N3 («Вставить») контекстного меню формы Form_picture - TForm_pic.N3Click. Копируем выделенный кусок из буфера в точку вызова контекстного меню.

Image_pic.Canvas.CopyRect( Rect(XCM,YCM,XCM+XS-XBegin,
YCM+YS-YBegin),
Copy_Buffer.Canvas,
Rect(0,0,XS-XBegin,YS-YBegin) );




Рисунок 8 - Блок-схема алгоритма работы процедуры вставки содержимого буфера обмена на форму
3.7 Поддержка буфера отката
Имеется индивидуальный буфер отката Undo_buffer для каждой формы редактирования, который инициализируется при создании этой формы:

Undo_Buffer[Tag]:= TBitmap.Create;//инициализация буфера отката;

Перед совершением над текущим изображением какой-либо операции редактирования происходит перезапись буфера отката по следующему алгоритму:
1) измененяем размеры буфера отката под текущее изображение:

// изменить размер буфера отката
Undo_Buffer[tag].Width :=Image_pic.Picture.Bitmap.Width;
Undo_Buffer[tag].Height:=Image_pic.Picture.Bitmap.Height;

2) копируем текущее изображения в буфер отката:

// Перезаписать буфер отката
Undo_Buffer[tag].Canvas.CopyRect(Rect(0,0,Undo_Buffer[tag].Width,
Undo_Buffer[tag].Height),
Image_pic.Canvas,
Rect(0,0,Undo_Buffer[tag].Width,
Undo_Buffer[tag].Height));
Блок-схема алгоритма перезаписи буфера отката приведена на рис.9.


Рисунок 9 - Блок-схема алгоритма перезаписи буфера отката

Для отмены последнего действия в модуле Unit_pic создана процедура-обработчик нажатия на пункт N_back («Откатить») контекстного меню формы Form_picture - TForm_pic.N5Click.

Image_pic.Canvas.Draw(0,0,Undo_Buffer[tag]);
Блок-схема алгоритма отмены последнего действия редактирования приведена на рис.10.
Рисунок 10 - Блок-схема алгоритма работы процедуры отката последней операции редактирования

3.8 Изменение размеров изображения
Для возможности изменения размеров изображения создан отдельный модуль Unit_size c формой Form_size, на которой можно ввести требуемые ширину и высоту. Имеется возможность сохранения пропорций и масштабирования.
Для изменения размеров изображения в модуле Unit_size создана процедура-обработчик нажатия на кнопку BitBtn1 («ОК») формы Form_size - TForm_size. BitBtn1Click.
Алгоритм работы процедуры изменения размеров следующий:

1) создаем буфер, используемый для изменения размеров:

// создаём буфер
BMP:=TBitmap.Create;

2) считываем значения ширины и высоты изображения в переменные w и h соответственно:

// считываем ширину и высоту
w:=StrToInt(Edit_wid........



Перейти к полному тексту работы


Скачать работу с онлайн повышением уникальности до 90% по antiplagiat.ru, etxt.ru или advego.ru


Смотреть похожие работы

* Примечание. Уникальность работы указана на дату публикации, текущее значение может отличаться от указанного.