Zoom canvas-Bereich, in Delphi

Ich etwas, das aussieht wie die Farbe in Delphi. Ich fand, wie man zoom-Funktion:

procedure SetCanvasZoomFactor(Canvas: TCanvas; AZoomFactor: Integer);
var
  i: Integer;
begin
  if AZoomFactor = 100 then
    SetMapMode(Canvas.Handle, MM_TEXT)
  else
  begin
    SetMapMode(Canvas.Handle, MM_ISOTROPIC);
    SetWindowExtEx(Canvas.Handle, AZoomFactor, AZoomFactor, nil);
    SetViewportExtEx(Canvas.Handle, 100, 100, nil);
  end;
end;



procedure TMainForm.btnZoomPlusClick(Sender: TObject);
var
  bitmap: TBitmap;
begin 

  bitmap := TBitmap.Create;
  if(zoomVal < 1000) then
      zoomVal:=zoomVal+zoomConst; //zoomVal = 100 by default; zoomConst = 150;
  try
    bitmap.Assign(MainForm.imgMain.Picture.Bitmap);
    SetCanvasZoomFactor(bitmap.Canvas, zoomVal);
    Canvas.Draw(MainForm.imgMain.Left,MainForm.imgMain.Top, bitmap); 
  finally
    bitmap.Free
  end;
end;

Aber, das problem ist, es vergrößert nur die oberen linken Bereich des Bildes.

Beispiel
vor zoom:
Zoom canvas-Bereich, in Delphi
nach dem Zoomen:
Zoom canvas-Bereich, in Delphi

Ich möchte in der Lage sein, sich zu bewegen durch alle Bild-Bereich, selbst nach dem Zoomen. Wie kann ich das machen?

  • Hier ist ein animated zoom selector und hier ist, wie zu make animated panning.
  • Heilige delphi, es ist nicht so einfach, wie ich dachte! Nun, wenn es keinen anderen Weg, um solche zoom, verwende ich für eine solche Lösung
  • Es muss nicht so Komplex sein. Es kommen glatte Animationen gibt. Es sieht aus und fühlt sich schön an Kontrolle, aber wenn Sie nicht brauchen, Animationen, warten, für eine einfachere Lösung 😉
  • nun ja, eigentlich brauche ich nicht flüssige animation oder so ähnlich. Zumindest jetzt. Aber danke für die links!
Schreibe einen Kommentar