⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 C++Builder程序员编程手记《配书光盘》
💻 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 + -