首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 實作圖像放大鏡功能:以 StretchBlt 打造局部放大效果

     編輯:Delphi

在許多看圖軟體中,滑鼠游標所指位置的局部放大鏡功能是標準配備。本文將示範如何在 Delphi 中利用 StretchBlt API 函數,以極少量的程式碼快速實作這項功能。

元件佈局與準備

在表單上放置兩個 TImage 元件:

  • Image1:作為原始圖片的顯示載體,載入欲觀察的圖像。
  • Image2:作為放大鏡視窗,顯示滑鼠指標下的放大影像。

完成佈局後的表單如下圖所示:

圖 1:元件佈局完成的表單

核心程式碼:滑鼠移動事件

整個放大邏輯集中在 Image1 的 OnMouseMove 事件中:

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  // 以滑鼠為中心,取 40x40 區域放大至 Image2 尺寸
  StretchBlt(Image2.Canvas.Handle, 0, 0, Image2.Width, Image2.Height,
    Image1.Canvas.Handle, X - 20, Y - 20, 40, 40, SRCCOPY);
  Image2.Refresh; // 強制重繪

  // 切換滑鼠游標為放大鏡樣式
  Screen.Cursors[1] := LoadCursorFromFile('MAGNIFY.CUR');
  Self.Cursor := 1;
end;

搭配表單的 OnMouseMove 事件,當滑鼠移出 Image1 範圍時恢復預設游標:

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  Screen.Cursors[1] := crDefault;
  Self.Cursor := 1;
end;

完整單元程式碼

unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;
type
  TForm1 = class(TForm)
    Image1: TImage;
    Image2: TImage;
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  StretchBlt(Image2.Canvas.Handle, 0, 0, Image2.Width, Image2.Height,
    Image1.Canvas.Handle, X - 20, Y - 20, 40, 40, SRCCOPY);
  Image2.Refresh;
  Screen.Cursors[1] := LoadCursorFromFile('MAGNIFY.CUR');
  Self.Cursor := 1;
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  Screen.Cursors[1] := crDefault;
  Self.Cursor := 1;
end;
end.

執行結果

按 F9 執行專案,滑鼠在 Image1 上移動時,Image2 會即時顯示對應區域的放大影像,效果如下:

圖 2:程式執行畫面,放大鏡跟隨滑鼠移動

小結

本範例展示了以 StretchBlt 實作高效能圖像局部放大的技巧。程式碼精簡、執行效率高,且易於整合至現有專案中,是開發看圖軟體或影像檢視工具的實用基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved