我是这的程序.放大,缩小已做好了,就差图像漫游了~~
那个高手帮帮忙!~~~unit UShow; //show pictureinterfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, jpeg, ComCtrls, ImgList, ToolWin;type
TShowPicture = class(TForm)
Image1: TImage;
StatusBar1: TStatusBar;
ImageList1: TImageList;
ToolBar1: TToolBar;
ZoomIn: TToolButton;
ZoomOut: TToolButton;
Panel1: TPanel;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure ZoomInClick(Sender: TObject);
procedure ZoomOutClick(Sender: TObject);
procedure ToolButton2Click(Sender: TObject);
private
{ Private declarations }
Jpeg:TJPEGImage; //传递参数
bmp,backbmp:TBitmap;
FBeginDragPoint:TPoint;//记录鼠标开始拖动的位置
FBeginDragSBPoint:TPoint;//记录"中心点"位置
FBeginDrag:Boolean;//是否以经开始"拖动" public
{ Public declarations }
procedure Add(myjpeg:TJPEGImage);
end;var
ShowPicture: TShowPicture;implementation{$R *.dfm}
//图像传递
procedure TShowPicture.Add(myjpeg:TJPEGImage);
begin
Jpeg.Assign(myjpeg);
Image1.Picture.Assign(jpeg);
sw:=Image1.Picture.Width;sh:=Image1.Picture.Height;end;procedure TShowPicture.FormCreate(Sender: TObject);
begin
jpeg:=TJPEGImage.Create;
bmp:=TBitmap.Create;
backbmp:=TBitmap.Create;
PZoom:=1;
pw:=Image1.Width;ph:=Image1.Height;
FBeginDrag:=False;
end;procedure TShowPicture.FormDestroy(Sender: TObject);
begin
Jpeg.Free;
bmp.Free;
backbmp.Free;
end;procedure TShowPicture.Image1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
FBeginDrag:=True;
FBeginDragPoint.X:=X;
FBeginDragPoint.Y:=Y;end;procedure TShowPicture.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
FBeginDrag:=False;
end;
//图像漫游
procedure TShowPicture.Image1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
if not FBeginDrag then exit;end;//放大按钮
procedure TShowPicture.ZoomInClick(Sender: TObject);
begin
// backbmp:=TBitmap.Create;
// Image1.Picture.Graphic.Assign(jpeg);
backbmp.Assign(Image1.Picture.Graphic);
if Image1.Picture.Graphic.Empty then
begin
showmessage('please load picture');
exit;
end
else
try
begin
// Bmp:=TBitmap.Create;
Bmp.PixelFormat:=pf24bit;
// bmp.PixelFormat:=jf24Bit;
if PZoom>=10 then exit;
inc(PZoom);
// Image1.AutoSize:=true;
bmp.Width:=trunc(PZoom*Image1.Picture.Width);
bmp.Height:=trunc(PZoom*Image1.Picture.Height);
//保持最大限度不失真
SetstretchbltMode(Bmp.Canvas.Handle,HalfTone);
//Copy backbmp to bmp
Stretchblt(Bmp.Canvas.Handle,0,0,Bmp.Width,bmp.Height,
backbmp.Canvas.Handle,0,0,backbmp.Width,backbmp.Height,srCCopy);
Image1.Picture.Bitmap.Assign(bmp); StatusBar1.SimpleText:='图像尺寸是:'+IntToStr(bmp.Width)
+'X'+IntToStr(bmp.Height);
Bmp.PixelFormat:=pf24bit;
// bmp.Free;
end;
except
ShowMessage('Memory is not enough');
end;
end;
//缩小按钮
procedure TShowPicture.ZoomOutClick(Sender: TObject);
begin
// Bmp:=TBitmap.Create;
// backbmp.Assign(Image1.Picture.Graphic);
Bmp.PixelFormat:=pf24bit;
if PZoom=1 then exit;
dec(PZoom);
// Image1.AutoSize:=true;
bmp.Width:=trunc(Image1.Picture.Width div 2);
bmp.Height:=trunc(Image1.Picture.Height div 2);
//保持最大限度不失真
SetstretchbltMode(Bmp.Canvas.Handle,HalfTone);
//Copy backbmp to bmp
Stretchblt(Bmp.Canvas.Handle,0,0,Bmp.Width,bmp.Height,
backbmp.Canvas.Handle,0,0,backbmp.Width,backbmp.Height,srCCopy);
Image1.Picture.Bitmap.Assign(bmp);
StatusBar1.SimpleText:='图像尺寸是:'+IntToStr(bmp.Width)
+'X'+IntToStr(bmp.Height);
Bmp.PixelFormat:=pf24bit;
// bmp.Free;
end;
end.
那个高手帮帮忙!~~~unit UShow; //show pictureinterfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, jpeg, ComCtrls, ImgList, ToolWin;type
TShowPicture = class(TForm)
Image1: TImage;
StatusBar1: TStatusBar;
ImageList1: TImageList;
ToolBar1: TToolBar;
ZoomIn: TToolButton;
ZoomOut: TToolButton;
Panel1: TPanel;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure ZoomInClick(Sender: TObject);
procedure ZoomOutClick(Sender: TObject);
procedure ToolButton2Click(Sender: TObject);
private
{ Private declarations }
Jpeg:TJPEGImage; //传递参数
bmp,backbmp:TBitmap;
FBeginDragPoint:TPoint;//记录鼠标开始拖动的位置
FBeginDragSBPoint:TPoint;//记录"中心点"位置
FBeginDrag:Boolean;//是否以经开始"拖动" public
{ Public declarations }
procedure Add(myjpeg:TJPEGImage);
end;var
ShowPicture: TShowPicture;implementation{$R *.dfm}
//图像传递
procedure TShowPicture.Add(myjpeg:TJPEGImage);
begin
Jpeg.Assign(myjpeg);
Image1.Picture.Assign(jpeg);
sw:=Image1.Picture.Width;sh:=Image1.Picture.Height;end;procedure TShowPicture.FormCreate(Sender: TObject);
begin
jpeg:=TJPEGImage.Create;
bmp:=TBitmap.Create;
backbmp:=TBitmap.Create;
PZoom:=1;
pw:=Image1.Width;ph:=Image1.Height;
FBeginDrag:=False;
end;procedure TShowPicture.FormDestroy(Sender: TObject);
begin
Jpeg.Free;
bmp.Free;
backbmp.Free;
end;procedure TShowPicture.Image1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
FBeginDrag:=True;
FBeginDragPoint.X:=X;
FBeginDragPoint.Y:=Y;end;procedure TShowPicture.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
FBeginDrag:=False;
end;
//图像漫游
procedure TShowPicture.Image1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
if not FBeginDrag then exit;end;//放大按钮
procedure TShowPicture.ZoomInClick(Sender: TObject);
begin
// backbmp:=TBitmap.Create;
// Image1.Picture.Graphic.Assign(jpeg);
backbmp.Assign(Image1.Picture.Graphic);
if Image1.Picture.Graphic.Empty then
begin
showmessage('please load picture');
exit;
end
else
try
begin
// Bmp:=TBitmap.Create;
Bmp.PixelFormat:=pf24bit;
// bmp.PixelFormat:=jf24Bit;
if PZoom>=10 then exit;
inc(PZoom);
// Image1.AutoSize:=true;
bmp.Width:=trunc(PZoom*Image1.Picture.Width);
bmp.Height:=trunc(PZoom*Image1.Picture.Height);
//保持最大限度不失真
SetstretchbltMode(Bmp.Canvas.Handle,HalfTone);
//Copy backbmp to bmp
Stretchblt(Bmp.Canvas.Handle,0,0,Bmp.Width,bmp.Height,
backbmp.Canvas.Handle,0,0,backbmp.Width,backbmp.Height,srCCopy);
Image1.Picture.Bitmap.Assign(bmp); StatusBar1.SimpleText:='图像尺寸是:'+IntToStr(bmp.Width)
+'X'+IntToStr(bmp.Height);
Bmp.PixelFormat:=pf24bit;
// bmp.Free;
end;
except
ShowMessage('Memory is not enough');
end;
end;
//缩小按钮
procedure TShowPicture.ZoomOutClick(Sender: TObject);
begin
// Bmp:=TBitmap.Create;
// backbmp.Assign(Image1.Picture.Graphic);
Bmp.PixelFormat:=pf24bit;
if PZoom=1 then exit;
dec(PZoom);
// Image1.AutoSize:=true;
bmp.Width:=trunc(Image1.Picture.Width div 2);
bmp.Height:=trunc(Image1.Picture.Height div 2);
//保持最大限度不失真
SetstretchbltMode(Bmp.Canvas.Handle,HalfTone);
//Copy backbmp to bmp
Stretchblt(Bmp.Canvas.Handle,0,0,Bmp.Width,bmp.Height,
backbmp.Canvas.Handle,0,0,backbmp.Width,backbmp.Height,srCCopy);
Image1.Picture.Bitmap.Assign(bmp);
StatusBar1.SimpleText:='图像尺寸是:'+IntToStr(bmp.Width)
+'X'+IntToStr(bmp.Height);
Bmp.PixelFormat:=pf24bit;
// bmp.Free;
end;
end.
TSCRLLBOX我也是过,可是不行!~~
begin
Image1.Left:=Image1.Left+(x-oldx);
Image1.TOP:=Image1.Top+(y-oldy);
end;
oldx:=x;
oldy:=y;buttondown,鼠标按键开关,在mouesedown,mouseup里设置下就好了oldx,oldy,成员变量,纪录上一次鼠标的位置
代码没测试大概就这样了
begin
//self.DoubleBuffered := True;
scrollbox1.DoubleBuffered :=True;
end;
procedure TFrmScanConn.Image1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Button=mbLeft then
begin
IsMouseDown :=True;
MouseDownPoint :=Point(x,y);
end;
end;
procedure TFrmScanConn.Image1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
if IsMouseDown then
begin
MouseMovePoint :=Point(x,y);
image1.Left:=image1.Left+MouseMovePoint.x-MouseDownPoint.x;
image1.Top:=image1.Top+MouseMovePoint.y-MouseDownPoint.y;
end;
end;procedure TFrmScanConn.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
IsMouseDown :=False;
end;IsMouseDown是全局变量.