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:
nach dem Zoomen:
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 makeanimated 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!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie SetWorldTransform für jeden DC.
Ein Beispiel für die Implementierung könnte wie folgt Aussehen:
Könnten Sie definieren, Zoom, X-Y-Offest und rotation für die gewünschte Leinwand vor dem malen.
In Ihrem Fall wählen Sie einen Zoom, Farbe auf die Leinwand und auf scrollen/verringern Sie den Wert für X und/oder Y und rufen Sie die Prozedur mit den gleichen zoom wieder und malen Sie Ihre Grafik.
BEARBEITEN
Um zu zeigen, wie um die Prozedur zu verwenden. Dieser code
wird verwendet, um anzuzeigen, Folgendes Ergebnis:
Als Antwort auf Ihren Kommentar, wie es mit trackbars, Sie umzusetzen etwas wie