12404

РОБОТА С ФРАГМЕНТАМИ IMAGE

Лабораторная работа

Информатика, кибернетика и программирование

ЛАБОРАТОРНА РОБОТА № 9 РОБОТА С ФРАГМЕНТАМИ IMAGE Ціль лабораторної роботи складається з вивчення: структури і призначення елементів інтегрованого середовища С Buіlder для розробки прикладних програм С по роботі на формі вікна з фрагментами зображення з файлу .bmp на осн

Русский

2013-04-27

77.5 KB

1 чел.

ЛАБОРАТОРНА РОБОТА № 9

РОБОТА С ФРАГМЕНТАМИ IMAGE

Ціль лабораторної роботи складається з вивчення: структури і призначення елементів інтегрованого середовища С++ Buіlder для розробки прикладних програм С++ по роботі на формі вікна з фрагментами зображення з файлу .bmp  на основі компоненти «Image».

  1.  Загальні зведення до роботи з фрагментами

зображення на формі вікна

Як відомо, розміщення зображення на формі вікна з файлів .bmp забезпечує компонента Image. Поєднання обробника подій маніпулятора «мишка» над компонентою Image дозволяє виконувати дії з фрагментами зображення , завантаженого з файлу .bmp .  

2. Постановка задачі до виконання лабораторної роботи

При виконанні лабораторної роботи потрібно створити програму С++ для роботи у Wіndows, в який на формі вікна буде виконуватись:

  •  завантаження на форму зображення з файлу .bmp ;
  •  формування окремих фрагментів з зображення, яке було розміщено у компоненту Image;
  •  вільне переміщення сформованих фрагментів зображення з компоненти Image по формі вікна програми за рахунок обробки подій до маніпулятора «мишка».

3. Послідовності дій і команд для програмування

задачі з лабораторної роботи

Крок 1.  Активізуємо проект файлів для нової програми С++ та виконайте команду для зберігання їх на диску в задану папку (каталог):

  •  Виконайте команду Fіle/New Applіcatіon, щоб з'явилася нова чиста форма Form1;
  •  Перейдіть у вікно інспектора об'єкта і у властивості Captіon задайте назву лабораторної роботи " Робота с фрагментами Image ,  щоб на заголовку вікна форми програми С++ замість назви Form1 з'явився напис " Робота с фрагментами Image ";
  •  Збережить новий проект файлів разом з порожньою формою і змінамі в заголовку вікна. Це автоматично активізує новий проект файлів і C++ Buіlder запам'ятає шлях для швидкого збереження змін у файлах, розробляємої програми. Для збереження файлів проекту відрийте на диску таки папки D:\LA_NN\LAB-Fragment, де NN - номер навчальної групи;
  •  Далі у меню Fіle виберіть команду Save Project As та при появі запиту на збереження змінюємо назву файлу Unіt1 на файл U_fragment.срр, а пропонуєму назву проекту Project1.bpr змінюємо на P_fragment.bpr.

Крок 2.  Далі потрібно скомпонувати форму прикладної програми з елементами, показаними на рис. 1.

Рис. 1. Форма програми для роботи з фрагментами Image.

Крок 3. Після закінчення розроби форми програми по рис. 1 потрібно у вікні редактора текстів сформувати наступний лістинг команд для обробок подій при роботі з фрагментами Image.

//------------------------------- U_fragment.срр --------------------------------------

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

#include <vcl.h>

#pragma hdrstop

#include "U_fragment.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

int X0, Y0;

bool move = false;

TRect rec;

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

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

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

void __fastcall TForm1::FormCreate(TObject *Sender)

{

TImage * Pict = new TImage(Form1);

Pict->AutoSize = true;

/* Файл для розподілу на фрагменти */

Pict->Picture->LoadFromFile("MIK-21.BMP");

Image5->Canvas->CopyRect(Image5->ClientRect, Pict->Canvas,

                         Rect(0,0,Pict->Width, Pict->Height));

Image1->Canvas->CopyRect(Image1->ClientRect, Pict->Canvas,

                 Rect(0,0,Pict->Width / 2,Pict->Height / 2));

Image2->Canvas->CopyRect(Image2->ClientRect, Pict->Canvas,

       Rect(Pict->Width / 2,0,Pict->Width,Pict->Height / 2));

Image3->Canvas->CopyRect(Image3->ClientRect, Pict->Canvas,

      Rect(0,Pict->Height / 2,Pict->Width / 2,Pict->Height));

Image4->Canvas->CopyRect(Image4->ClientRect, Pict->Canvas,

                   Rect(Pict->Width / 2,Pict->Height / 2,

                   Pict->Width,Pict->Height ));

delete Pict;

Image3->ManualFloat(Rect(Form1->Left+Image3->Left,

                    Form1->Top+Image3->Top,

                    Form1->Left+Image3->Left+Image3->Width,

                    Form1->Top+Image3->Top+Image3->Height));

Image3->ManualDock(Form1,NULL,alLeft);

Image4->ManualFloat(Rect(Form1->Left+Image4->Left,

                    Form1->Top+Image4->Top,

                    Form1->Left+Image4->Left+Image4->Width,

                    Form1->Top+Image4->Top+Image4->Height));

Image4->ManualDock(Form1,NULL,alLeft);

}

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

void __fastcall TForm1::Image1MouseDown(TObject *Sender,

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

{

 if(Button != mbLeft) return;

 X0 = X;

 Y0 = Y;

 move = true;

 ((TControl *)Sender)->BringToFront();

}

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

void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,

     int X, int Y)

{

if (move)

{

 TImage * Im = (TImage *)Sender;

 Im->SetBounds(Im->Left + X - X0,

         Im->Top + Y - Y0, Im->Width, Im->Height);

}

}

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

void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,

     TShiftState Shift, int X, int Y)

{

move = false;

}

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

void __fastcall TForm1::Image2MouseDown(TObject *Sender,

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

{

if(Button != mbLeft) return;

X0 = X;

Y0 = Y;

rec = ((TControl *)Sender)->BoundsRect;

move = true;

}

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

void __fastcall TForm1::Image2MouseMove(TObject *Sender, TShiftState Shift,

     int X, int Y)

{

if(! move) return;

Canvas->DrawFocusRect(rec);

rec.left += X - X0;

rec.right += X - X0;

rec.top += Y - Y0;

rec.bottom += Y - Y0;

X0 = X;

Y0 = Y;

Canvas->DrawFocusRect(rec);

}

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

void __fastcall TForm1::Image2MouseUp(TObject *Sender, TMouseButton Button,

     TShiftState Shift, int X, int Y)

{

Canvas->DrawFocusRect(rec);

if(! Shift.Contains(ssAlt))

{

((TControl *)Sender)->SetBounds(

                      rec.Left + X - X0, rec.Top + Y - Y0,

                      ((TControl *)Sender)->Width,

                      ((TControl *)Sender)->Height);

((TControl *)Sender)->BringToFront();

}

move = false;

}

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

void __fastcall TForm1::Image4EndDock(TObject *Sender, TObject *Target,

     int X, int Y)

{

((TControl *)Sender)->BringToFront();  

}

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

void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,

     int X, int Y)

{

 const int SC_DRAGMOVE = 0xF012;

 ReleaseCapture();

 Perform(WM_SYSCOMMAND, SC_DRAGMOVE, 0);

}

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

//--------------Fragmet-image.cpp------------------------------------

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

#include <vcl.h>

#pragma hdrstop

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

USEFORM("U_fragment.cpp", Form1);

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

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{

try

{

 Application->Initialize();

 Application->CreateForm(__classid(TForm1), &Form1);

 Application->Run();

}

catch (Exception &exception)

{

 Application->ShowException(&exception);

}

catch (...)

{

 try

 {

  throw Exception("");

 }

 catch (Exception &exception)

 {

  Application->ShowException(&exception);

 }

}

return 0;

}

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

//------------- U_fragment.h---------------------------------------------

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

#ifndef UMoveH

#define UMoveH

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

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <ExtCtrls.hpp>

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

class TForm1 : public TForm

{

__published: // IDE-managed Components

TImage *Image1;

TImage *Image2;

TImage *Image3;

TImage *Image4;

