2017-09-25 78 views
3

我想将图像的大小调整为64 * 64的预定义位图,无论其当前尺寸和宽高比如何。我试过Bitmap.ReSize但保持高宽比。我试过TImage并将WrapMode设置为iwStretch。这在一定程度上起作用,因为它确实按照我的意愿重新调整了图像,但是我找不到从TImage中获取该图像的方法。 TImageBitmap属性仍包含原始位图。如何在Firemonkey中拉伸图像?

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

谢谢你的时间。

回答

4

要在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矩形,同时调整图像。

+0

是的!这工作。你对TImage的假设是正确的,你的解决方案是完美的。你可能已经猜到,在试图解决这个问题的过程中,我遇到了你也评论过的问题。通过采用这个解决方案,这个问题不再相关,尽管它仍然让我感到困惑,我可以做什么来导致这个错误。无论如何,非常感谢您的时间! – Arnold