Графические объекты

МИНИСТЕРСТВО ОБРАЗОВАНИЯ  РОССИЙСКОЙ ФЕДЕРАЦИИ

 

РЯЗАНСКИЙ ГОСУДАРСТВЕННЫЙ РАДИОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

 

КАФЕДРА ВЫЧИСЛИТЕЛЬНОЙ И  ПРИКЛАДНОЙ МАТЕМАТИКИ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Пояснительная записка

к курсовому  проекту

по дисциплине

«Высокоуровневые  методы информатики и программирования»

на тему:

«ГРАФИЧЕСКИЕ ОБЪЕКТЫ»

 

 

 

Выполнила студентка  группы: 944

Костикова О.М.

Проверил  доцент кафедры ВПМ

Лаврентьев  С.И.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рязань 2011

СОДЕРЖАНИЕ

Задание …………………………………………………………..……3

Введение……………………………………………………………….4

Разработка структуры классов………………………………..5

  Реализация классов в программе ………………………….….8

Работа  программы…………………………………………..….15 
Приложение(Основная программа)…………………………...18  
Системные требования................................................................23

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

Список  литературы…………………………………………………....25

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Задание

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Введение

Без компьютерной графики невозможно представить себе не только компьютерный, но и обычный, вполне материальный мир. На сегодняшний день компьютеры и компьютерная графика неотъемлемая часть жизни современного общества. Для примера назовём медицину (компьютерная томография), научные исследования (визуализация строения вещества, векторных полей и других данных), моделирование тканей и одежды, опытно-конструкторские разработки, рекламные щиты, цветные журналы, спецэффекты в фильмах - всё это в той или иной мере имеет отношение к компьютерной графике. Поэтому созданы программы для создания и редактирования изображений, то есть графические редакторы. Целью моего курсового проекта является создание  одного из представителей простейших графических редакторов. Интерфейс программы схож с стандартным Paint . Имеется подробная справка о каждой функции программы. Редактор был реализован на языке  С++, являющегося одним из самых популярных языков программирования, по средствам приложения Borland C++ Builder 2006.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Разработка  структуры классов

В данном проекте необходимо разработать  иерархию классов объектов и методов  редактора.

Для линий:

  • Канва для рисования
  • Цвет линии
  • Толщина линии
  • Координаты

Для фигур без заливки цветом:

  • Область рисования
  • Канва для рисования
  • Цвет линии
  • Координаты

Для фигур с заливкой:

  • Область рисования
  • Канва для рисования
  • Цвет линии
  • Цвет заливки
  • Стиль заливки
  • Координаты

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

  • Координаты
  • Цвет линии
  • Канва для рисования

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

На основе вышеперечисленных требований нам  была разработана следующая система классов:

  • Базовая фигура
    • Прямоугольник;
    • Эллипс;
    • Карандаш;
    • Линия;
    • Эллипс со смешением цветов;
    • Прямоугольник со смешением цветов»;
    • Заливка;
    • Ластик.

Базовый класс class GObject  состоит методов, присущих каждой фигуре. В нем реализованы следующие методы: прорисовка в заданном месте канвы, действия после прорисовки, координаты. Далее представлена структура классов (смешение цветов прямоугольника аналогично смешению цветов эллипса):

 

Структура классов



 

 
Реализация классов в  программе

MoveTo-определяет текущую позицию пера.

LineTo-рисует прямую до заданной точки.

Pen -отвечает за выведение обводок и линий, а Brush за заливку.

Draw-рисует битовый образ, пиктограмму, метафайл в заданном месте канвы.

Style -определяет вид линии.

pmNotXor -сложение с фоном по инверсному исключающему ИЛИ(используется при сложении цветов).

 

 

class GObject

{  public:

        virtual void Draw(TPaintBox *PaintBox, Graphics::TBitmap *BitMap, int X, int Y) = 0;

        virtual void End(TPaintBox *PaintBox, Graphics::TBitmap *BitMap, int X,int Y) = 0;

        virtual void Down(TPaintBox *PaintBox, int X,int Y) = 0;

 

};

 

GLine-рисует прямую линию.

 

class GLine : public GObject

{  public:

   GLine(int X,int Y): x0(X), y0(Y), x1(X), y1(Y) {};

 

