还是老问题!jpg图形的放大和缩小,和滚动!(100分)

  • 主题发起人 主题发起人 炙天使
  • 开始时间 开始时间

炙天使

Unregistered / Unconfirmed
GUEST, unregistred user!
兄弟们请你们帮忙了。最好给我一份源程序。
我用image调入一幅jpg图像,可是只是看到图像的一部分。
我把以前兄弟给我的方法都用过了,可是不管用。
包括。加滚动条等。
给我一点源码好吗?
 
将Image.AutoSize :=True;可以看见完整的图象;
缩放应该利用StretchBlt;
 
千堆雪:你的办法也不是很好。我只可以看到图像的一部分。我想可以看到全貌。
请大家帮帮忙了,完事一定厚谢,给我一点详细的提示好吗?
 
先把image放入scrollbar里面然后在一个按钮上加如下代码:
image.autosize:=false;
image.strech:=true;
image1.Width := image1.Picture.Width;
image1.Height := image1.Picture.Height;
 
海风,你的方法我用过了。不好用。只是可以做图像的整体移动,我需要的是图像视野
的移动,还有放大。
 
吧image放到scrollbox里面可以实现滚动
至于放大你可以整体改变width 和 heigth
 
自己写程序吧
比如象ACDSEE那样
对好坐标
用函数COPYRECT或BITBLT可以做到
 
换个角度想问题!既然无法直接操纵JPEG图片进行各种绘图效果,就应该把JPEG转换为一个
BMP后再操纵该BMP进行绘图。这样想怎么画就怎么画,我做的屏幕保护程序就是这样实现的。
 
什么是图像视野的移动?放大很简单呀
如放大10%
image1.width:=image.width*(1+10%) 当然再加一个取整的函数

要不你用Activex控件,就是windows系统自带的那个,事件你需要把activex导入
你的delphi5中,然后就有了一个控制扫描仪的Tools,里面有个imageedit
用这个就可以随意放大,而且不要scrollbar,
比如放大10% 就把它的zoom属性改为110原大为100
至于图像的移动,你可以在ONmouseDown和OnMouseMove上做文章,让图像
根据鼠标的位移进行同步位移
 
移动代码:
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Image1: TImage;
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure useUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
temp1,temp2 : integer;
tempx,tempy : integer;
offsidex,offsidey,startx,starty : integer;
implementation

{$R *.DFM}

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
temp1 := image1.Left;
temp2 := image1.Top;
Startx := x;
Starty := y;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
//image1.Canvas.Rectangle(Self, Rect(x,y,x+image1.Width,y + image1.Height));
tempx := x;
tempy := y;
end;

procedure TForm1.useUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
offsidex := tempx - startx;
offsidey := tempy - starty;
image1.Left := temp1 + offsidex;
image1.Top := temp2 + offsidey;
end;

procedure TForm1.Image1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
accept := true;
end;

end.
放大代码前面的人已经说的很清楚了
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部