Вход

ISO - Графический редактор на Delphi 5

Реферат* по информатике и информационным технологиям
Дата добавления: 19 сентября 2007
Язык реферата: Русский
Word, rtf, 2.1 Мб
Реферат можно скачать бесплатно
Скачать
Данная работа не подходит - план Б:
Создаете заказ
Выбираете исполнителя
Готовый результат
Исполнители предлагают свои условия
Автор работает
Заказать
Не подходит данная работа?
Вы можете заказать написание любой учебной работы на любую тему.
Заказать новую работу
* Данная работа не является научным трудом, не является выпускной квалификационной работой и представляет собой результат обработки, структурирования и форматирования собранной информации, предназначенной для использования в качестве источника материала при самостоятельной подготовки учебных работ.
Очень похожие работы




Городская гимназия

РЕФЕРАТ ПО ИНФОРМАТИКЕ НА ТЕМУ

«ISO - Графический редактор на Delphi 5»

Исполнитель: Федоровских Николай Павлович

ученик 11 «Б» класса

Руководитель: Чунтонова Ирина Юрьевна

преподаватель информатики

Новоуральск 2002 г.



Оглавление.

Введение…………………………………………………………… 3

Пользовательский интерфейс……………………………………... 4

Возможности программы

Инструменты……………………………………………………. 6

Эффекты…………………………………………………………. 7

Другие возможности………………………………………….…. 9

Аналоги……………………………………………………………… 9

Среда программирования…………………………………………. 10

Структура программы……………………………………………... 10

Принципы графических алгоритмов …………………………….. 13

Системные требования ……………………………………………. 15

Заключение…………………………………………………………. 16

Список используемой литературы ……………………………….. 17



Введение.

На сегодняшний день компьютерная графика неотъемлемая часть жизни современного общества. Рекламные щиты, цветные журналы, спецэффекты в фильмах – всё это в той или иной мере имеет отношение к компьютерной графике. Либо это обработанные фотографии, либо от начала до конца созданные на компьютере изображения.

Графический редактор – это компьютерная программа, предназначенная для обработки графики (фотографий, рисунков) или создания таковой, то есть для рисования. Существуют растровые и векторные графические редакторы. Растровые редакторы предназначены для работы с растровыми (точечными) изображениями. Растры – это некая таблица, каждая клетка которой имеет свой цвет. Векторные редакторы предназначены для работы с векторными изображениями. Векторный рисунок – это рисунок, состоящий из отдельных объектов с заданными свойствами (позиция, вид и т. п.).

Iso относится к растровым редакторам. Программа предоставляет пользователю различные инструменты для создания и редактирования растровых изображений.

Изначально, программа задумывалась как детский графический редак­тор, то есть для использования исключительно детьми. Отсюда и название 'ИЗО': Изобразительное искусство. Целью было создать интересную детям программу. По мере написания программы появлялось всё больше и больше разных эффектов (вращение, отражение, контрастность и т. д.), которые вряд ли будут интересны детям, но полезны при работе с фотографиями. В резуль­тате цель создания программы стала звучать так: 'Создать небольшой графи­ческий редактор, который заменит стандартный Paintbrush Windows: будет превосходить его в возможностях, не уступая в простоте и эффективности'.

Приложение рассчитано как на опытных пользователей, так и на нович­ков, как на детей, так и на взрослых: каждый найдёт здесь что-то для себя ин­тересное в соответствии со своими потребностями.



Пользовательский интерфейс.

Внешний вид программы предельно прост и понятен на интуитивном уровне. Все кнопки главного окна обладают так называемым домашним сти­лем (Flat style). То есть, при наведении курсора на кнопку она изменяет свой вид, что делает такую кнопку гораздо удобнее обычной. Вдобавок к этому, при наведении курсора на кнопку (или некоторый пункт меню) в первой па­нели строки состояния отображается название данного элемента управления.

Строка состояния расположена в нижней части окна. Она предназначена для отображения различной информации, которая может помочь пользова­телю. Например, при рисовании линии в ней показывается угол наклона, а при определении цвета с помощью пипетки в строке состояния показываются составляющие цвета под курсором: “RGB(255 255 255) – clWhite” (цвет рас­кладывается на RGB составляющие, то есть на красный(Red) зелёный(Green) и синий(Blue)).

Под главным меню расположена панель параметров рисования:

0100090000035400000001001c00000000000400000003010800050000000b0200000000050000000c0227014e06040000002e0118000400000002010100050000000902000000021c000000fb02ceff0000000000009001000000000440001254696d6573204e657720526f6d616e0000000000000000000000000000000000040000002d0100000d000000320a2d00000001000400000000004d062601204b1600030000000000

При наведении курсора на любую из кнопок этой панели справа от кнопки появляется треугольник. После нажатия на него появляется панель с кнопками для выбора разных свойств. Если же просто нажать на саму кнопку, то свойство будет установлено в значение по умолчанию.

В правой стороне окна находится панель инструментов. Всего имеется 17 инструментов для рисования или работы с рисунком. В левой части окна расположена панель симметрии, на которой находятся кнопки задания раз­ного стиля рисования для карандаша и кисти.

В центре главного окна находится рабочая область. В левом верхнем углу рабочей области – сам рисунок или чистый лист. По краям рисунка (или выделенной области) расположено восемь маркеров для быстрого управле­ния рисунком при помощи мыши. Левый верхний маркер предназначен для вращения рисунка; центральный верхний – для горизонтального наклона; центральный левый – для вертикального наклона; остальные для изменения размеров рисунка.

Вид окна можно настроить: скрыть или показать любую из панелей главного окна (пункт меню ‘Вид ? …’), изменить цвет рабочей области или рисунка при запуске, отображать значок программы в виде кнопки или пик­тограммы в панели задач Windows и др. (пункт меню ‘Вид ? Параметры…’).

Все диалоговые окна, где требуется изменение числовых параметров (кроме окна задания пользовательской матрицы), снабжены бегунком (track bar) для изменения этих параметров, так что при работе с программой кла­виатура почти не нужна. Так же в диалоговых окнах работы с рисунком име­ется кнопка 'Применить', то есть можно посмотреть результат действия эф­фекта, не закрывая окна.

После закрытия главного окна программы создаётся файл (если это был первый запуск приложения на данном компьютере или этот файл был уда­лён) 'Fe_Iso.ini' в папке Windows. Это файл инициализации, в который запи­сывается различная информация о программе: размеры окна, цвет рабочей области и т. д. При очередном запуске окно программы предстаёт перед пользователем таким, каким оно было закрыто в последний раз.



Возможности программы.

Инструменты.

Основное предназначение программы – это создание рисунков. Для этого предназначены тринадцать инструментов, с помощью которых непо­средственно можно рисовать фигуры:

  1. 'Карандаш' (pencil) рисует ломаные толщиной в один пиксель (точку).

  2. 'Кисть' (brush) предназначена для рисования линий разного стиля.

  3. 'Прямая линия' (line) (название говорит само за себя). Тип и толщину линии можно менять с помощью соответствующих кнопок в панели параметров рисования (также эти параметры действуют при по­строении других фигур).

  4. 'Кривая линия' (curve line) строит кривые Безье по четырём точкам. Сначала нужно расставить четыре опорные точки, а затем, передви­гая их в области рисунка, можно добиться желаемого результата.

  5. 'Прямоугольник' (rectangle).

  6. 'Многоугольник' (polygon) строится по нескольким точкам, соединён­ным прямыми линиями. Для завершения рисования этой фигуры можно кликнуть (щёлкнуть мышью) в исходную точку, вы­полнить двойной щелчок по рисунку или просто выбрать другой ин­струмент.

  7. 'Эллипс' (ellipse) вписывается в прямоугольную область.

  8. 'Скругленный прямоугольник' (round rectangle) – прямоугольник с со­пряженными углами.

  9. 'Распылитель' (sprayer) использует четыре стиля, которые можно ме­нять с помощью специальной кнопки на панели параметров рисова­ния.

  10. 'Заливка цветом' (flood fill) заливает один цвет до встречи с другим цветом.

  11. 'Текст' (text). После щелчка мышью по рисунку появляется окно для ввода теста. Левый верхний угол текста находится в месте щелчка.

  12. 'Спираль' (spiral) рисуется по радиусу заданному линией (это единст­венная фигура, которая прорисовывается только после отпус­кания кнопки мыши). При выборе данного инструмента появляется панель для изменения числа витков спирали.

  13. 'Звезда' (star) образована делением двух ок­ружностей (внутренней и внешней) на части. При выборе этого инструмента показы­вается панель для изменения свойств: можно изменить процентное отношение внутреннего и внешнего радиуса, изменять количество концов или вписать звезду в круг.

Остальные инструменты являются вспомогательными:

  1. 'Прямоугольное выделение' – выделение прямоугольной области ри­сунка для последующей работы с ней (создание эффектов, переме­щение, копирование, удаление и так далее).

  2. 'Эллиптическое выделение' – выделение эллиптической области ри­сунка.

  3. 'Произвольное выделение' области рисунка.

  4. 'Пипетка' (color picker) – инструмент для определения цвета какого-либо пикселя рисунка для использования этого цвета.

Всеми инструментами можно пользоваться, используя левую или пра­вую кнопку мыши (обе одновременно использовать нельзя). При рисовании с помощью левой кнопки мыши основной цвет используется как цвет границы фигуры или как цвет рисования (кисть, карандаш, линия и т. п.), а дополни­тельный как цвет заливки (прямоугольник, звезда и т. п.). При использовании правой кнопки – цвета используются наоборот (основной как дополнитель­ный, а дополнительный как основной). Средняя кнопка мыши, если она есть, не используется.

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

Тип симметрии используется при рисовании с помощью кисти или ка­рандаша. При использовании какого-либо типа 'невидимым' карандашом или кистью рисуется тем же цветом и стилем симметричная линия (одна или три в зависимости от типа симметрии).

Хотелось бы отдельно отметить инструмент 'звезда', так как, умело из­меняя его свойства, можно превратить его в мощного помощника. Если внут­ренний радиус сделать 100% от внешнего, то можно рисовать различные правильные многоугольники, в зависимости от установленного числа концов звезды. А если внутренний радиус будет менее 100%, то рисуются невыпук­лые многоугольники с равными сторонами, и чем больше концов у звезды, тем больше фигура походит на солнышко. При внутреннем радиусе равным 0% рисуется окружность (если стоит опция 'вписать звезду в круг') поделён­ная на сектора.

Эффекты.

Графический эффект (graphic effect) – это определённое преобразование изображения. Либо это цветовое преобразование, либо деформация (переме­щение пикселей), либо то и другое одновременно. В программе эффекты применяются для всего рисунка или для выделенной области (если таковая имеется). Работу эффекта трудно передать словами, поэтому ниже приво­дится список эффектов без их описания. Названия говорят сами за себя.

  1. Зеркальное отражение по горизонтали и по вертикали.

  2. Поворот на 90°, 180°, 270° или на другой произвольный угол.

  3. Растяжение.

  4. Наклон по горизонтали и вертикали.

  5. Блоки.

  6. Линза.

  7. Сжатие.

  8. Разброс (иней).

  9. Завихрение.

  10. Пикселизация (мозаика).

  11. Волны синусоидальные или трёхмерные (вид сверху).

  12. Рыбий глаз.

  13. Плазма.

  14. Подсвеченный рельеф (источник света).

  15. Тень (в разные стороны).

  16. Morph фильтр (минимум, максимум, открытый, закрытый).

  17. Негатив (инверсия).

  18. Порог (черно-белый).

  19. Шум.

  20. Край (между основным и дополнительным цветом).

  21. Рельеф.

  22. Смягчение.

  23. Авто-смягчение.

  24. Смягчение.

  25. Смазывание.

  26. Резкость (чёткость).

  27. Фильтр пользователя (матрица 5x5).

  28. Замена на оттенки серого или другого цвета.

  29. Замена составляющих цвета.

  30. Замена основного на дополнительный цвет.

  31. Фильтр HSL (оттенок, насыщенность, яркость).

  32. Гамма.

  33. Баланс составляющих цвета (RGB).

  34. Яркость.

  35. Соляризация.

  36. Пастеризация.

  37. Усилить или ослабить контрастность.

  38. Общий и местный контраст.

Фильтр пользователя – это изменение каждого цвета по определённой матрице. Пользователь может сам задать свою матрицу, а может выбрать из предложенного списка:

  1. Край.

  2. Рельеф.

  3. Смягчение.

  4. Резкость.

  5. Наклонное смазывание.

  6. Радужный край.

  7. Подтёкшие грани.

  8. Скошенные грани.

  9. Ветер.

  10. Старый телевизор.

  11. Сломанный телевизор.

  12. Духи.

  13. Полосы (русский сломанный телевизор).


Другие возможности.

Помимо всего прочего, в программе существует возможность подсчета всех цветов, просмотра, очистки и изменения размеров рисунка. Можно: от­менять последние действия или повторять отменённые; копировать, выре­зать, удалять или сохранять в файле выделенную область рисунка; вставлять рисунок из файла или буфера обмена.

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

  • точечный рисунок (*.bmp);

  • Windows Metafile (*.wmf; *.emf);

  • JPEG (*.jpg; *.jpeg).

Сохранять рисунок можно в форматах BMP (24 bit) и JPEG.

Аналоги.

Аналогичные программы естественно существуют: CorelDraw (Photo-Paint), Photoshop, Corel Painter, Gimp, Jasc Paint Shop Pro и т. д. Все они имеют неплохие средства создания рисунков и множество эффектов. Но, на­ряду с этим, они имеют большой размер (CorelDraw занимает около 300 МБ; Photoshop более 100 МБ), требуют установки и, в конце концов, стоят нема­лых денег (за некоторым исключением, вроде Gimp). Так же для работы с этими приложениями необходимы определённые знания и умения, что делает их почти бесполезными в руках неопытных пользователей.

XnView – бесплатная небольшая программа (в дистрибутиве 1,23 МБ) для просмотра (и редактирования) файлов различных форматов. Для редак­тирования изображений она предоставляет пользователю множество эффек­тов, многие из которых идентичны эффектам программы Iso. Но, в отличие от Iso, XnView не располагает инструментами для создания рисунков. Iso не требует установки и находится в одном файле Iso.exe.

Paintbrush – стандартный графический редактор, входящий в пакеты операционных систем семейства Windows. Paintbrush один из самых простых и надежных редакторов. Эту программу изучают в школе. Но в то же время Paintbrush популярен в основном у пользователей дошкольного и школьного возраста из-за своей простоты и ограниченности в возможностях.

Iso является 'потомком' Paint, т. к. очень похож на него и внешним ви­дом, и некоторыми возможностями, и названиями пунктов меню. Редактор Iso обладает множеством полезных возможностей, которых нет в Paint, со­храняя малый размер (около 630 КБ), быстроту и простоту в использовании. Но, вместе с тем, Iso кое в чём уступает Paint: нет возможности печати, нет файла справки, меньшая надёжность (могут возникнуть ошибки), отсутствие сетки при масштабировании и т. п.



Среда программирования.

Программа Iso написана в среде программирования Delphi 5 Enterprise компании Borland, на языке Object Pascal. Object Pascal – это объективно-ориентированный язык программирования, который и является основой Delphi. Он относится к языкам высокого уровня. Его родоначальник – язык Pascal.

Delphi – это визуальная среда программирования (Rapid Application Development – RAD), которая включает в себя помимо компилятора ещё и редактор, и средства отладки, и большие наборы готовых программ (так на­зываемые библиотеки), например наборы математических функций. RAD-системы позволяют также быстро строить прототипы будущих программ: проектировать форму окон, размещать в них всевозможные элементы управ­ления (кнопки, списки, переключатели).