   void Draw(TPaintBox *PaintBox, Graphics::TBitmap *BitMap, int X,int Y)

   {

      PaintBox->Canvas->Pen->Mode = pmNotXor;

 

      PaintBox->Canvas->MoveTo(x0,y0);

      PaintBox->Canvas->LineTo(x1,y1);

 

      PaintBox->Canvas->MoveTo(x0,y0);

      PaintBox->Canvas->LineTo(X,Y);

      x1 = X;

      y1 = Y;

   }

 

   void End(TPaintBox *PaintBox, Graphics::TBitmap *BitMap, int X,int Y)

   {

// Mode = pmCopy - линии проводятся цветом, заданным в свойстве Color.

      PaintBox->Canvas->Pen->Mode = pmCopy;

      PaintBox->Canvas->MoveTo(x0,y0);

      PaintBox->Canvas->LineTo(X,Y);

      BitMap->Canvas->Brush->Style = bsClear;//пустая заливка

      BitMap->Canvas->MoveTo(x0,y0);

      BitMap->Canvas->LineTo(X,Y);

   }

   void Down(TPaintBox *PaintBox, int X,int Y){}

private:

   int x0, x1, y0, y1;

};

 

GRect-прямоугольник.

Rectangle-рисует прямоугольник заданного размера

class GRect : public GObject

{  public:

   GRect(int X,int Y): x0(X), y0(Y), x1(X), y1(Y) {};

 

   void Draw(TPaintBox *PaintBox, Graphics::TBitmap *BitMap, int X,int Y)

   {

      PaintBox->Canvas->Pen->Mode = pmNotXor;

      PaintBox->Canvas->Brush->Style = bsClear; //пустая заливка

      PaintBox->Canvas->Rectangle(TRect(x0,y0,x1,y1)); //содержит значения прямоугольника(координаты)

      PaintBox->Canvas->Rectangle(TRect(x0,y0,X,Y));

      x1 = X;

      y1 = Y;

   }

 

   void End(TPaintBox *PaintBox, Graphics::TBitmap *BitMap, int X,int Y)

   {

      PaintBox->Canvas->Pen->Mode = pmCopy;

      BitMap->Canvas->Brush->Style = bsClear; //пустая заливка

      PaintBox->Canvas->Rectangle(TRect(x0,y0,X,Y));

      BitMap->Canvas->Rectangle(TRect(x0,y0,X,Y));

   }

   void Down(TPaintBox *PaintBox, int X,int Y){}

private:

   int x0, x1, y0, y1;

};

 

GEllipse-эллипс.

Ellipse-рисует эллипс заданного размера

 

class GEllipse : public GObject

{  public:

   GEllipse(int X,int Y): x0(X), y0(Y), x1(X), y1(Y) {};

 

   void Draw(TPaintBox *PaintBox, Graphics::TBitmap *BitMap, int X,int Y)

   {

      PaintBox->Canvas->Pen->Mode = pmNotXor;

      PaintBox->Canvas->Brush->Style = bsClear; //пустая заливка

      PaintBox->Canvas->Ellipse(TRect(x0,y0,x1,y1));//содержит значения эллипса(координаты)

      PaintBox->Canvas->Ellipse(TRect(x0,y0,X,Y));

      x1 = X;

      y1 = Y;

   }

 

   void End(TPaintBox *PaintBox, Graphics::TBitmap *BitMap, int X,int Y)

   {

 

     //Стиль вывода замкнутой фигуры, зависящий от цвета пера

//и канвы ( заменяет своими возможностями) функцию SetBkMode()

//Здесь прозрачный фон

PaintBox->Canvas->Pen->Mode = pmCopy;

      BitMap->Canvas->Brush->Style = bsClear; //пустая заливка

      PaintBox->Canvas->Ellipse(TRect(x0,y0,X,Y));

      BitMap->Canvas->Ellipse(TRect(x0,y0,X,Y));

   }

   void Down(TPaintBox *PaintBox, int X,int Y){}

private:

   int x0, x1, y0, y1;

};

GPen-кисть.

(Аналогичным образом работает  «Ластик» ,только в палитре всегда выбирает белый цвет.)

class GPen : public GObject

{   public:

   GPen(int X,int Y): x0(X), y0(Y){};

   // Для кнопочки ctrl + Z создать вектор координат.

   void Draw(TPaintBox *PaintBox, Graphics::TBitmap *BitMap, int X,int Y)

   {

      PaintBox->Canvas->MoveTo(x0,y0);

      BitMap->Canvas->MoveTo(x0,y0);

      PaintBox->Canvas->Pen->Mode = pmCopy;

      PaintBox->Canvas->LineTo(X,Y);

      BitMap->Canvas->LineTo(X,Y);

      x0 = X;

      y0 = Y;

   }

 

   void End(TPaintBox *PaintBox, Graphics::TBitmap *BitMap, int X,int Y){}

 

   void Down(TPaintBox *PaintBox, int X,int Y){}

private:

   int x0, y0;

};

 

GFull-заливка.

class GFull : public GObject

{  public:

   GFull(int X,int Y){}//т.к. используется остальными компонентами

 

   void Draw(TPaintBox *PaintBox, Graphics::TBitmap *BitMap, int X,int Y){}

 

   void End(TPaintBox *PaintBox, Graphics::TBitmap *BitMap, int X,int Y)

   {//fsSurface-заливает область с цветом, заданным параметром Color, ограниченную другим цветом.

      PaintBox->Canvas->FloodFill(X, Y, PaintBox->Canvas->Pixels[X][Y], fsSurface);

      BitMap->Canvas->FloodFill(X, Y, BitMap->Canvas->Pixels[X][Y], fsSurface);

   }

   void Down(TPaintBox *PaintBox, int X,int Y){}

};

 

 

GNalog_El –наложение эллипса.

(аналогичным образом осуществляется  наложение других фигур). Наложение  заключается в смешивании цветов  самих фигур при наложении  друг на друга ,либо смешивания фигур с фоном, например, при рисовании синего эллипса на желтом фоне, цвет эллипса становится зеленым.

   class GNalog_El : public GObject

   {  public:

   GNalog_El(int X,int Y): x0(X), y0(Y), x1(X), y1(Y){}; //т.к. используется остальными компонентами

 

   void Draw(TPaintBox *PaintBox, Graphics::TBitmap *BitMap, int X,int Y)

    { PaintBox->Canvas->Pen->Mode = pmNotXor;// сложение с фоном по инверсному исключающему ИЛИ

      PaintBox->Canvas->Brush->Style = bsClear; //пустая заливка

      PaintBox->Canvas->Ellipse(TRect(x0,y0,x1,y1));

      PaintBox->Canvas->Ellipse(TRect(x0,y0,X,Y));

      x1 = X;

      y1 = Y;}

   void End(TPaintBox *PaintBox, Graphics::TBitmap *BitMap, int X,int Y)

   {PaintBox->Canvas->Pen->Mode = pmCopy;

      BitMap->Canvas->Brush->Style = bsClear; //пустая заливка

      PaintBox->Canvas->Ellipse(TRect(x0,y0,X,Y));

      BitMap->Canvas->Ellipse(TRect(x0,y0,X,Y));}

   void Down(TPaintBox *PaintBox, int X,int Y){}

    private:

   int x0, y0 ,x1,y1;

};

 

 

GSelect -выделение области.

Позволяет выделить нужную область рисунка и переместить (скопировать) её на новое место. Это полезно при рисовании однотипных объектов.

class GSelect : public GObject

{

public:

   GSelect(Graphics::TBitmap *BitMap)

   {

      RBegin = false;

      REnd = false;

      RDrag = false;

      Bit = new Graphics::TBitmap;

      Bit->Width = BitMap->Width;

      Bit->Height = BitMap->Height;

      BitBlt

      (

         Bit->Canvas->Handle,

         0, 0,

         BitMap->Width, BitMap->Height,

         BitMap->Canvas->Handle,

         0, 0,

         SRCCOPY//Исходное изображение копируется в контекст отображения

      );

   }

 

   void Down(TPaintBox *PaintBox, int X,int Y)

   {

      PaintBox->Canvas->Brush->Style = bsSolid;

      PaintBox->Canvas->Brush->Color = clBtnFace;

      X0 = X;

      Y0 = Y;

      // режим  работы с рамкой

      if (REnd)

      // стирание  прежней рамки

      {

         if ((X < R.Right) && (X > R.Left) && (Y > R.Top) && (Y < R.Bottom))

         // режим начала перетаскивания фрагмента

         {

            // установка флагов

            RDrag = true;

            REnd = false;

            // запоминание начального положения  перетаскиваемого фрагмента

            R0 = R;

            // запоминание изображения

         }

         else // если не попадает внутрь выделенной области, то рисуем новую.

         {

            PaintBox->Canvas->DrawFocusRect(R);

            RBegin = true;

            REnd = false;

            R.Top = X;

            R.Bottom = X;

            R.Left = Y;

            R.Right = Y;

            PaintBox->Canvas->DrawFocusRect(R);

         }

      }

      else

      // режим  начала рисования рамки фрагмента

      {

         RBegin = true;

         REnd = false;

         R.Top = X;

         R.Bottom = X;

         R.Left = Y;

         R.Right = Y;

         PaintBox->Canvas->DrawFocusRect(R);

      }

   }

 

   void Draw(TPaintBox *PaintBox, Graphics::TBitmap *BitMap, int X,int Y)

   {

      if (RBegin)

      {

         // Режим рисования рамки фрагмента

         PaintBox->Canvas->DrawFocusRect(R);

         if (X0 < X) { R.Left = X0; R.Right = X; }

         else { R.Left = X; R.Right = X0; }

         if (Y0 < Y) { R.Top = Y0; R.Bottom = Y; }

         else { R.Top = Y; R.Bottom = Y0; }

         PaintBox->Canvas->DrawFocusRect(R);

      }

      else

      {

         TF->flag_rect = true;

         // Режим перетаскивания фрагмента

         // восстановление изображения под  перетаскиваемым фрагментом

         BitMap->Canvas->CopyRect(R,Bit->Canvas,R);

         // формирование нового положения фрагмента

         R.Left = R.Left + X - X0;

         R.Right = R.Right + X - X0;

         R.Top = R.Top + Y - Y0;

         R.Bottom = R.Bottom + Y - Y0;

         // запоминание положения курсора мыши

         X0 = X;

         Y0 = Y;

         // рисование фрагмента в новом  положении

         BitMap->Canvas->CopyRect(R,Bit->Canvas,R0);

         BitBlt

         (

            PaintBox->Canvas->Handle,

            0, 0,

            PaintBox->Width, PaintBox->Height,

            BitMap->Canvas->Handle,

            0, 0,

            SRCCOPY//Исходное изображение копируется в контекст отображения

         );

         // рисование рамки

         PaintBox->Canvas->DrawFocusRect(R);

      }

   }

 

   void End(TPaintBox *PaintBox, Graphics::TBitmap *BitMap, int X,int Y)

   {

      if (RDrag)

      {

         PaintBox->Canvas->DrawFocusRect(R);

         BitBlt

         (

            Bit->Canvas->Handle,

            0, 0,

            BitMap->Width, BitMap->Height,

            BitMap->Canvas->Handle,

            0, 0,

            SRCCOPY//Исходное изображение копируется в контекст отображения

         );

      }

      if (RBegin && ! REnd) REnd = true;

      RBegin = false;

      RDrag = false;

   }

private:

   int X0, Y0;

   bool RBegin, REnd, RDrag;

   TRect R,R0;

   Graphics::TBitmap *Bit;

};

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Работа  программы

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

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

Рисование осуществляется нажатием левой  кнопки мыши. В пункте меню «Файл» можно  выбрать создание нового рисунка, сохранения существующего, открытия уже имеющегося рисунка. Пункт меню «Вид» отвечает за внешний вид редактора, там  мы можем добавить или удалить  панели редактора.

Выбор цвета осуществляется из палитры  цветов ,если в палитре нет нужного нам цвета мы можем воспользоваться определителем цветов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                                     Приложение 
Основная программа

TFmain *Fmain;

bool f_panel1 = false;//панель инструментов

bool f_panel2 = false;//панель цветов

 

RGB(Red, Green, Blue) получает из значений тpех основных цветов от 0 до 255 значение цвета RGB, связанное с палитpой.

 

// Счетчик наследников есть только в родительской форме.

__fastcall TFmain::TFmain(TComponent* Owner)

   : TForm(Owner)

