用CB實(shí)現(xiàn)圖像的特技顯示

字號(hào):

在網(wǎng)頁(yè)、軟件和游戲中,我們經(jīng)常可以看到圖像的各種特技顯示,如中心擴(kuò)散、百葉窗簾、右下推出等,這種動(dòng)感圖像顯示,往往給人一種賞心悅目的感覺(jué),給我們的應(yīng)用程序增加了一些美感。在C++ Builder中,我們可以很容易地實(shí)現(xiàn)這些功能。下面以一個(gè)具體的例子,介紹實(shí)現(xiàn)中心擴(kuò)散和百葉窗簾兩種顯示技巧,并說(shuō)明在C++ Builder中處理圖像的基本方法。
    在C++ Builder中新建一個(gè)工程,然后在窗體上添加一個(gè)Image圖像控件,把它的Picture屬性設(shè)置為一幅bmp圖像,調(diào)節(jié)Image控件尺寸與圖像的尺寸大小相同。再在窗體上添加兩個(gè)Button控件,把Button1的Caption屬性設(shè)置為“中心擴(kuò)散”、Button2的Caption屬性設(shè)置為“百葉窗簾”。
    1. 對(duì)于“中心擴(kuò)散”的實(shí)現(xiàn),我們利用一定的算法,通過(guò)一定的循環(huán)次數(shù),每次顯示圖像的一部分,從圖像的中心位置開(kāi)始顯示,直到顯示出圖像的整體。
    在Button1的OnClick事件中加入以下代碼:
    void _fastcall TForm1::Button1Click(TObject *Sender)
    {
    int i,left,top,width,height;
    left = Image1->Left;
    top = Image1->Top;
    width = Image1->Width;
    height = Image1->Height;
    for (i = 0; i <= width; i++){
    //通過(guò)圖像的坐標(biāo)選定圖像的一部分
    Image1->Left = left + (width - i)/2;
    Image1->Top = top + height/2 - i*height/width/2;
    Image1->Width = i;
    Image1->Height = i*height/width;
    Image1->Refresh();
    }
    }
    2.對(duì)于“百葉窗簾”,我們可利用畫(huà)布(Canvas)提供的矩形拷貝(CopyRect)方法在不同畫(huà)布之間進(jìn)行圖像復(fù)制來(lái)實(shí)現(xiàn),該方法聲明如下:
    void _fastcall CopyRect(const Windows::TRect &&Dest, TCanvas*Canvas, const Windows::TRect &&Source);
    把參數(shù)Canvas指定的源畫(huà)布矩形區(qū)域Source復(fù)制到目標(biāo)畫(huà)布Dest的矩形區(qū)域。利用這種方法,再通過(guò)一定的算法,即可實(shí)現(xiàn)“百葉窗簾”的特技顯示。
    在Button2的OnClick事件中加入以下代碼:
    void _fastcall TForm1::Button2Click(TObject *Sender)
    {
    int inum,icount,i,j;
    Graphics::TBitmap *pBitmap = new Graphics::TBitmap();
    pBitmap->Height = Image1->Height;
    pBitmap->Width = Image1->Width;
    inum =16; //這是百葉窗的葉數(shù)
    icount = pBitmap->Height /inum;
    for (i = 1; i < icount; i++)
    for (j = 0; j <= inum; j++){
    pBitmap->Canvas->CopyRect(Rect(0,icount*j + i - 1, pBitmap->Width,icount*j + i),Image1->Canvas, Rect(0, icount*j + i - 1,pBitmap->Width, icount*j + i));
    Form1->Canvas->Draw(Image1->Left,Image1->Top,pBitmap);
    }
    delete pBitmap;
    }
    按F9運(yùn)行以上程序,即可獲得所需要的“百葉窗簾”效果。
    Image圖像控件還提供了另外一些很有用的屬性和方法,大家可以充分利用C++ Builder的幫助,掌握了這些屬性和方法,再利用一些程序算法,就可以隨心所欲地寫(xiě)出各種圖像特技顯示的程序。在我們的應(yīng)用程序開(kāi)發(fā)中,就可以加入這些圖像特技顯示,為我們的應(yīng)用程序增加一些光彩