程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi 動態圖像的實現思路+代碼分析

Delphi 動態圖像的實現思路+代碼分析

編輯:Delphi

用Delphi實現圖像的動態演示效果,用鼠標點擊窗體中的各個按鈕,可以導入一幅圖像,並按相應的方式動態顯示圖像。點擊“清屏”按鈕,窗體圖像消失,點擊“退出”按鈕,退出程序。程序運行界面如下圖所示。

Delphi 動態圖像的實現思路+代碼分析

實現思路:在Delphi 中,實現一副圖像的顯示是非常簡單的,只要在Form 中定義一個Image 控件,設置其picture 屬性,然後選擇任何有效的.ico、.bmp、.emf 或.wmf 文件,進行load,所選文件就顯示在Image 控件中了。但這只是直接將圖形顯示在窗體中,毫無技巧可言。為了使圖像顯示達到別具一格的效果,就需要用到一些特殊的技巧。這是一個對圖像文件的顯示方式和顯示過程進行控制的實例。它利用了許多基本圖像操作函數, 如LoadFromFile()、BitBlt()等。

具體的設計步驟:

圖形顯示所需效果,可以按下列步驟實現:先定義一個Image 控件,把要顯示的圖形裝入到Image 控件中,也就是說,把圖形內容從磁盤載入內存中,作為圖形緩存;然後創建一個新的位圖對象,其尺寸跟Image 控件中的圖像一樣;再利用畫布(Canvas)的Copyrect 功能(將一個畫布的矩形區域拷貝到另一個畫布的矩形區域),使用技巧,動態形成位圖文件內容,然後在窗體中顯示位圖。

1.新建工程

(1)啟動Delphi 6.0 程序。選擇“文件”菜單下的“新建”命令,從彈出的子菜單中選擇Application 選項,則出現新建工程的Form1 窗口。

(2)選擇“文件”菜單下的“工程另存為”命令,彈出Save Unit1 As 對話框。在“保存在”列表框中選擇需要存放該窗口文件所在的目錄名;在“文件名”編輯框中填寫文件名,這裡填寫“Unit1”,點擊“保存”按鈕,保存上面的選項。

(3)執行上一步後,將彈出“工程另存為”對話框。在“保存在”列表框中選擇需要存放該工程的目錄名,最好和第(2)步選取相同的目錄;在“文件名”編輯框中填寫保存處理該工程的源代碼的文件名,這裡填寫“Project1”,點擊“保存”按鈕,保存上面的選項。

2.相關配置:

(1)激活Unit1 窗口,在“屬性”面板中設置該窗體的Caption 屬性為“動態圖像特效”,Name 屬性為“Form1”。

(2)選擇“標准”頁上的Button 選項,在窗體中添加6 個Button 控件。在“屬性”面板中設置其Caption 屬性分別為“從中心到四周”、“從左上角到右下角”、“從左到右”、“從中間到左右兩側”、“清屏”和“退出”。

下面對代碼進行分析:

(1)要實現圖像從中心到四周顯示的效果,需要考慮這幾個部分:先隱藏所有按鈕,接著清屏,然後創建一個圖像對象並導入圖像,再逐條將圖像賦值給窗體的畫布(Canvas),最後釋放圖像對象並顯示所有按鈕。代碼如下:

// 從中心到四周顯示圖像
procedure TForm1.Button1Click(Sender: TObject);
var
I:Integer;
begin
HideButtons(Sender);//隱藏所有按鈕
Button5Click(Sender);//清屏
Bitmap:=Tbitmap.Create;//創建圖像對象
Bitmap.LoadFromFile(BMPFileName);//導入圖像對象
X0:=Width div 2;
Y0:=Height div 2;
RatioX:=Bitmap.Width/Step;
RatioY:=Bitmap.Height/Step;
for I:=0 to Step do
begin
MidX:=Round(RatioX*I*0.5);
MidY:=Round(RatioY*I*0.5);
BitBlt(Form1.Canvas.Handle,X0-MidX,Y0-MidY,Round(RatioX*I),Round(RatioY*I)
,Bitmap.Canvas.Handle,X0-MidX,Y0-MidY,srccopy);//圖像從中心到四周顯示
end;
Bitmap.Free;//釋放圖像對象
ShowButtons(Sender);//顯示所有按鈕
end;

(2)其他各種情況下,圖像的動態顯示效果考慮的步驟和(1)類似,以圖像從左上角到右下角顯示為例來說明:

// 從左上角到右下角顯示圖像
procedure TForm1.Button2Click(Sender: TObject);
var
I:Integer;
begin
HideButtons(Sender);//隱藏所有按鈕
Button5Click(Sender);//清屏
Bitmap:=Tbitmap.Create;//創建圖像對象
Bitmap.LoadFromFile(BMPFileName);//導入圖像對象
RatioX:=Bitmap.Width/Step;
RatioY:=Bitmap.Height/Step;
for I:=0 to Step do
begin
BitBlt(Form1.Canvas.Handle,0,0,Round(RatioX*I*1),Round(RatioY*I*1),
Bitmap.Canvas.Handle,0,0,srccopy);//從左上角到右下角顯示圖像
end;
Bitmap.Free;//釋放圖像對象
ShowButtons(Sender);//顯示所有按鈕
end;

(3)(1)和(2)中均用到了兩個函數HideButtons(Sender)和ShowButtons(Sender),它們的作用分別是隱藏所有按鈕和顯示所有按鈕,代碼如下:

procedure TForm1.HideButtons(Sender: Tobject);
//使窗體上按鈕不可見
begin
Button1.Visible:=False;
Button2.Visible:=False;
Button3.Visible:=False;
Button4.Visible:=False;
Button5.Visible:=False;
Button6.Visible:=False;
end;
procedure TForm1.ShowButtons(Sender: Tobject);
//使窗體上按鈕可見
begin
Button1.Visible:=True;
Button2.Visible:=True;
Button3.Visible:=True;
Button4.Visible:=True;
Button5.Visible:=True;
Button6.Visible:=True;
end;
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved