Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовик кг.doc
Скачиваний:
11
Добавлен:
15.11.2018
Размер:
786.94 Кб
Скачать

Описание программы

Программа работает с изображениями формата BMP, с количеством точек 640х480.

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

Используемые эффекты:

Пикселизация

Квадратики

Линии

Демонстрация слайд-шоу:

Слева направо

Справа налево

Сверху вниз

Снизу вверх

К центру

От центра

Жалюзи горизонтальные

Жалюзи вертикальные

Описание процедур

void __fastcall TForm1::Button1Click(TObject *Sender)

{

NextImage();

TRect rect;

for(int x=0;x<X;x++) // наращивание по х происходит от 0 до Х=640

{

rect=Rect(x,0,x+1,Y);// устанавливаем точку, от которой начинвется вывод

изображения

Form1->Canvas->CopyRect(rect,Image2->Picture->Bitmap->Canvas,rect);

for(int i=0;i<=StrToInt(Edit1->Text);i++){};// вывод изображения с определенной заданной скоростью

}

Процедура выполняется при нажатии Кнопки1 «Слева направо». Производится попиксельный вывод изображение NextImage по х, начиная с х=0 до Х=640.

void __fastcall TForm1::Button2Click(TObject *Sender)

{

NextImage();

TRect rect;

for(int x=X-1;x>=0;x--)// наращивание по х происходит от 640 до 0

{

rect=Rect(x,0,x+1,Y); // устанавливаем грань, от которой начинается вывод изображения

Form1->Canvas->CopyRect(rect,Image2->Picture->Bitmap->Canvas,rect);

for(int i=0;i<=StrToInt(Edit1->Text);i++){};// вывод изображения с определенной заданной скоростью

}

Процедура выполняется при нажатии Кнопки2 «Справа налево». Производится попиксельный вывод изображение NextImage по х, начиная с Х=640 до х=0

void __fastcall TForm1::Button3Click(TObject *Sender)

{

NextImage();

TRect rect;

for(int y=0;y<Y;y++)// вывод изображения осуществляется по оси у от 0 до 480

{

rect=Rect(0,y,X,y+1);//точка отсчета – верхняя грань

Form1->Canvas->CopyRect(rect,Image2->Picture->Bitmap->Canvas,rect);

for(int i=0;i<=StrToInt(Edit1->Text);i++){};//вывод изображения с определенной заданной скоростью

}

Процедура выполняется при нажатии Кнопки2 «Сверху вниз». Производится построковый вывод пикселей изображения NextImage по у, начиная с У=0 до у=480

void __fastcall TForm1::Button4Click(TObject *Sender)

{

NextImage();

TRect rect;

for(int y=Y-1;y>=0;y--)// вывод изображения осуществляется по оси у от 480 до 0

{

rect=Rect(0,y,X,y+1);

Form1->Canvas->CopyRect(rect,Image2->Picture->Bitmap->Canvas,rect);

for(int i=0;i<=StrToInt(Edit1->Text);i++){};//вывод изображения с определенной заданной скоростью

}

Процедура выполняется при нажатии Кнопки2 «Снизу вверх». Производится построковый вывод пикселей изображения NextImage по у, начиная с у=480 до У=0

void __fastcall TForm1::Button9Click(TObject *Sender)

{

NextImage();

TRect rect;

int y1;

float kof=(float)Y/(float)X;

for(int x=0;x<=X/2;x++)

{

y1=x*kof;

rect=Rect(x,y1,x+1,Y-y1); \\ отсчет от левого верхнего угла

Form1->Canvas->CopyRect(rect,Image2->Picture->Bitmap->Canvas,rect);

rect=Rect(X-x,y1,X-x-1,Y-y1);\\ отсчет от правого верхнего угла

Form1->Canvas->CopyRect(rect,Image2->Picture->Bitmap->Canvas,rect);

rect=Rect(x,y1,X-x,y1+1);\\левый нижний

Form1->Canvas->CopyRect(rect,Image2->Picture->Bitmap->Canvas,rect);

rect=Rect(x,Y-y1,X-x,Y-y1-1);\\правый нижний угол

Form1->Canvas->CopyRect(rect,Image2->Picture->Bitmap->Canvas,rect);

for(int i=0;i<=StrToInt(Edit1->Text);i++){};

}

}

Процедура выполняется при нажатии Кнопки9 «К центру». Производится построковый вывод пикселей изображения NextImage начиная от граней изображения до точки X/2 и Y/2. Вывод осуществляется вдоль диагоналей

void __fastcall TForm1::Button10Click(TObject *Sender)

{

NextImage();

TRect rect;

int y1;

float kof=(float)Y/(float)X;

for(int x=X/2;x>=0;x--)

{

y1=x*kof;

rect=Rect(x,y1,x+1,Y-y1);

Form1->Canvas->CopyRect(rect,Image2->Picture->Bitmap->Canvas,rect);

rect=Rect(X-x,y1,X-x-1,Y-y1);

Form1->Canvas->CopyRect(rect,Image2->Picture->Bitmap->Canvas,rect);

rect=Rect(x,y1,X-x,y1+1);

Form1->Canvas->CopyRect(rect,Image2->Picture->Bitmap->Canvas,rect);

rect=Rect(x,Y-y1,X-x,Y-y1-1);

Form1->Canvas->CopyRect(rect,Image2->Picture->Bitmap->Canvas,rect);

for(int i=0;i<=StrToInt(Edit1->Text);i++){};

}

}

Процедура выполняется при нажатии Кнопки10 «От центра». Производится построковый вывод пикселей изображения NextImage начиная от центра изображения с координатами X/2 и Y/2. Вывод осуществляется вдоль диагоналей

void __fastcall TForm1::Button13Click(TObject *Sender)

{

NextImage();

int y;

for(int x=0;x<X;x++)

{

for(y=0;y<Y;y=y+2)//отсчет по у от 0 до 480, при этом ширина шага y=y+2

{

Form1->Canvas->Pixels[x][y]=Image2->Picture->Bitmap->Canvas->Pixels[x][y];

Form1->Canvas->Pixels[X-x-1][y+1]=Image2->Picture->Bitmap->Canvas->Pixels[X-x-1][y+1];

}

}

}

Процедура выполняется при нажатии Кнопки13 «Горизонтальные жалюзи». Справа и слева идет построковое заполнение пикселями шириной 2 пикселя.

void __fastcall TForm1::Button14Click(TObject *Sender)

{

NextImage();

TRect rect;

int x;

for(int y=0;y<Y;y++)

{

for(x=0;x<X;x=x+2*X/20)//отсчет по оси х от 0 до 640, шаг x=x+2*X/20

{

rect=Rect(x,y,x+X/20,y+1);// заполнение от левой грани

Form1->Canvas->CopyRect(rect,Image2->Picture->Bitmap->Canvas,rect);

rect=Rect(x+X/20,Y-y-1,x+2*X/20,Y-y);// заполнение от правой грани

Form1->Canvas->CopyRect(rect,Image2->Picture->Bitmap->Canvas,rect);

for(int i=0;i<=StrToInt(Edit1->Text)/10;i++){};// с учетом скорости

}

}

}

Процедура выполняется при нажатии Кнопки14 «Вертикальные жалюзи». В заполнении участвуют 20 полосок по шириной 64 пикселя. (x=x+2*X/20)

void __fastcall TForm1::Button15Click(TObject *Sender)

{

NextImage();

TRect rect;

const d=10; // величина грани квадрата

int x_=X/d,y_=Y/d,x,y;// инициализируем новые переменные

byte pole[X/d][Y/d];

for(int x=0;x<X/d;x++)// грань квадрата по х

for(int y=0;y<Y/d;y++) pole[x][y]=0;// грань квадрата по у

for(int i=0;i<x_*y_;i++)// площадь квадрата

{

x=random(x_);

y=random(y_);

while(pole[x][y]==1)

{

x=random(x_);

y=random(y_);

}

pole[x][y]=1;

rect=Rect(x*d,y*d,(x+1)*d,(y+1)*d);

Form1->Canvas->CopyRect(rect,Image2->Picture->Bitmap->Canvas,rect);

for(int i=0;i<=StrToInt(Edit1->Text)/10;i++){};

}

}

Процедура выполняется при нажатии Кнопки15 «Квадратики». Заполнение осуществляется при помощи заполнения отдельными сегментами (квадратиками). Заполнение осуществляется произвольным способом при помощи функции random. Длина ребра каждого квадрата d=10

void __fastcall TForm1::Button16Click(TObject *Sender)

{

NextImage();

int x,y;

byte pole[X][Y];

for(int x=0;x<X;x++)

for(int y=0;y<Y;y++) pole[x][y]=0;

for(int i=0;i<X*Y-100;i++)

{

x=random(X);

y=random(Y);

while(pole[x][y]==1)

{

x=random(X);

y=random(Y);

}

pole[x][y]=1;

Form1->Canvas->Pixels[x][y]=Image2->Picture->Bitmap->Canvas->Pixels[x][y];

}

Form1->Canvas->CopyRect(Rect(0,0,Image2->Picture->Bitmap->Width,Image2->Picture->Bitmap->Height),Image2->Picture->Bitmap->Canvas,Rect(0,0,Image2->Picture->Bitmap->Width,Image2->Picture->Bitmap->Height));

}

Процедура выполняется при нажатии Кнопки16 «Пикселизация». Изображение выводится попиксельно. Количество пикселей равно X*Y-100=307100

void __fastcall TForm1::Button17Click(TObject *Sender)

{

NextImage();

int x1,y1,x2,y2,xt,yt,tmp;

float k,x,y;

byte pole[X][Y];

for(x1=0;x1<X;x1++)

for(y1=0;y1<Y;y1++) pole[x1][y1]=0;

for(int i=0;i<100000;i++)//количество линий

{

x1=random(X);

y1=random(Y);

x2=random(X);

y2=random(Y);

if(abs(x2-x1)>abs(y2-y1))

{

if(x1>x2){tmp=x1;x1=x2;x2=tmp;tmp=y1;y1=y2;y2=tmp;}

y=y1;

if(y1!=y2)

{

k=(float)(y2-y1)/(float)(x2-x1);

for(xt=x1;xt<x2;xt++)

{

y=y+k;

yt=y;

if(pole[xt][yt]==0)

{

Form1->Canvas->Pixels[xt][yt]=Image2->Picture->Bitmap->Canvas->Pixels[xt][yt];

pole[xt][yt]=1;

}

}

}

}else

{

if(y1>y2){tmp=x1;x1=x2;x2=tmp;tmp=y1;y1=y2;y2=tmp;}

x=x1;

if(x1!=x2)

{

k=(float)(x2-x1)/(float)(y2-y1);

for(yt=y1;yt<y2;yt++)

{

x=x+k;

xt=x;

if(pole[xt][yt]==0)

{

Form1->Canvas->Pixels[xt][yt]=Image2->Picture->Bitmap->Canvas->Pixels[xt][yt];

pole[xt][yt]=1;

}

}

}

}

}

tmp=0;

for(x1=0;x1<X;x1++)

for(y1=0;y1<Y;y1++) if(pole[x1][y1]==0) tmp++;

for(int i=0;i<tmp-1000;i++)

{

xt=random(X);

yt=random(Y);

while(pole[xt][yt]==1)

{

xt=random(X);

yt=random(Y);

}

pole[xt][yt]=1;

Form1->Canvas->Pixels[xt][yt]=Image2->Picture->Bitmap->Canvas->Pixels[xt][yt];

}

Form1->Canvas->CopyRect(Rect(0,0,Image2->Picture->Bitmap->Width,Image2->Picture->Bitmap->Height),Image2->Picture->Bitmap->Canvas,Rect(0,0,Image2->Picture->Bitmap->Width,Image2->Picture->Bitmap->Height));

}

Процедура выполняется при нажатии Кнопки17 «Линии». Вывод производится при помощи линий. Линии выводятся в произвольном порядке. Количество линий = 100000.

void __fastcall TForm1::Button20Click(TObject *Sender)

{

Close();

Выход из программы.

Входные и выходные данные

На вход к программе подаются изображения в формате bmp, размером 640×480, загружается из папки.

На выход подаются те же самые изображения только с эффектами.

Требования к системе

Для успешной работы программы требуется

процессор совместимый с Intel

минимальное количество оперативной памяти, достаточное для работы ОС

видео карта SVGA, способная поддерживать режим 640X480 256 цветов

мышь

операционная система DOS или совместимая с ней

Интерфейс:

13 кнопок на панели1:

- Пикселизация

- Квадратики

- Линии

- Слева направо

- Справа налево

- Сверху вниз

- Снизу вверх

- К центру

- От центра

- Жалюзи горизонтальные

- Жалюзи вертикальные

В окне формы рисунок Image2

2 надписи:

- эффекты

- просмотр слайдов

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