程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi中的圖形顯示技巧

Delphi中的圖形顯示技巧

編輯:Delphi
  概述
  ----目前在許多學習軟件、游戲光盤中,經常會看到各種
  圖形顯示技巧,憑著圖形的移動、交錯、雨滴狀、百頁窗、積木堆疊等顯現方式,使畫面變得更為生動活潑,更 能吸引觀眾。本文將探討如何在Delphi中實現各種圖形顯示技巧。
  基本原理
  ----在Delphi中,實現一副圖象的顯示是非常簡單的,只要在Form中定義一個TImage組件,設置其picture屬性,然後選 擇任何有效的.ICO、.BMP、.EMF或.WMF文件,進行Load,所選文 件就顯示在TImage組件中了。但這只是直接將圖形顯示在窗體中,毫無技巧可言。為了使圖形顯示具有別具一格的效果,可以按下列步驟實現:
  ----定義一個TImage組件,把要顯示的圖形先裝入到TImage組件中,也就是說,把圖形內容從磁盤載入內存中, 做為圖形緩存。
  ----創建一新的位圖對象,其尺寸跟TImage組件中的圖形一樣。
  ----利用畫布(Canvas)的CopyRect功能(將一個畫布的矩形區域拷貝到另一個畫布的矩形區域),使用技巧,動態形
  成位圖文件內容,然後在窗體中顯示位圖。
  ----實現方法
  下面介紹各種圖形顯示技巧:
  1.推拉效果
  將要顯示的圖形由上、下、左、右方向拉進屏幕內顯示,同時將屏幕上原來的舊圖蓋掉,此種效果可分為四
  種,上拉、下拉、左拉、右拉,但原理都差不多,以上拉 效果為例。
  原理:首先將放在暫存圖形的第一條水平線,搬移至要顯示的位圖的最後一條,接著再將暫存圖形的前兩條水平線,依序搬移至要顯示位圖的最後兩條水平線,然後搬移前三條、前四條???直到全部圖形數據搬完為止。在搬移的過程中即可看到顯示的位圖由下而上浮起,而達到上拉的效果。
  程序算法:
  procedure TForm1.Button1Click(Sender: TObject);
  var
  newbmp: TBitmap;
  i,bmpheight,bmpwidth:integer;
  begin
  newbmp:= TBitmap.Create;
  newbmp.Width:=image1.Width;
  newbmp.Height:=image1.Height;
  bmpheight:=image1.Height;
  bmpwidth:=image1.Width;
  for i:=0 to bmpheight do
  begin
  newbmp.Canvas.CopyRect(Rect
  (0,bmpheight-i,bmpwidth,bmpheight),
  image1.Canvas,
  Rect(0,0,bmpwidth,i));
  form1.Canvas.Draw(120,100,newbmp);
  end;
  newbmp.free;
  end;
  2.垂直交錯效果
  原理:將要顯示的圖形拆成兩部分,奇數條掃描線由上往下搬移,偶數條掃描線的部分則由下往上搬移,而且兩者同時進行。從屏幕上便可看到分別由上下兩端出現的較淡圖形向屏幕中央移動,直到完全清楚為止。
  程序算法:
  procedure TForm1.Button4Click(Sender: TObject);
  var
  newbmp:TBitmap;
  i,j,bmpheight,bmpwidth:integer;
  begin
  newbmp:= TBitmap.Create;
  newbmp.Width:=image1.Width;
  newbmp.Height:=image1.Height;
  bmpheight:=image1.Height;
  bmpwidth:=image1.Width;
  i:=0;
  while i< =bmpheight do
  begin
  j:=i;
  while j >0 do
  begin
  newbmp.Canvas.CopyRect(Rect(0,j-1,bmpwidth,j),
  image1.Canvas,
  Rect(0,bmpheight-i+j-1,bmpwidth,bmpheight-i+j));
  newbmp.Canvas.CopyRect(Rect
  (0,bmpheight-j,bmpwidth,bmpheight-j+1),
  image1.Canvas,
  Rect(0,i-j,bmpwidth,i-j+1));
  j:=j-2;
  end;
  form1.Canvas.Draw(120,100,newbmp);
  i:=i+2;
  end;
  newbmp.free;
  end;
  3.水平交錯效果
  原理:同垂直交錯效果原理一樣,只是將分成兩組後的圖形分別由左右兩端移進屏幕。
  程序算法:
  procedure TForm1.Button5Click(Sender: TObject);
  var
  newbmp:TBitmap;
  i,j,bmpheight,bmpwidth:integer;
  begin
  newbmp:= TBitmap.Create;
  newbmp.Width:=image1.Width;
  newbmp.Height:=image1.Height;
  bmpheight:=image1.Height;
  bmpwidth:=image1.Width;
  i:=0;
  while i< =bmpwidth do
  begin
  j:=i;
  while j >0 do
  begin
  newbmp.Canvas.CopyRect(Rect(j-1,0,j,bmpheight),
  image1.Canvas,
  Rect(bmpwidth-i+j-1,0,bmpwidth-i+j,bmpheight));
  newbmp.Canvas.CopyRect(Rect
  (bmpwidth-j,0,bmpwidth-j+1,bmpheight),
  image1.Canvas,
  Rect(i-j,0,i-j+1,bmpheight));
  j:=j-2;
  end;
  form1.Canvas.Draw(120,100,newbmp);
  i:=i+2;
  end;
  newbmp.free;
  end;
  4.雨滴效果
  原理:將暫存圖形的最後一條掃描線,依序搬移到可視位圖的第一條到最後一條掃描線,讓此條掃描線在屏幕上留下它的軌跡。接著再把暫存圖形的倒數第二條掃描線,依序搬移到可視位圖的第一條到倒數第二條掃描線。其余的掃描線依此類推。
  程序算法:
  procedure TForm1.Button3Click(Sender: TObject);
  var
  newbmp:TBitmap;
  i,j,bmpheight,bmpwidth:integer;
  begin
  newbmp:= TBitmap.Create;
  newbmp.Width:=image1.Width;
  newbmp.Height:=image1.Height;
  bmpheight:=image1.Height;
  bmpwidth:=image1.Width;
  for i:=bmpheight downto 1 do
  for j:=1 to i do
  begin
  newbmp.Canvas.CopyRect(Rect(0,j-1,bmpwidth,j),
  image1.Canvas,
  Rect(0,i-1,bmpwidth,i));
  form1.Canvas.Draw(120,100,newbmp);
  end;
  newbmp.free;
  end;
  5.百葉窗效果
  原理:將放在暫存圖形的數據分成若干組,然後依次從第一組到最後一組搬移,第一次每組各搬移第一條掃描線到可視位圖的相應位置,第二次搬移第二條掃描線,接著搬移第三條、第四條掃描線.
  程序算法:
  procedure TForm1.Button6Click(Sender: TObject);
  var
  newbmp:TBitmap;
  i,j,bmpheight,bmpwidth:integer;
  xgroup,xcount:integer;
  begin
  newbmp:= TBitmap.Create;
  newbmp.Width:=image1.Width;
  newbmp.Height:=image1.Height;
  bmpheight:=image1.Height;
  bmpwidth:=image1.Width;
  xgroup:=16;
  xcount:=bmpheight div xgroup;
  for i:=0 to xcount do
  for j:=0 to xgroup do
  begin
  newbmp.Canvas.CopyRect(Rect
  (0,xcount*j+i-1,bmpwidth,xcount*j+i),
  image1.Canvas,
  Rect(0,xcount*j+i-1,bmpwidth,xcount*j+i));
  form1.Canvas.Draw(120,100,newbmp);
  end;
  newbmp.Free;
  end;
  6.積木效果
  原理:是雨滴效果的一種變化,不同之處在於,積木效果每次搬移的是一塊圖形,而不只是一根掃描線。
  程序算法:
  procedure TForm1.Button7Click(Sender: TObject);
  var
  newbmp:TBitmap;
  i,j,bmpheight,bmpwidth:integer;
  begin
  newbmp:= TBitmap.Create;
  newbmp.Width:=image1.Width;
  newbmp.Height:=image1.Height;
  bmpheight:=image1.Height;
  bmpwidth:=image1.Width;
  i:=bmpheight;
  while i>0 do
  begin
  for j:=10 to i do
  begin
  newbmp.Canvas.CopyRect(Rect(0,j-10,bmpwidth,j),
  image1.Canvas,
  Rect(0,i-10,bmpwidth,i));
  form1.Canvas.Draw(120,100,newbmp);
  end;
  i:=i-10;
  end;
  newbmp.free;
  end;
  結束語
  上述圖形顯示效果均已上機通過,軟件環境Delphi 3.0 ,硬件環境Pentium 100M兼容機。使用效果很好。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved