熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

程序開發小技巧:Delphi中的圖形顯示技巧

2013-11-11 21:04:12  來源: Delphi編程 
目前在許多學習軟件游戲光盤中經常會看到各種圖形顯示技巧憑著圖形的移動交錯雨滴狀百頁窗積木堆疊等顯現方式使畫面變得更為生動活潑更能吸引觀眾本文將探討如何在Delphi中實現各種圖形顯示技巧
  
  一基本原理
  在Delphi中實現一副圖像的顯示是非常簡單的只要在Form中定義一個TImage組件設置其picture屬性然後選擇任何有效的ICOBMPEMF或WMF文件進行Load所選文件就顯示在TImage組件中了但這只是直接將圖形顯示在窗體中毫無技巧可言為了使圖形顯示具有別具一格的效果可以按下列步驟實現
  
  定義一個TImage組件把要顯示的圖形先裝入到TImage組件中也就是說把圖形內容從磁盤載入內存中作為圖形緩存
  
  創建一新的位圖對象其尺寸跟TImage組件中的圖形一樣
  
  利用畫布(Canvas)的CopyRect功能(將一個畫布的矩形區域拷貝到另一個畫布的矩形區域)使用一定技巧動態形成位圖文件內容然後在窗體中顯示位圖
  
  二實現方法
  下面介紹各種圖形顯示技巧
  
  推拉效果
  
  將要顯示的圖形由上右方向拉進屏幕內顯示同時將屏幕上原來的舊圖覆蓋掉此種效果可分為四種上拉下拉左拉右拉但原理都差不多以上拉效果為例
  
  原理首先將放在暫存圖形的第一條水平線搬移至要顯示的位圖的最後一條接著再將暫存圖形的前兩條水平線依序搬移至要顯示位圖的最後兩條水平線然後搬移前三條前四條直到全部圖形數據搬完為止在搬移的過程中即可看到顯示的位圖由下而上浮起而達到上拉的效果
  
  程序算法
  
  procedure TFormButtonClick(Sender: TObject);
  
  var
  
  newbmp: TBitmap;
  
  ibmpheightbmpwidth:integer;
  
  begin
  
  newbmp:= TBitmapCreate;
  
  newbmpWidth:=imageWidth;
  
  newbmpHeight:=imageHeight;
  
  bmpheight:=imageHeight;
  
  bmpwidth:=imageWidth;
  
  for i:= to bmpheight do
  
  begin
  
  newbmpCanvasCopyRect(Rect
  
  (bmpheight-ibmpwidthbmpheight)
  
  imageCanvas
  
  Rect(bmpwidthi));
  
  formCanvasDraw(newbmp);
  
  end;
  
  newbmpfree;
  
  end;
  
  垂直交錯效果
  
  原理將要顯示的圖形拆成兩部分奇數條掃描線由上往下搬移偶數條掃描線則由下往上搬移而且兩者同時進行從屏幕上便可看到分別由上下兩端出現的較淡圖形向屏幕中央移動直到完全清楚為止
  
  程序算法
  
  procedure TFormButtonClick(Sender: TObject);
  
  var
  
  newbmp:TBitmap;
  
  ijbmpheightbmpwidth:integer;
  
  begin
  
  newbmp:= TBitmapCreate;
  
  newbmpWidth:=imageWidth;
  
  newbmpHeight:=imageHeight;
  
  bmpheight:=imageHeight;
  
  bmpwidth:=imageWidth;
  
  i:=;
  
  while i< =bmpheight do
  
  begin
  
  j:=i;
  
  while j > do
  
  begin
  
  newbmpCanvasCopyRect(Rect(j-bmpwidthj)
  
  imageCanvas
  
  Rect(bmpheight-i+j-bmpwidthbmpheight-i+j));
  
  newbmpCanvasCopyRect(Rect
  
  (bmpheight-jbmpwidthbmpheight-j+)
  
  imageCanvas
  
  Rect(i-jbmpwidthi-j+));
  
  j:=j-;
  
  end;
  
  formCanvasDraw(newbmp);
  
  i:=i+;
  
  end;
  
  newbmpfree;
  
  end;
  
  水平交錯效果
  
  同垂直交錯效果原理一樣只是將分成兩組後的圖形分別由左右兩端移進屏幕程序算法從略
  
  雨滴效果
  
  原理將暫存圖形的最後一條掃描線依序搬移到可視位圖的第一條到最後一條掃描線讓此條掃描線在屏幕上留下它的軌跡接著再把暫存圖形的倒數第二條掃描線依序搬移到可視位圖的第一條到倒數第二條掃描線其余的掃描線依此類推
  
  程序算法
  
  procedure TFormButtonClick(Sender: TObject);
  
  var
  
  newbmp:TBitmap;
  
  ijbmpheightbmpwidth:integer;
  
  begin
  
  newbmp:= TBitmapCreate;
  
  newbmpWidth:=imageWidth;
  
  newbmpHeight:=imageHeight;
  
  bmpheight:=imageHeight;
  
  bmpwidth:=imageWidth;
  
  for i:=bmpheight downto do
  
  for j:= to i do
  
  begin
  
  newbmpCanvasCopyRect(Rect(j-bmpwidthj)
  
  imageCanvas
  
  Rect(i-bmpwidthi));
  
  formCanvasDraw(newbmp);
  
  end;
  
  newbmpfree;
  
  end;
  
  百葉窗效果
  
  原理將放在暫存圖形的數據分成若干組然後依次從第一組到最後一組搬移第一次每組各搬移第一條掃描線到可視位圖的相應位置第二次搬移第二條掃描線接著搬移第三條第四條掃描線其余掃描線依此類推
  
  程序算法
  
  procedure TFormButtonClick(Sender: TObject);
  
  var
  
  newbmp:TBitmap;
  
  ijbmpheightbmpwidth:integer;
  
  xgroupxcount:integer;
  
  begin
  
  newbmp:= TBitmapCreate;
  
  newbmpWidth:=imageWidth;
  
  newbmpHeight:=imageHeight;
  
  bmpheight:=imageHeight;
  
  bmpwidth:=imageWidth;
  
  xgroup:=;
  
  xcount:=bmpheight div xgroup;
  
  for i:= to xcount do
  
  for j:= to xgroup do
  
  begin
  
  newbmpCanvasCopyRect(Rect
  
  (xcount*j+i-bmpwidthxcount*j+i)
  
  imageCanvas
  
  Rect(xcount*j+i-bmpwidthxcount*j+i));
  
  formCanvasDraw(newbmp);
  
  end;
  
  newbmpFree;
  
  end;
From:http://tw.wingwit.com/Article/program/Delphi/201311/8405.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.