程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi圖片局部放大查看程序代碼設計分析

Delphi圖片局部放大查看程序代碼設計分析

編輯:Delphi

Delphi圖片局部放大查看程序代碼設計分析,(1)程序的關鍵是如何實現局部圖像的放大,我們利用OnMouseMove 事件可以獲得鼠標所在位置的坐標,使用CopyRect 函數對相關位置的圖像進行拷貝,然後對該坐標值進行算法處理,即可達到目的。代碼如下:

{實現復制圖像的過程}
procedure TMainForm.ImageCopy(CenterX, CenterY, Side: Integer);
begin
with Source do
begin//獲取圖像的像素信息
Left:=CenterX-Side;
Top:=CenterY-Side;
Right:=CenterX+Side;
Bottom:=CenterY+Side;
end;
with Dest do
begin//復制圖像相關像素
Left:=CenterX-dSide;
Top:=CenterY-dSide;
Right:=CenterX+dSide;
Bottom:=CenterY+dSide;
end;
ForeImage.Canvas.CopyRect(Dest, BackImage.Canvas, Source);//復制圖像
end;
{放大圖像}
procedure TMainForm.ForeImageMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
NewX:=X;//鼠標位置
NewY:=Y;
if msHide then
begin
OldX:=NewX;
OldY:=NewY;
msHide:=False;
ShowCursor(False);//隱藏鼠標
end
else
begin
ImageCopy(OldX, OldY, dSide);// 復制圖像
end;
ImageCopy(NewX, NewY, sSide);//放大圖像
OldX:=NewX;
OldY:=NewY;
end;

(2)在圖像上雙擊鼠標左鍵,使光標可見,同時使程序中幾個控制按鈕變為可見。代碼如下:

procedure TMainForm.ForeImageDblClick(Sender: TObject);
begin
showcursor(true);//顯示鼠標
exit.Visible:=true;//激活窗體中的按鈕
open.Visible:=true;
about.Visible:=true;
end;

(3)點擊“打開”按鈕,可以導入選定的圖像文件,同時窗體中的控制按鈕變為不可見,代碼如下:

procedure TMainForm.openClick(Sender: TObject);
begin
mainForm.OpenPictureDialog1.Title:=’請選擇一個圖像文件打開’;
//打開對話框的標題
mainForm.OpenPictureDialog1.InitialDir:=’C:\My Documents\My Pictures’;
//打開文件的路徑
if mainForm.OpenPictureDialog1.Execute then
mainForm.foreImage.Picture.LoadFromFile(mainForm.OpenPicturedialog1.FileName);
//導入圖像文件
mainForm.backImage.Picture.LoadFromFile(mainForm.OpenPicturedialog1.FileName);
showcursor(False);
exit.Visible:=False;//使窗體中的按鈕不可見
open.Visible:=False;
about.Visible:=False;
end;

Delphi圖片局部放大查看程序完整代碼:

vIEw source print? 001 unit Unit1; 002 interface 003 uses 004 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 005 ExtCtrls, StdCtrls, Buttons, ExtDlgs; 006 type 007 TMainForm = class(TForm) 008 FramePanel: TPanel; 009 BackImage: TImage; 010 ForeImage: TImage; 011 OpenPictureDialog1: TOpenPictureDialog; 012 open: TBitBtn; 013 exit: TBitBtn; 014 about: TBitBtn; 015 procedure FormCreate(Sender: TObject); 016 procedure ForeImageMouseMove(Sender: TObject; Shift: TShiftState; X, 017 Y: Integer); 018 procedure exitClick(Sender: TObject); 019 procedure ForeImageDblClick(Sender: TObject); 020 procedure openClick(Sender: TObject); 021 procedure aboutClick(Sender: TObject); 022 procedure FormClick(Sender: TObject); 023 private 024 { Private declarations } 025 public 026 procedure ImageCopy(CenterX, CenterY, Side: Integer); 027 { Public declarations } 028 end; 029 var 030 MainForm: TMainForm; 031 implementation 032 const 033 sSide=30; 034 dSide=45; 035 var 036 msHide: Boolean; 037 OldX, OldY, NewX, NewY: Integer; 038 Dest, Source : TRect; 039 {$R *.DFM} 040 procedure TMainForm.FormCreate(Sender: TObject); 041 begin 042 msHide:=True; 043 Canvas.CopyMode:=cmSrcCopy //復制模式 044 end; 045 {實現復制圖像的過程} 046 procedure TMainForm.ImageCopy(CenterX, CenterY, Side: Integer); 047 begin 048 with Source do 049 begin//獲取圖像的像素信息 050 Left:=CenterX-Side; 051 Top:=CenterY-Side; 052 Right:=CenterX+Side; 053 Bottom:=CenterY+Side; 054 end; 055 with Dest do 056 begin//復制圖像相關像素 057 Left:=CenterX-dSide; 058 Top:=CenterY-dSide; 059 Right:=CenterX+dSide; 060 Bottom:=CenterY+dSide; 061 end; 062 ForeImage.Canvas.CopyRect(Dest, BackImage.Canvas, Source);//復制圖像 063 end; 064 {放大圖像} 065 procedure TMainForm.ForeImageMouseMove(Sender: TObject; Shift: TShiftState; 066 X, Y: Integer); 067 begin 068 NewX:=X;//鼠標位置 069 NewY:=Y; 070 if msHide then 071 begin 072 OldX:=NewX; 073 OldY:=NewY; 074 msHide:=False; 075 ShowCursor(False);//隱藏鼠標 076 end 077 else 078 begin 079 ImageCopy(OldX, OldY, dSide);//復制圖像 080 end; 081 ImageCopy(NewX, NewY, sSide);//放大圖像 082 OldX:=NewX; 083 OldY:=NewY; 084 end; 085 procedure TMainForm.exitClick(Sender: TObject); 086 begin 087 close;//關閉窗體,退出程序 088 end; 089 procedure TMainForm.ForeImageDblClick(Sender: TObject); 090 begin 091 showcursor(true);//顯示鼠標 092 exit.Visible:=true;//激活窗體中的按鈕 093 open.Visible:=true; 094 about.Visible:=true; 095 end; 096 procedure TMainForm.openClick(Sender: TObject); 097 begin 098 mainForm.OpenPictureDialog1.Title:=’請選擇一個圖像文件打開’; 099 //打開對話框的標題 100 mainForm.OpenPictureDialog1.InitialDir:=’C:\My Documents\My Pictures’; 101 //打開文件的路徑 102 if mainForm.OpenPictureDialog1.Execute then 103 mainForm.foreImage.Picture.LoadFromFile(mainForm.OpenPicturedialog1.FileName); 104 //導入圖像文件 105 mainForm.backImage.Picture.LoadFromFile(mainForm.OpenPicturedialog1.FileName); 106 showcursor(False); 107 exit.Visible:=False;//使窗體中的按鈕不可見 108 open.Visible:=False; 109 about.Visible:=False; 110 end; 111 {窗體的關於信息} 112 procedure TMainForm.aboutClick(Sender: TObject); 113 begin 114 messagedlg(’歡迎使用圖片放大浏覽工具※2001 年。’+ 115 ’ 聯系方式:huolong@263.net。’,mtinFormation,[mbok],0); 116 end; 117 {點擊窗體給出提示信息} 118 procedure TMainForm.FormClick(Sender: TObject); 119 begin 120 messagedlg(’在圖片上雙擊鼠標左鍵可以打開控制按鈕:)’,mtinFormation, 121 [mbok],0); 122 end; 123 end.
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved