Entwickler-Ecke

Multimedia / Grafik - Canvas Zoom + Bildausschnitt verschieben


benner - Do 16.10.08 11:44
Titel: Canvas Zoom + Bildausschnitt verschieben
Hallo zusammen,

ich zeichne in ein Canvas und möchte anschließend zoomen und den Zoomausschnitt verschieben können. Wie das prinzipiell erfolgen soll ist mir klar, ich habe auch schon eine Möglichkeit realisiert, bei der ich abhängig von der Zoomstufe alles in entsprechender Größe neu zeichne.

Nun bin ich aber auf eine weniger umständliche Variante gestoßen, da man ein Canvas ja auch direkt zoomen kann. Für den Zoom habe ich eine Funktion gefunden, welche ich nach einigem umschreiben auch für meine Zwecke nutzen konnte:

Delphi-Quelltext
1:
2:
3:
4:
5:
begin
    SetMapMode(Canvas.Handle, MM_ISOTROPIC);
    SetWindowExtEx(Canvas.Handle, AZoomFactor, AZoomFactor, nil);
    SetViewportExtEx(Canvas.Handle, 1010nil);
  end;


Jetzt müsste ich ja eigentlich nur noch die Position des betrachteten Bildausschnitts verschieben, um mein Ziel zu erreichen. Aber wie stelle ich das an? Das einzige, was ich dazu gefunden habe war

Delphi-Quelltext
1:
SetWindowPos(...);                    

Das hat aber nicht funktioniert (mit "nicht funktioniert" meine ich, dass keine Fehlermeldung o.Ä. kam, aber auch der gewünschte Effekt ausblieb). Welchen Befehl kann ich dafür nutzen? (Ich denke, die Frage kann auch ohne meinen eigenen Code geklärt werden, wenn jmd anderer Meinung ist, kann ich den aber jederzeit noch posten).

Vielen Dank schonmal
benner


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 16.10.2008 um 13:02


Logikmensch - Fr 17.10.08 06:04

Hallo! :wave:

versuch mal BitBlt oder StretchBlt. Damit kannst Du Bitmaps verschieben.
Ich würde empfehlen, den zu kopierenden Bildausschnitt herauszulösen in eine Bitmap und dann mit BitBlt bzw. StretchBlt das Bild an die zielposition zu kopieren.


benner - Fr 17.10.08 14:06

Vielen Dank, das hilft mir schonmal weiter. Werde mich erstmal mit diesem Ansatz beschäftigen.

Grüße,
benner


benner - Di 21.10.08 15:38

Nachdem ich noch ein bisschen rumgetüftelt habe, wollte ich nur noch mitteilen, dass das Problem (vorerst) zu meiner Zufriedenheit gelöst ist. Vielen Dank nochmal. =)

Grüße,
benner


Delete - Di 21.10.08 17:38

Wieso wurde das Problem nur "vorerst" gelöst?Erläutere mal!