       TImage *Image5;

void __fastcall FormCreate(TObject *Sender);

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 Image2MouseDown(TObject *Sender, TMouseButton

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

         

void __fastcall Image2MouseMove(TObject *Sender, TShiftState Shift,

         int X, int Y);

void __fastcall Image2MouseUp(TObject *Sender, TMouseButton Button,

         TShiftState Shift, int X, int Y);

void __fastcall Image4EndDock(TObject *Sender, TObject *Target,

          int X, int Y);

void __fastcall FormMouseMove(TObject *Sender, TShiftState Shift,

         int X, int Y);

         

private: // User declarations

public:  // User declarations

__fastcall TForm1(TComponent* Owner);

};

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

extern PACKAGE TForm1 *Form1;

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

#endif

PAGE  - 1 -


 

А также другие работы, которые могут Вас заинтересовать

15619. КИТАЙСКИЙ, ИНДИЙСКИЙ И ЯПОНСКИЙ ПРОЕКТЫ ДЛЯ ГЕОПОЛИТИКИ И ГЕОЭКОНОМИКИ РОССИИ 218.5 KB
  КИТАЙСКИЙ ИНДИЙСКИЙ И ЯПОНСКИЙ ПРОЕКТЫ ДЛЯ ГЕОПОЛИТИКИ И ГЕОЭКОНОМИКИ РОССИИ Переход к легальной рыночной экономике ускорил центробежные силы разрывающие Россию. Если на юге страны использовались военные и идеологические орудия развала государства то на Дальнем
15620. Культура, кризис, этика и эстетика 38 KB
  Культура кризис этика и эстетика Темы для обсуждения предложены две: насчёт того переживает ли нынешняя культура кризис и вторая – об этическом и эстетическом в современной культуре. Ничего существенного я не могу сказать ни на первую тему ни на вторую. Потому что ч...
15621. Das Prinzip verum factum: seine theologische Pramisse bei Nikolaus von Kues 41.5 KB
  Das Prinzip €œverumfactum€: seine theologische Pramisse bei Nikolaus von Kues Das Tatsachlichkeit der Wahrheit heutzutage ist etwas dass versteht sich von selbst. Dass die Wahrheit gewissermassen erzeugt ist davon man sagt seitdem am Morgen der Philosophie war klargestellt dass obgleich die Wahrheit von sich selbst existiert denn seine Stellung in die Sprache in dem Urteil von Wahrheit ist. Das bei uns aus Latein angekommende €œFaktum€ hat vor langer Zeit derUntersch...
15622. Николай Кузанский и философия эпохи культуры 58 KB
  Николай Кузанский и философия эпохи культуры слишком обширная тема если считать что эпоха культуры это всё Новое время. Я попытаюсь эскизно очертить только один сюжет из этой большой темы правда он – один из главных. Речь пойдёт об истоках новоевропейского г
15623. Бог был для мира не сим одним 109.5 KB
  Бог был для мира не сим одним Бог был для мира не сим одним – не причиною только бытия но сотворил как благий – полезное как премудрый – прекраснейшее как могущественный – величайшее Василий Великий. Беседы на Шестоднев.1 Всё дальнейшее будет попыткой комментария...
15624. Время событий и событие времени 43.5 KB
  Время событий и событие времени На последней странице Онтологии времени значится учебное издание. Я бы даже сказал учебное пособие. Для меня это учебное пособие по истории философии настоящее и одно из лучших и немногих при наличии кучи учебников плохих и хор...
15625. Принцип verum/factum: его богословские предпосылки У Николая Кузанского 99.5 KB
  Принцип verum/factum: его богословские предпосылки У Николая Кузанского Фактичность истины сегодня нечто само собой разумеющееся. О сделанности истины о том что она какимто образом производится речь идёт с тех пор как на заре философии было выяснено что хотя ист
15626. Cogito как практика себя 85 KB
  Cogito как практика себя Более или менее общим местом историкофилософского дискурса является интерпретация учения Декарта как некой поворотной точки punctum cartesianum в истории западной метафизики с которой начинается новый – собственно новоевропейский её период период...
15627. Техники себя и Просвещение 29 KB
  Техники себя и Просвещение Я решил поговорить о техниках себя в связи с Просвещением потому что мне кажется что обсуждение такой темы будет небесполезным для понимания того и что такое техники себя описываемые и разбираемые в Герменевтике субъекта и что такое