图像比例问题(100分)

  • 主题发起人 主题发起人 冰女孩
  • 开始时间 开始时间

冰女孩

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一张图是300X600,而我的Timage只有200X500,我要将图等比例缩小后放入Timage中。
请各位高手帮帮我这个初学者。
 
Image1.Picture.LoadFromFile('c:/aaa.bmp');
Image1.Canvas.StretchDraw(Image1.ClientRect,Image1.Picture.Graphic);
注意控制StrechDraw的第一个Rect参数就可以达到你的要求了。
 
不行呀。我是jpg文件。
 
这我知道,但是Image1.Canvas.StretchDraw(Image1.ClientRect,Image1.Picture.Graphic);
只对bmp文件有用,若用的是jpg,则会出错。
 
你的 300X600 和 200X500 是等比例吗?
什么意思,自动缩放不行吗?
设置 Image1 的 stretch 为 true !
 
先建一个abitmap := TBitmap.create;
把jpg图传给abitmap.然后不就可以缩放进Image了
 
你没领会我的意思。什么文件无所谓,StrechDraw是关键阿。
procedure TForm1.Button1Click(Sender: TObject);
var
jpg:TJpegImage;
begin
jpg := TJpegImage.Create;
jpg.LoadFromFile('c:/308682.jpg');
Image1.Canvas.StretchDraw(Image1.ClientRect, jpg);
jpg.Free;
end;
 
不知你要干什么,设置 Image1 的 stretch 为 true 难道不行吗?
 
楼上的,人家是要等比的。
用StretchDraw应该是可以的啊。
 
如果是等比,怎么能用Image1.ClientRect?
这个Rect 要重新计算,看是以宽为准,还是高为准,
重新设置 image1的高和宽,然后还是用 “stretch:=true“

“stretch:=true“是根本,然后根据图像的实际大小,调整
Image1的大小。根本不需要 ...Draw....!!!!!!!!!!!!
 
to bubble: 谢谢你,你那种方法可以实现jpg,但是jpg.LoadFromFile(filename);
这里filename可以是任意jpg文件,我显示第一个jpg可以,但是显示第二个时怎么画布
还是那么大,我把源程序贴出来你帮我看看。

procedure TForm1.show(Sender: TObject);
var scale :integer; jpg:TJpegImage;bmp:TBitmap;
begin
jpg := TJpegImage.Create;
jpg.LoadFromFile(path);
scale:=trunc(jpg.Width / panel1.Width)+1; //比例倍数;
image1.clientWidth:=trunc(jpg.Width / scale );
image1.clientHeight :=trunc(jpg.Height/scale );
Image1.Canvas.StretchDraw(Image1.ClientRect,jpg);
jpg.Free ;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
path:='e:/3.jpg';
show(sender);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
path:='e:/2.jpg';
show(sender);
end;

其中path是全局变量。
 
很简单,你取整的地方不对。
trunc不应该用在取比例的时候。
我这里以Image.ClientHeight为基准。
你还可以改进,"看是以宽为准,还是高为准"
var
scale :double;
jpg:TJpegImage;
begin
jpg := TJpegImage.Create;
if OpenDialog1.Execute then
jpg.LoadFromFile(OpenDialog1.FileName);
scale:=jpg.Width / jpg.Height; //比例倍数;
image1.clientWidth:= trunc(image1.clientHeight * scale);
Image1.Canvas.StretchDraw(Image1.ClientRect, jpg);
jpg.Free ;
end;
 
to bubble:
但是如果你先调的第一个图片比第二个图片小时,则第二个图片只显示一半呀。这又会是什么
原因呢。真不好意思。谢谢
 
还在纠缠,思路有问题!
 
可以了。真是太谢谢大家了。原来没重刷新。开始放分了。
 
分完,大家都有份。
 
后退
顶部