
Список использованных материалов
1. К. Линдли «Практическая обработка изображений на языке СИ»
2. Руководство к лабораторной работе "Растровая графика" Составитель В.В. Селянкин, Таганрог, ТРТУ, № 2150-1,1995
3. Шикин, А.В. Боресков. Компьютерная графика. Динамика, реалистические изображения. М.: "Диалог-МИФИ", 1995, 287 с.
4. Джеф Проузис "Как работает компьютерная графика"
Вывод
Данная программа является удобной в применении. Может использоваться для показа слайд-шоу с большим количеством изображений(рисунков, фотографий). Эффекты вносят живость и добавляют интерес к просматриваемым слайдам.
Хотелось бы заметить, что большая часть кода программы служит для организации интерфейса, что облегчает взаимодействие между программой и человеком.
Приложение – исходный текст программы
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
const X=640;
const Y=480;
int FN;
void NextImage()
{
FN++;
if(FN>=Form1->OpenDialog1->Files->Count) FN=0;
Form1->Image2->Picture->Bitmap->LoadFromFile(Form1->OpenDialog1->Files->Strings[FN]);
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
NextImage();
TRect rect;
for(int x=0;x<X;x++)
{
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++){};
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
NextImage();
TRect rect;
for(int x=X-1;x>=0;x--)
{
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++){};
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
NextImage();
TRect rect;
for(int y=0;y<Y;y++)
{
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++){};
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
NextImage();
TRect rect;
for(int y=Y-1;y>=0;y--)
{
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++){};
}
}
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++){};
}
}
//---------------------------------------------------------------------------
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++){};
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button11Click(TObject *Sender)
{
NextImage();
TRect rect1,rect2;
int zad1;
for(int x=0;x<=X;x++)
{
zad1=StrToInt(Edit1->Text)/X*(X-x);
rect1=Rect(0,0,x+1,Y);
rect2=Rect(X-x,0,X,Y);
Form1->Canvas->CopyRect(rect1,Image2->Picture->Bitmap->Canvas,rect2);
for(int i=0;i<=zad1;i++){};
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button12Click(TObject *Sender)
{
NextImage();
TRect rect1,rect2;
int zad1;
for(int x=0;x<=X/2;x++)
{
zad1=StrToInt(Edit1->Text)/X/2*(X/2-x);
rect1=Rect(0,0,x+1,Y);
rect2=Rect(X/2-x,0,X/2+1,Y);
Form1->Canvas->CopyRect(rect1,Image2->Picture->Bitmap->Canvas,rect2);
rect1=Rect(X-x,0,X,Y);
rect2=Rect(X/2,0,X/2+x,Y);
Form1->Canvas->CopyRect(rect1,Image2->Picture->Bitmap->Canvas,rect2);
for(int i=0;i<=zad1;i++){};
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button13Click(TObject *Sender)
{
NextImage();
int y;
for(int x=0;x<X;x++)
{
for(y=0;y<Y;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];
}
}
}
//---------------------------------------------------------------------------
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)
{
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++){};
}
}
}
//---------------------------------------------------------------------------
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++){};
}
}
//---------------------------------------------------------------------------
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));
}
//---------------------------------------------------------------------------
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));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button18Click(TObject *Sender)
{
if(OpenDialog1->Execute())
{
FN=0;
Image2->Picture->Bitmap->LoadFromFile(OpenDialog1->Files->Strings[FN]);
}
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TForm1::Button20Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
randomize;
OpenDialog1->InitialDir = ExtractFilePath(Application->ExeName);
if(OpenDialog1->Execute())
{
FN=0;
Image2->Picture->Bitmap->LoadFromFile(OpenDialog1->Files->Strings[FN]);
}
}