Einzelnen Beitrag anzeigen

samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#5

AW: Resize ohne Dimensions Verlust

  Alt 20. Mär 2017, 07:40
So wie ich das verstanden habe, macht die eigentliche Arbeit der Skalierung GDIP_DrawImageRect. Es geht also lediglich darum die korrekte Breite/Höhe zu ermitteln.

Das Problem sind eigentlich zwei Probleme. Du willst das Bild zentrieren und das Bildverhältnis beibehalten.
Du musst dazu in einem ersten Schritt die richtige Breite/Höhe anpassen und in einem zweiten Schritt das Bild zentrieren.

Delphi-Quellcode:
var
  SollVerhaeltnis: Double;
  IstVerhaeltnis: Double;
  w, h: Integer;
begin
  IstVerhaeltnis := GifFrameRect.Width / GifFrameRect.Height;
  SollVerhaeltnis := rc.Width / rc.Height;
  if IstVerhaeltnis>SollVerhaeltnis
  then begin
    w := rc.Width;
    h := trunc(rc.Width / IstVerhaeltnis);
  end
  else
  if IstVerhaeltnis<SollVerhaeltnis
  then begin
    h := rc.Height;
    w := trunc(rc.Height * IstVerhaeltnis);
  end
  else begin
    w := rc.Width;
    h := rc.Height;
  end;
end;
Nun hast die gewünschte Breite und Höhe des Ziel-Bildes. Als nächste musst Du diese Werte benutzen um die Position zu berechnen
Delphi-Quellcode:
  x := (rc.Width-w) div 2 + rc.left;
  y := (rc.Height-h) div 2 + rc.top;

Geändert von samso (20. Mär 2017 um 09:20 Uhr) Grund: Fehlerbeseitigung bei der Zentrierung
  Mit Zitat antworten Zitat