С помощью Delphi 5 можно разработать приложение для Windows прак­тически неограниченной сложности. Такая разработка несколько напоминает складывания программ из кубиков: в Delphi 5 имеется около двух сотен гото­вых компонентов, которые размещаются в будущем окне одним щелчком мыши. Это значительно облегчает жизнь программистам: не нужно тратить много времени на создания интерфейса программы, а уделить внимание главному – функционированию. Но за такое удобство приходится платить: минимальные размер программы созданной с помощью RAD составляет около 286 КБ, а без использования визуального программирования – »17 КБ. На сегодняшний день работа в Delphi является самым продуктивным мето­дом создания приложений для Windows.

Структура программы.

Весь исходный текст программы очень большой (»10000 строк), поэтому он размещён в разных файлах, каждый из которых играет определённую роль в построении приложения. Основой всей программы является главное окно программы (класс TMainForm; файл MainFrm.pas). На нем расположены все панели инструментов, строка состояния, меню и сама область рисования, расположенная в рабочей области прокрутки. Некоторые элементы управления – это стандартные компоненты Delphi (TMainMenu, TScrollBox, TScrollBar и т. д.), другие же – это переделанные компоненты (TFeSpeedButton, TFePanel, TFeStatusBar) с целью уменьшить размер исполняемого файла, третьи – это специальные компоненты (TFePaint, TFePropsButton, TColorPickerButton), созданные на основе базовых классов Delphi.

Ядром программы, отвечающим за создание и преобразование рисунков, является класс (компонент) TFePaint. Именно этот класс обрабатывает все действия мыши в области рисования, именно он организует взаимодействие пользователя и программы, связанные с рисованием и созданием эффектов. TFePaint является дочерним классом от TCustomControl, так как является владельцем для других классов (TFeImage, TSelectImage, TPut). Он имеет свойство DrawMethod типа TDrawMethod, которое указывает на инструмент, выбранный пользователем (dmPen, dmLine, dmEllipse, dmRectSelect). Изменение значения этого свойства происходит следующим образом: при запуске программы свойству Tag(этикетка) каждой кнопке на панели инструментов присваивается определённое значение:

PenBtn.Tag := Integer (dmPen);

LineBtn.Tag := Integer (dmLine);

При нажатии на кнопку вызывается обработчик события общий для всех кнопок на данной панели:

procedure TMainForm.SpeedBtnClick(Sender: TObject);

begin

MainRis.DrawMethod := TDrawMethod(TFeSpeedButton(Sender).Tag);

end;

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

procedure TMainForm.MenuClick(Sender: TObject);

begin

MainRis.Doing(TDrawAction(TMenuItem(Sender).Tag));

end;

procedure TFePaint.Doing(const Action: TDrawAction);

var Fon, AGrid: Boolean;

UCount: Byte;

Size: TPoint;

Bmp: TBitmap;

begin

if not GetCan(Action) then Exit;

Ended;

case Action of

daClear: begin

CanChangeImage;

ClearImage;

ChangedImage;

end;

daCopyToFile: Save(True, False);

end;

end;

Нестандартный способ решения задачи применён и к алгоритму отмены и повтора действий пользователя. Создан специальный класс TBmpMemory, который хранит изображения в памяти. После каждого действия, будь то рисование прямоугольника или увеличение контрастности, изображение сохраняется в отдельной ячейке (Cell) динамического массива, длина которого равна числу возможных отмен + 1. Данный массив представляет собой двусвязный список. Тип каждой ячейки определён следующим образом:

PBitmapCell = ^TBitmapCell;

TBitmapCell = record

NextCell: PBitmapCell; // указатель на следующую ячейку

PrevCell: PBitmapCell; // указатель на предыдущую ячейку

Bitmap: TBitmap;

end;

Таким образом, каждый элемент списка имеет указатель на предыдущий и на следующий элемент. Указатель PrevCell первой ячейки указывает на последнюю, а указатель NextCell последней ячейки указывает на первую ячейку. Получается замкнутое кольцо без входа и выхода. Это сделано по той причине, что после отмены действия, для восстановления требуется то изображение, которое было отменено. Например: пользователь нарисовал круг, а затем линию. В первой ячейке записано изображение, которое было до рисования круга, во второй – после рисования круга, а в третьей – после рисования линии. После отмены последнего действия указатель перемещается на предыдущую ячейку (ячейка с кругом, но без линии):

procedure TBmpMemory.Undo(Bitmap: TBitmap);

begin

if CanUndo then begin

Dec(FNumUndo); //уменьшаем число возможных отмен

Bitmap.Assign(FActiveCell^.Bitmap); //передаём изображение с активной ячейки

FActiveCell := FActiveCell^.PrevCell;//переносим указатель на предыдущую ячейку

end;

end;

Если же пользователь передумал и решил вернуть нарисованное, то он может вызвать повтор последнего отменённого действия (если после отмены ничего не было сделано):

procedure TBmpMemory.Redo(Bitmap: TBitmap);

begin

if CanRedo then begin

Inc(FNumUndo); //увеличиваем число возможных отмен

FActiveCell := FActiveCell^.NextCell; //переносим указатель на следующую ячейку

Bitmap.Assign(FActiveCell^.NextCell^.Bitmap); //передаём изображение

//со следующей после активной ячейки, т. к. активная ячейка та,

//которая должна быть отменена

end;

end;

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

Принципы графических алгоритмов.

Поскольку программа является растровым (точечным) редактором, то изображение находится в виде объекта графического класса TBitmap и работа всех эффектов основана на работе с этим классом. TBitmap содержит двумерный массив, в каждой ячейке которого записан определённый цвет. То есть мы имеем дело с двумерной (плоскостной) системой координат: каждая точка рисунка описывается двумя координатами, например (45, 87).

Доступ к определённой точке можно получить двумя способами: через свойство Canvas.Pixels[x, y] (x и y – координаты точки), которое имеет тип TColor, или с помощью свойства ScanLine[y], которое возвращает указатель на начало строки под номером 'y'. Первый способ работает гораздо медленнее второго, поэтому он почти не используется, хотя и более удобен.

Каждый цвет (в компьютерном представлении) состоит из трёх оттенков: красного (red), зелёного (green) и синего (blue) – RGB. При этом каждый из оттенков может принимать значения от 0 до 255, то есть, всего компьютер (монитор) может отображать 256*256*256=16777216 разных цветов.

Все функции и процедуры, имеющие отношение к созданию эффектов, находятся в файле FeProcs.pas, который занимает »69 КБ, так как этих функций очень много.

Рассмотрим пример реализации эффекта 'Негатив':

type

TRGB = record

B, G, R: Byte;

end;

pRGB = ^TRGB;

procedure InvertBitmap(Bitmap: TBitmap);

var x, y: Integer;

Dest: pRGB;

begin

for y := 0 to Bitmap.Height - 1 do begin

Dest := Bitmap.ScanLine[y]; //помещаем указатель в начало строки y

for x := 0 to Bitmap.Width - 1 do begin

with Dest^ do begin

R := 255 - R; //чтобы обратить цвет,

G := 255 - G; //нужно обратить на противоположные

B := 255 - B; //его составляющие

end;

Inc(Dest); //перемещаем указатель вправо

end;

end;

end;

Цикл начинается с 0 и заканчивается на Bitmap.Height – 1 (Bitmap.Width – 1), так как в системе координат Windows отсчёт начинается с точки (0, 0), а точки (Width – ширина, Height – высота) не существует. Внешний цикл проходит по порядку все строки (координата Y), потомучто свойство Bitmap ScanLine передаёт указатель на строку, а не на столбец.

Интересной (с точки зрения программирования) является функция подсчёта цветов рисунка:

function HowManyColors(Bitmap: TBitmap): Integer;

var i: Byte;

x, y: Integer;

Dest: pRGB;

RGBArray: array [Byte, Byte] of array of Byte;

begin

Result := 0;

for y := 0 to Bitmap.Height - 1 do begin

Dest := Bitmap.ScanLine[y];

for x := 0 to Bitmap.Width - 1 do begin

with Dest^ do

if RGBArray[r, g] <> nil then

for i := 0 to High(RGBArray[r, g]) do begin

if RGBArray[r, g] [i] = b then Break; //такой цвет уже есть – выход из цикла

if i = High(RGBArray[r, g]) then begin //если это последний 'круг' цикла, то

//такого цвета нет и его нужно записать

Inc(Result); //прибавляем еще один цвет

SetLength(RGBArray[r, g], Length(RGBArray[r, g]) + 1);

RGBArray[r, g] [High(RGBArray[r, g])] := b;

end;

end

else begin

Inc(Result); //прибавляем еще один цвет

SetLength(RGBArray[r, g], 1);

RGBArray[r, g] [0] := b;

end;

Inc(Dest);

end;

end;

end;

Изначально, для решения задачи подсчёта цветов применялся следующий алгоритм: использовалась глобальная переменная, которая являлась трёхмерным массивом - «ColorsArray: array [0..255, 0..255, 0..255] of Boolean», то есть имел для каждого существующего цвета отдельную ячейку типа Boolean – всего 16777216 ячеек; в начале функции значения всех ячеек устанавливались в False (ложный), это означало, что нет ни одного цвета; затем цвет каждой точки разлагался на составляющие R, G и B, и проверялось значение соответствующей ячейки - «ColorsArray[R, G, B]», если оно было ложным, то изменялось на True (истинный), а количество цветов рисунка увеличивалось на один. Но, естественно, такой подход крайне иррационален, так как компилятор не позволяет выделять так много памяти внутри процедуры, а выделение 16 Мбайт памяти при загрузке тормозит не только саму программу, но и другие процессы системы. По этой причине пришлось отказаться от такого решения и разработать новый алгоритм, что и было сделано. Функция, реализующая новый подход изложена выше, а сам он заключается в динамическом выделении памяти. Переменная RGBArray – это двумерный массив, каждая ячейка которого, в свою очередь, является динамическим массивом типа Byte (0..255). Фактически изначально вообще не выделяется памяти, она выделяется по мере увеличения числа цветов.

Системные требования.

Микропроцессор – Pentium 100 и выше.
Оперативная память – 16 Mb RAM.
Операционная система – Windows 9x/Me.
Свободное место на диске – 1 Mb.
Аппаратное обеспечение – мышь.


Заключение.

По мере написания программы возникали всё новые задачи и проблемы, которые было бы невозможно или нецелесообразно решать обычными методами, поэтому приходилось изобретать или где-то заимствовать нестандартные алгоритмы решения задач, коих в программе довольно много. Это помогло сохранить небольшой размер и высокую производительность программы при её широких возможностях, что делает её весьма привлекательной для пользователей как опытных, так и не очень.

Умелое сочетание применения инструментов рисования и эффектов можно создавать поистине великолепные вещи. Мне было сделано много положительных отзывов, как со стороны младших сестёр, так и со стороны друзей. У программы видны явные преимущества перед Paintbrush и некоторыми другими коммерческими редакторами. Думаю, что мою программу было бы гораздо интереснее изучать ученикам на уроках информатики, нежели Paintbrush. Возможно, что в будущем удастся создать более совершенную версию Iso.



Список используемой литературы.

  1. Стив Тейксейра и Ксавье Пачеко. Delphi 5 Руководство разработчика Том 1, 2. Издательский дом “Вильямс”, 2001.

  2. В. Гофман, А. Хомоненко. Delphi 5. БХВ-Петербург, 2001.

  3. Род Стивенс. Delphi Готовые алгоритмы. М., ДМК Пресс, 2001.


© Рефератбанк, 2002 - 2024