怎么将一个图象局部放大??? (40分)

  • 主题发起人 主题发起人 songjy
  • 开始时间 开始时间
S

songjy

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么将一个图象局部放大?象放大镜一样,谢谢!!
 
canvas.StretchDraw();
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
BackImage: TImage;
ForeImage: TImage;
procedure FormCreate(Sender: TObject);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure ForeImageMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure ImageCopy(BoxCenterX, BoxCenterY, BoxSide: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
msHide: Boolean; //鼠标隐藏标志
OldX, OldY, NewX, NewY: Integer; //放大部位的坐标
DestRect, SourceRect : TRect;
const
sSide=30; //在源图像上截取的图像块大小
dSide=45; //在目标图像上显示的放大后的图像大小

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
msHide:=True;
Canvas.CopyMode:=cmSrcCopy;
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
Close; //按下键盘任意键退出
end;

procedure TForm1.ImageCopy(BoxCenterX, BoxCenterY, BoxSide: Integer);
begin
with SourceRect do
begin
Left:=BoxCenterX-BoxSide;
Top:=BoxCenterY-BoxSide;
Right:=BoxCenterX+BoxSide;
Bottom:=BoxCenterY+BoxSide;
end;

with DestRect do
begin
Left:=BoxCenterX-dSide;
Top:=BoxCenterY-dSide;
Right:=BoxCenterX+dSide;
Bottom:=BoxCenterY+dSide;
end;

ForeImage.Canvas.CopyRect(DestRect, BackImage.Canvas, SourceRect);
end;

procedure TForm1.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;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if not msHide then
begin
msHide:=True;
ShowCursor(True);
ImageCopy(OldX, OldY, dSide);
end;
end;
end.
 
可以给分了吧,delphi6调试成功
 
谢谢!!!!!!!!!!!11
 
后退
顶部