如何在delphi 中程序 改变图像的尺寸如正比缩小,有控件或功能吗?

需要能够保存成新尺寸的图像文件。

第1个回答  2010-11-24
假设目标:把Image1中的图像长宽都缩小到一半后,放入Image2中
方法#1:用Image.Stretch属性
Image2.Stretch := True;
Image2.Width := Image1.Width div 2;
Image2.Height := Image1.Width div 2;
Image2.Picture.Assign( Image1.Picture );

方法#2:调用Windows API——StretchBlt
Image2.Width := Image1.Width div 2;
Image2.Height := Image1.Width div 2;
StretchBlt(
Image2.Canvas.Handle,
0, 0, Image2.Width, Image2.Height,
Image1.Canvas.Handle,
0, 0, Image1.Width, Image1.Height,
SRCCOPY
);

如果需要将改变后的图像另存,则直接用Image2.Picture.SaveToFile即可。

点评:方法一简单,方法二功能强,可以准确定位要把原始图像放到目标图像的什么位置,而不是固定的从左上角到右下角之间的矩形,还可以由最后一个参数制定绘制方法,各种方法分别是什么功能,可查阅MSDN。本回答被提问者和网友采纳
第2个回答  推荐于2018-03-26

我提供一个改变图大小保存文件的代码   希望对你有用

procedure TForm1.SaveBmp(const SPath, Dpath: string; width, Higth: Word);
var
sBmp, sBmp1: TBitmap;
srcRect, desRect: TRectF;
begin
  if FileExists(SPath) then
    begin
      sBmp := TBitmap.CreateFromFile(SPath);
      srcRect  := tRectf.Create(0,0, sBmp.Width, sBmp.Height);
      sBmp1 := TBitmap.Create(width, Higth);
      desRect := Trectf.Create(0,0,width, Higth);
      try
       sBmp1.Canvas.BeginScene;
       sBmp1.Canvas.DrawBitmap(sBmp,srcRect, desRect,100);
       sBmp1.Canvas.EndScene;
       sBmp1.SaveToFile(Dpath);
      finally
        sBmp.Free;
        sBmp1.Free;
      end;
    end;
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
  SaveBmp('c:\019.jpg', 'c:\020.jpg', 800,600);
end;

本回答被网友采纳
第3个回答  2010-11-25
没有固定格式,只要能够表达意思即可.
相似回答