2017-09-25 75 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