我想将图像大小调整为64 * 64的预定义位图,而不考虑其当前尺寸和纵横比。我试过Bitmap.ReSize,但保持宽高比。我尝试了TImage并将WrapMode设置为iwStretch。这在一定程度上有效,因为它确实可以按我的要求重新缩放图像,但是我找不到从TImage中获取该图像的方法。 BitmapTImage属性仍包含原始位图。

有人知道如何从屏幕上显示的TImage获取图像吗?甚至更好:将我指向具有这种大小调整和拉伸功能的函数?如果有一个,我错过了。

谢谢你的时间。

最佳答案

要在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矩形调整图像的大小。

10-05 22:16