• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

        C++ Builder 中的圖像顯示技巧

        C++ Builder 中的圖像顯示技巧

        更新時(shí)間:2022-05-09 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

        文/黃建志

          在C++ Builder中,實(shí)現(xiàn)一幅圖像的顯示非常簡單,只要在Form窗體中定義一個(gè)TImage組件,設(shè)置其Picture屬性,然后選擇任何有效的.ico、.bmp、.emf或.wwf文件,加載進(jìn)來,所選文件就顯示在TImage組件中。但這只是直接將圖形顯示在窗體中,毫無技巧可言,給人感覺是一種枯燥乏味。為了使圖形顯示有別具一格的效果。按下列步驟實(shí)現(xiàn):

          1、 定義一個(gè)TImage組件,把要顯示的圖形先加載到TImage組件中,也就是說,把圖  
        形內(nèi)容從磁盤載入內(nèi)存中,作為圖形緩存。

          2、 創(chuàng)建一新的位圖對象,其尺寸跟TImage組件中的圖形一樣。

          3、 利用畫布(Canvas)的CopyRect功能(將一個(gè)畫布的矩形區(qū)域拷貝到另一個(gè)畫布的矩形區(qū)域),以達(dá)到動(dòng)態(tài)顯示位圖。

          下面介紹各種圖形顯示技巧的具體實(shí)現(xiàn)方法。

          上拉效果


        圖1

          實(shí)現(xiàn)原理:首先將暫存圖形的第一條水平線,搬移至要顯示位圖的最后一條,接著再將暫存圖形的前兩條水平線,依次搬移至要顯示位圖的最后兩條水平線,然后搬移前三條、前四條直到全部圖形數(shù)據(jù)搬完為止。在搬移的過程中即可看到顯示的位圖由下而上浮起,而達(dá)到上拉的效果(如圖1)。

          程序算法:

          void _fastcall TFor-

          m1::Button1Click(TObject *Sender)

           {int i,width,height;

          Graphics::TBitmap *newbmp;

          newbmp=new Graphics::TBitmap;

          newbmp-〉Width=Image1-〉Width;

          newbmp-〉Height=Image1-〉Height;

          width=Image1-〉Width;

          height=Image1-〉Height;

          for(i=0;i

          {newbmp-〉Canvas-〉CopyRect(Rect(0,height-i,width,height),

          Image1-〉Canvas,Rect(0,0,width,i));

          Form1-〉Canvas-〉Draw(10,10,newbmp);}

          delete newbmp;}

          從左向右平鋪顯示效果


        圖2

          實(shí)現(xiàn)原理:首先將暫存圖形的最后一條豎線,搬移至要顯示位圖的第一條豎線,接著再將暫存圖形的最后兩條豎線,依序搬移至要顯示位圖的前兩條豎線,然后搬移最后三條、四條豎線直到全部圖形數(shù)據(jù)搬完為止。在搬移的過程中即可看到顯示的位圖由左向右浮起,而達(dá)到從左向右平鋪顯示的效果(如圖2)。

          程序算法:

          void _fastcall TForm1::Button2Click(TObject *Sender)

          {int i,width,height;

          Graphics::TBitmap *newbmp;

          newbmp=new Graphics::TBitmap;

          newbmp-〉Width=Image1-〉Width;

          newbmp-〉Height=Image1-〉Height;

          width=Image1-〉Width;

          height=Image1-〉Height;

          for(i=0;i<=width;i++)

          { newbmp-〉Canvas-〉

          CopyRect(Rect(0,0,i,height),

          Image1-〉Canvas,Rect(width-i,0,width,height));

          Form1-〉Canvas-〉Draw(10,10,newbmp); }

          delete newbmp;}

          垂直交錯(cuò)效果


        圖3

          實(shí)現(xiàn)原理:將要顯示的圖形拆成兩部分,奇數(shù)條掃描線由上往下搬移,偶數(shù)條掃描線則由下往上搬移,而且兩者同時(shí)進(jìn)行。便可看到分別由上下兩端出現(xiàn)的較淡圖形向屏幕中央移動(dòng),直到完全清楚為止(如圖3)。

          程序算法:

          void __fastcall TForm1::BitBtn3Click(TObject *Sender)

          {Graphics::TBitmap *newbmp;

          int i,j,height,width;

          newbmp=new Graphics::TBitmap;

          newbmp-〉Width=Image1-〉Width;

          newbmp-〉Height=Image1-〉Height;

          height=Image1-〉Height;

          width=Image1-〉Width;

          i=0;

          while(i<=height)

          {for(j=0;j

          {newbmp-〉Canvas-〉CopyRect(Rect(j*2,0,j*2+1,i),Image1-〉Canvas,

          Rect(j*2,0,j*2+1,i));

          newbmp-〉Canvas-〉CopyRect(Rect(j*2+1,height,j*2+2,height-i),

          Image1-〉Canvas, Rect(j*2+1,height,j*2+2,height-i)); }

          Form1-〉Canvas-〉Draw(10,10,newbmp);

          i+=2; }

          delete newbmp;}

          水平交錯(cuò)效果


        圖4

          實(shí)現(xiàn)原理:同垂直交錯(cuò)效果原理一樣,將要顯示的圖形拆成兩部分,奇數(shù)條掃描線由左往右搬移,偶數(shù)條掃描線則由右往左搬移,兩者同時(shí)進(jìn)行。從屏幕上便可看到分別由左右兩端出現(xiàn)的較淡圖形向屏幕中央移動(dòng),直到完全清楚為止(如圖4)。

          程序算法:

          void __fastcall TForm1::BitBtn4Click(TObject *Sender)

          {int i,j,height,width;

          Graphics::TBitmap *newbmp;

          newbmp=new Graphics::TBitmap;

          newbmp-〉Width=Image1-〉Width;

          newbmp-〉Height=Image1-〉Height;

          height=Image1-〉Height;

          width=Image1-〉Width;

          i=0;

          while(i<=height)

          {for(j=0;j

          {newbmp-〉Canvas-〉CopyRect(Rect(0,j*10,i,j*10+5),Image1-〉Canvas,

          Rect(0,j*10,i,j*10+5));

          newbmp-〉Canvas-〉CopyRect(Rect(width-i,j*10+5,width,j*10+10),

          Image1-〉Canvas, Rect(width-i,j*10+5,width,j*10+10)); }

          Form1-〉Canvas-〉Draw(10,10,newbmp);

          i+=2; }

          delete newbmp;}

          從左到右圓筒滾動(dòng)效果


        圖5

          實(shí)現(xiàn)原理:圖形復(fù)制過程中,把目標(biāo)圖形的坐標(biāo)按照曲線方式移動(dòng),以達(dá)到圓筒滾動(dòng)效果(如圖5)。

          程序算法:

          void __fastcall TForm1::BitBtn5Click(TObject *Sender)

          {int i,j,height,width;

          Graphics::TBitmap *newbmp;

          newbmp=new Graphics::TBitmap;

          newbmp-〉Width=Image1-〉Width;

          newbmp-〉Height=Image1-〉Height;

          height=Image1-〉Height;

          width=Image1-〉Width;

          i=0;

          int intr=50;

          for(i=0;i<=width;i+=5)

          {for(j=1;j<=2*intr;j++)

          {newbmp-〉Canvas-〉CopyRect(Rect(i+j,-sqrt(2*intr*j-j*j),i+j+1,-sqrt(2*intr*j-j*j)+height),Image1-〉Canvas,Rect(i+j,0,i+j+1,height));}

          newbmp-〉Canvas-〉CopyRect(Rect(i,0,i+5,height),Image1-〉Canvas,Rect(i,0,i+5,height));

          Form1-〉Canvas-〉Draw(10,10,newbmp);

          Sleep(10); }}

          所有程序算法都在C++ Builder 4.0和5.0調(diào)試通過。 

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統(tǒng)下載排行

        主站蜘蛛池模板: 色噜噜亚洲男人的天堂| 亚洲无码视频在线| 亚洲网址在线观看| 久9久9精品免费观看| 亚洲日韩欧洲无码av夜夜摸| 日本黄页网址在线看免费不卡| 四虎影视永久免费视频观看| 美女被免费视频网站| 亚洲人成网站在线观看青青| 二区久久国产乱子伦免费精品| 久久精品亚洲福利| 少妇太爽了在线观看免费视频| 18gay台湾男同亚洲男同| 国产大片免费网站不卡美女| 亚洲中文无码a∨在线观看| 女人18毛片水最多免费观看| 亚洲国产成人AV网站| 亚洲国产一级在线观看 | 99re热精品视频国产免费| 亚洲精品韩国美女在线| 免费精品人在线二线三线区别| 亚洲乱理伦片在线观看中字| 亚洲乱码日产精品a级毛片久久 | 国产精品99精品久久免费| 亚洲精品国产第1页| 韩国日本好看电影免费看| 日韩久久无码免费毛片软件| 亚洲国产精品乱码一区二区| 波多野结衣免费在线观看| 国产亚洲精品精品精品| 亚洲精品无码成人片久久| 国产成人精品久久免费动漫| 亚洲av无码片vr一区二区三区| 亚洲无码精品浪潮| 2021免费日韩视频网| 老妇激情毛片免费| 亚洲神级电影国语版| 四虎AV永久在线精品免费观看| 精品国产污污免费网站| 亚洲欧美自偷自拍另类视| 国产亚洲欧洲精品|