{

   AllColor = 28;

   color.resize(AllColor);

   fstream File;

   File.open("ss.txt");//цвета

   for(int i = 0; i < AllColor; i++)

   {

   int R, G, B;

   File >> R;

   File >> G;

   File >> B;

      color[i].push_back(R);

      color[i].push_back(G);

      color[i].push_back(B);

   }

   File.close();

   Palette_selected_col = 0;

   Palette_selected_row = 0;

}

 

//отпускание перетаскиваемого  компонента над данным компонентом

void __fastcall TFmain::FormDockDrop(TObject *Sender,//объект,над которым объект был опущен

      TDragDockObject *Source, int X, int Y)//перетаскиваемый объект

      //X и Y содержат координаты позиции курсора мыши над компонентом

{

   Panel1->Align = alLeft;//положение панели инструментов

   Panel2->Align = alBottom;//положение панели цвета

}

 

// время,в течение которого перемещаем перетаскиваемый объект над компонентом

void __fastcall TFmain::FormDockOver(TObject *Sender,//Sender-сам компонент

      TDragDockObject *Source, int X, int Y, TDragState State,//Source-перетаскиваемый объект

      bool &Accept)//State определяет состояние перетаскиваемого объекта по отношению к другим объектам

{ //X и Y - координаты точки  эрана в пикселях

   int x = ClientOrigin.x;

   int y = ClientOrigin.y;

   if(Source->DockRect.Left <= x && Source->Control == Panel1)

      Source->DockRect = Rect(x, y, x+Panel1->Width, y+ClientHeight-Panel2->Height-StatusBar1->Height);

 

   if(Source->DockRect.Bottom >= y+ClientHeight && Source->Control == Panel2)

      Source->DockRect = Rect(x, y+ClientHeight-Panel2->Height-StatusBar1->Height, x+ClientWidth, y+ClientHeight-StatusBar1->Height);

}

 Передаём по ссылке параметр InfluenceRect типа TRect.Переменная типа TRect

указывает место в форме,где будет активизировано закрепление элемента управления

при его размещении над этим местом.Указание области закрепления одних элементов

управления на других.

void __fastcall TFmain::FormGetSiteInfo(TObject *Sender,

      TControl *DockClient, TRect &InfluenceRect, TPoint &MousePos,

      bool &CanDock)

{

   if(DockClient == Panel1)

   {

      Panel1->Constraints->MaxHeight = 70;

      Panel1->Constraints->MaxWidth = 49;

      if(MousePos.x > ClientOrigin.x)

         CanDock = DockClient != Panel1;

      else CanDock = DockClient == Panel1;

   }

   else

   {

      Panel2->Constraints->MaxHeight = 42;

      Panel2->Constraints->MaxWidth = 477;

      if(MousePos.y < ClientOrigin.y+ClientHeight)

         CanDock = DockClient != Panel2;

      else CanDock = DockClient == Panel2;

   }

}

 

 

void __fastcall TFmain::PaletteDrawCell(TObject *Sender, int ACol,

      int ARow, TRect &Rect, TGridDrawState State)

{

   Graphics::TBitmap *b = new Graphics::TBitmap;

   b->Canvas->Pen->Color = clWindow;

 

   b->Canvas->Brush->Color = (TColor)RGB(color[ACol+Fmain->Palette->ColCount*ARow][0],color[ACol+Fmain->Palette->ColCount*ARow][1],color[ACol+Fmain->Palette->ColCount*ARow][2]);  // нет заморочки со строками таблицы. :)

   b->Width = 500;

   b->Height = 500;

 

   b->Canvas->FillRect(TRect(0, 0, 50, 50));

   Palette->Canvas->CopyRect(Palette->CellRect(ACol,ARow),b->Canvas, Rect);

   b->Free();

}

//---------------------------------------------------------------------------

 

 

void __fastcall TFmain::BColorClick(TObject *Sender)

{

   if(Fmain->ColorDialog1->Execute())

   {// 12 - это формальные параметры

      FrontColor->Canvas->Brush->Color = Fmain->ColorDialog1->Color;

      FrontColor->Canvas->FillRect(TRect(0, 0, FrontColor->Width, FrontColor->Height));

 

      // Для дидильной палитре на дроугриде.(4 строки)

      Fmain->color[Fmain->Palette_selected_col+Fmain->Palette->ColCount*Fmain->Palette_selected_row][0] = GetRValue(Fmain->ColorDialog1->Color);

      Fmain->color[Fmain->Palette_selected_col+Fmain->Palette->ColCount*Fmain->Palette_selected_row][1] = GetGValue(Fmain->ColorDialog1->Color);

      Fmain->color[Fmain->Palette_selected_col+Fmain->Palette->ColCount*Fmain->Palette_selected_row][2] = GetBValue(Fmain->ColorDialog1->Color);

 

      Palette->Canvas->CopyRect(Palette->CellRect(Palette_selected_col, Palette_selected_row),FrontColor->Canvas, TRect(0,0,12,12));

   }

}

Процедура используемая фигурами для установки толщины кисти и цвета.

void __fastcall TFmain::SBPenMouseDown(TObject *Sender,

      TMouseButton Button, TShiftState Shift, int X, int Y)

{

   if(!Shift.Contains(ssLeft))// если нажата правая кнопка

   {

      cv->Visible = true;//свойства (установка размера кисти, выбор цвета)

      cv->Panel1->Color = FrontColor->Canvas->Brush->Color;

   }

}

 

 

 

Процедура установки размера холста.

void __fastcall TFmain::FNewClick(TObject *Sender)

{

   TF = new TFdoc(Application);

   if (!TF) return;

   TF->BitMap = new Graphics::TBitmap;

   TF->Caption = "Документ " + IntToStr(MDIChildCount);

   FNewList->ShowModal();//параметры нового листа

   // Устанавливаем размеры  холста и битмапа

   TF->PaintBox1->Width = StrToInt(FNewList->CSpinEdit1->Text);

   TF->PaintBox1->Height = StrToInt(FNewList->CSpinEdit2->Text);

   TF->BitMap->Width = StrToInt(FNewList->CSpinEdit1->Text);

   TF->BitMap->Height = StrToInt(FNewList->CSpinEdit2->Text);

   // Заливаем холст

   TF->BitMap->PixelFormat = pf24bit;

   TF->PaintBox1->Canvas->Brush->Color = clWindow;

   TF->PaintBox1->Canvas->FillRect(TRect(0, 0, TF->PaintBox1->Width, TF->PaintBox1->Height));

   // задаем размеры формы

   TF->Width = StrToInt(FNewList->CSpinEdit1->Text) + 10;

   TF->Height = StrToInt(FNewList->CSpinEdit2->Text) + 35;

}

Процедура вызова справки

void __fastcall TFmain::N4Click(TObject *Sender)

{

ShellExecute(Handle,"open","sprava.chm",NULL,NULL,SW_SHOWNORMAL);

 

 

 

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

Требование  к операционной системе минимальные. Операционная система должна быть Windows 95 / 98/ Me / NT / 2000 / XP/Vista/7 . Само приложение занимает 200 Кб, справочная система 10,8 Кб , для рисунка требуется не менее 351 Кб свободного места дискового пространства.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Заключение

В данной курсовой работе была решена задача разработки графического редактора с помощью  языка программирования С++ в среде программирования C++Builder 6.0. Данная программа позволяет открывать, изменять и сохранять готовые рисунки, создавать новые. Графический редактор обладает набором инструментов( кисть, карандаш, ластик, линия, заливка, выделение объекта ) и палитрой цветов Также палитру можно изменять, создавать более светлые или более темные оттенки. Реализована функция смешивания цветов . Программа обладает достаточно простым и знакомым интерфейсом , обладает минимальными требованиями к системе, оснащена подробной справочной системой.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Список  литературы

  1. Архангельский А. Я. – Приемы программирования в C++Builder 6 и 2006, издательство «Бином-Пресс», 2006г. 141077, Королев, Московской обл., ул.50 лет ВЛКСМ, 4-г.

  1. Культин Н.Б. С/C++ в примерах и задачах. - -  СПб. : БХВ – Петербург, 2001. – 288 с., ил.

    1. Х.М. Дейлт, П.Д. Дейлт.  Как программировать на С++. Москва 1998год

Интернет ресурсы:

  • http://realcodding.ru
  • http://www.tdoc.ru 

и др.

 

 

 


Графические объекты