📄 main.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "main.h"
#include "math.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ShowImage(int mode)
{
int i,j;
float fi;
int step,ImagePart;
switch(mode)
{
case 0: //马赛克效果
mi=mi+1;
if(mi>100)
{
Timer1->Enabled=false;
break;
}
if(mi==1)
for(int ni=0;ni<=9;ni++)
for(int nj=0;nj<=9;nj++)
BoolArray[ni][nj]=false;
do{
i=random(10);
j=random(10);
}while(BoolArray[i][j]!=false);
BoolArray[i][j]=true;
Image2->Canvas->CopyRect(Rect((Image1->Width/10)*i,(Image1->Height/10)*j,
(Image1->Width/10)*(i+1),(Image1->Height/10)*(j+1)),Image1->Canvas,
Rect((Image1->Width/10)*i,(Image1->Height/10)*j,(Image1->Width/10)*(i+1),(Image1->Height/10)*(j+1)));
break;
case 1: //百叶窗效果
mi=mi+1;
if(mi>16)
{
Timer1->Enabled=false;
break;
}
for(i=0;i<=(Image1->Height>>4);i++)
{
Image2->Canvas->CopyRect(Rect(0,(i<<4)+mi-1,Image1->Width,(i<<4)+mi),
Image1->Canvas,Rect(0,(i<<4)+mi-1,Image1->Width,(i<<4)+mi));
}
break;
case 2: //随机条效果
mi=mi+1;
if(mi>Image1->Picture->Height)
{
Timer1->Enabled=false;
break;
}
if(mi==1)
for(int ni=0;ni<=RandomLineArray.Length-1;ni++)
RandomLineArray[ni]=false;
for(j=0;j<4;j++)
{
if(Image1->Picture->Height-mi<4)
{
j=4-(Image1->Picture->Height-mi)+1;
continue;
}
do{
i=random(RandomLineArray.Length);
}while(RandomLineArray[i]!=false);
RandomLineArray[i]=true;
Image2->Canvas->CopyRect(Rect(0,i,Image1->Picture->Width,i+1),Image1->Canvas,
Rect(0,i,Image1->Picture->Width,i+1));
}
mi=mi+3;
break;
case 3: //拖尾效果
step=Image1->Picture->Height/TrackNumber;
if(mi>TrackNumber)
{
Timer1->Enabled=false;
break;
}
for(j=1;j<TrackNumber+1-mi;j++)
{
Image2->Canvas->CopyRect(Rect(0,Image1->Picture->Height-step*(j+mi),Image1->Picture->Width,Image1->Picture->Height-step*(j+mi-1)),
Image1->Canvas,Rect(0,Image1->Picture->Height-step*(mi+1),Image1->Width,Image1->Picture->Height-step*mi));
}
mi=mi+1;
break;
case 4: //平推效果
mi=mi+MoveStep;
if(mi>Image1->Width)
{
Timer1->Enabled=false;
break;
}
Image2->Canvas->CopyRect(Rect(0,0,mi,Image1->Picture->Height),Image1->Canvas,
Rect(Image1->Picture->Width-mi,0,Image1->Picture->Width,Image1->Picture->Height));
break;
case 5: //向外扩展效果
mi=mi+MoveStep;
if(mi>Image1->Width>>1)
{
Timer1->Enabled=false;
break;
}
fi=(float)(mi * Image1->Height)/Image1->Width;
Image2->Canvas->CopyRect(Rect((Image1->Picture->Width>>1)-mi,(Image1->Picture->Height>>1)-fi,
(Image1->Picture->Width>>1)+mi,(Image1->Picture->Height>>1)+fi),
Image1->Canvas,Rect(Image1->Picture->Width>>1-mi,(Image1->Picture->Height>>1)-fi,
(Image1->Picture->Width>>1)+mi,(Image1->Picture->Height>>1)+fi));
break;
case 6: //拉伸效果
mi=mi+1;
if(mi>16)
{
Timer1->Enabled=false;
break;
}
Image2->Canvas->StretchDraw(Rect(0,0,mi*Image1->Width>>4,mi*Image1->Height>>4),Image1->Picture->Bitmap);
break;
case 7: //拼图效果
mi=mi+MoveStep;
if(mi>(Image1->Picture->Width>>1))
{
if(mi>=(Image1->Picture->Width>>1)+MoveStep)
{
Timer1->Enabled=false;
break;
}
else
mi=Image1->Picture->Width>>1;
}
fi=(float)(mi * Image1->Height)/Image1->Width;
Image2->Canvas->CopyRect(Rect(0,0,mi,fi),Image1->Canvas,Rect((Image1->Picture->Width>>1)-mi,
(Image1->Picture->Height>>1)-fi,Image1->Picture->Width>>1,Image1->Picture->Height>>1));
Image2->Canvas->CopyRect(Rect(Image1->Picture->Width-mi,0,Image1->Picture->Width,fi),
Image1->Canvas,Rect(Image1->Picture->Width>>1,(Image1->Picture->Height>>1)-fi,
(Image1->Picture->Width>>1)+mi,Image1->Picture->Height>>1));
Image2->Canvas->CopyRect(Rect(0,Image1->Picture->Height-fi,mi,Image1->Picture->Height),
Image1->Canvas,Rect((Image1->Picture->Width>>1)-mi,Image1->Picture->Height>>1,
Image1->Picture->Width>>1,(Image1->Picture->Height>>1)+fi));
Image2->Canvas->CopyRect(Rect(Image1->Picture->Width-mi,Image1->Picture->Height-fi,
Image1->Width,Image1->Picture->Height),Image1->Canvas,Rect(Image1->Picture->Width>>1,
Image1->Picture->Height>>1,(Image1->Picture->Width>>1)+mi,(Image1->Picture->Height>>1)+fi));
break;
case 8: //水平交错效果
ImagePart=Image1->Picture->Height/InterNumber;
if(mi>Image1->Picture->Width)
{
if(mi>=Image1->Picture->Width+MoveStep)
{
Timer1->Enabled=false;
break;
}
else
mi=Image1->Picture->Width;
}
for(i=0;i<InterNumber;i++)
{
Image2->Canvas->CopyRect(Rect(mi-Image1->Picture->Width,Image1->Picture->Height-(2*i+1)*ImagePart,
mi,Image1->Picture->Height-2*i*ImagePart),Image1->Canvas,
Rect(0,Image1->Picture->Height-(2*i+1)*ImagePart,Image1->Picture->Width,
Image1->Picture->Height-2*i*ImagePart));
Image2->Canvas->CopyRect(Rect(Image1->Picture->Width-mi,Image1->Picture->Height-2*(i+1)*ImagePart,
2*Image1->Picture->Width-mi,Image1->Picture->Height-(2*i+1)*ImagePart),Image1->Canvas,
Rect(0,Image1->Picture->Height-2*(i+1)*ImagePart,Image1->Picture->Width,
Image1->Picture->Height-(2*i+1)*ImagePart));
}
mi=mi+MoveStep;
break;
default:
break;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
MoveStep=10;
TrackNumber=20;
InterNumber=20;
PageCount=-1;
randomize();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
ShowImage(PageCount);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image2Click(TObject *Sender)
{
mi=0;
if(PageCount>=8)
PageCount=-1;
Image2->Canvas->FillRect(Rect(0,0,Image2->Width,Image2->Height));
Timer1->Enabled=true;
PageCount++;
switch(PageCount)
{
case 0:
Image1->Picture->LoadFromFile(".//Sample.bmp");
break;
case 1:
Image1->Picture->LoadFromFile(".//Sample1.bmp");
break;
case 2:
Image1->Picture->LoadFromFile(".//Sample2.bmp");
RandomLineArray.Length=Image1->Picture->Height;
break;
case 3:
Image1->Picture->LoadFromFile(".//Sample3.bmp");
break;
case 4:
Image1->Picture->LoadFromFile(".//Sample4.bmp");
break;
case 5:
Image1->Picture->LoadFromFile(".//Sample5.bmp");
break;
case 6:
Image1->Picture->LoadFromFile(".//Sample.bmp");
break;
case 7:
Image1->Picture->LoadFromFile(".//Sample1.bmp");
break;
case 8:
Image1->Picture->LoadFromFile(".//Sample2.bmp");
break;
default:
break;
}
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -