【问题标题】:How to stretch image in Firemonkey?如何在 Firemonkey 中拉伸图像?
【发布时间】:2017-09-25 06:28:11
【问题描述】:

我想将图像大小调整为 64 * 64 的预定义位图,无论其当前尺寸和纵横比如何。我试过Bitmap.ReSize,但它保持了纵横比。我尝试了TImage 并将WrapMode 设置为iwStretch。这在一定程度上有效,因为它确实可以根据需要重新缩放图像,但我找不到将图像从TImage 中取出的方法。 TImageBitmap 属性仍然包含原始位图。

有人知道如何从TImage 获取图像,因为它显示在屏幕上?甚至更好:给我指出一个可以进行这种调整大小和拉伸的函数?如果有的话,我已经错过了。

感谢您的宝贵时间。

【问题讨论】:

    标签: image delphi bitmap delphi-xe5


    【解决方案1】:

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

    【讨论】:

    • 是的!这行得通。您对 TImage 的假设是正确的,并且您的解决方案是一个简洁的解决方案。您可能已经猜到,在尝试解决此问题的过程中,我遇到了您也评论过的问题。通过采用这个解决方案,这个问题不再相关,尽管它仍然让我感到困惑,我可以做些什么来导致这个错误。无论如何,非常感谢您的宝贵时间!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    相关资源
    最近更新 更多