Ich werfe dann noch eine Skalierungs-Funktion hinterher. Man sollte sowieso nicht soviele Aufgabe in eine einzelne Funktion packen.
Mit dem Ergebnis Initialisierst Du das Ziel-Bitmap. Kannst auch auf X/Y Parameter (also direkte Übergabe von Width/Height) umschreiben oder einem Rect für StretchDraw.
Delphi-Quellcode:
function ScaleSize(Size : TSize; MaxBorderLength : Integer): TSize;
var
Ratio : Double;
begin
Ratio := Size.cx / Size.cy;
if (Ratio >= 1) {Landscape} then
begin
Result.cx := MaxBorderLength;
Result.cy := Trunc(MaxBorderLength / Ratio);
end else begin
Result.cy := MaxBorderLength;
Result.cx := Trunc(MaxBorderLength * Ratio);
end;
end;