如何在Firemonkey中拉伸图像?

时间:2017-09-25 06:28:11

标签: image delphi bitmap delphi-xe5

我想将图像调整为64 * 64的预定义位图,无论其当前尺寸和宽高比如何。我尝试了Bitmap.ReSize,但保持了宽高比。我尝试了TImage并将WrapMode设置为iwStretch。这在一定程度上起作用,因为它确实按照我想要的方式重新缩放图像,但我找不到从TImage中获取该图像的方法。 Bitmap的{​​{1}}属性仍包含原始位图。

有人知道如何从屏幕上显示的TImage获取图片吗?或者甚至更好:指向一个能够进行这种调整和拉伸的功能?如果有,我错过了。

感谢您的时间。

1 个答案:

答案 0 :(得分:5)

要在Fmx中拉伸图片,您无需使用TImage。我知道你真的不想使用TImage,解决方案如下:

var
  bmpA, bmpB: TBitmap;
  src, trg: TRectF;
begin
  bmpA := nil;
  bmpB := nil;
  try
    bmpA := TBitmap.Create;
    bmpA.LoadFromFile('C:\tmp\Imgs\149265645.jpg');

    bmpB:= TBitmap.Create;
    bmpB.SetSize(64, 64);

    src := RectF(0, 0, bmpA.Width, bmpA.Height);
    trg := RectF(0, 0, 64, 64);

    bmpB.Canvas.BeginScene;
    bmpB.Canvas.DrawBitmap(bmpA, src, trg, 1);
    bmpB.Canvas.EndScene;

    bmpB.SaveToFile('C:\tmp\Imgs\149265645_take_two.bmp');
  finally
    bmpA.Free;
    bmpB.Free;
  end;
end;

您让bmpB.Canvas绘制bmpA位图,并根据srctrg矩形同时调整图片大小。