Entwickler-Ecke
Multimedia / Grafik - Zoomausschnitt beibehalten
Fabian W. - Fr 15.09.06 19:09
Titel: Zoomausschnitt beibehalten
Hallo!
Ich hab nun ne ganze Zeit lang gesucht aber nischt gefunden...
Folgendes Problem:
Ich habe ein TImage in einer TScrollbox.
Dieses Image soll man zoomen können - kein problem; strech aktvieren, größe ändern - gezoomt^^
Jetzt das problem an der sache:
Wenn ich die Größe des Image ändere zeigt der Mittelpunkt der Box nicht mehr auf das Pixel auf dem image, auf das er bevor dem zoomen gezeigt hat. Der Auschnitt wird also nicht nur gezoomt sondern auch verschoben.
Genau das möchte ich vermeiden - hatte schonmal jemand dieses Prob (lösen können^^) oder Vorschläge?
mfg
Fabian W. - Sa 16.09.06 14:40
*push*
wulfskin - Sa 16.09.06 14:58
Hallo,
ich benutze für gewöhnlich für solche Dinge die PaintBox und das vergrößern/verschieben u.ä. mache ich durch etwas Mathematik und die Funktionen von Canvas: StretchDraw u.ä.
Hast du es schon mal damit versucht?
Gruß Hape!
Fabian W. - Sa 16.09.06 15:05
Das wäre bei mir etwas umständlich da es nicht nur um das Bild geht. Wenn ich alles zusdammenrechne ist ne scrollbox die optimalere Lösung ;)
Xion - Sa 16.09.06 15:11
hi
eigentlich musst du doch nur, wenn du zoomst, die hälfte der größenänderung bei Top und Left dazuzählen. Wenn du allerding ganz am rand deinen ausschnitt hast, ist er danach nicht mehr am rand, aber der Ausschnitt fokusiert noch das gleiche Pixel
//EDIT: nicht bei Top,Left sondern halt ScrollBy bei der ScrollBox
Fabian W. - Sa 16.09.06 15:51
@xion: dann würde es immer richtung mitte streben ;)
Danke aber ich konnte das Problem grade mit BenBEs Hilfe slebst lösen ;)
Für alle die's interessiert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| var mittepixX, mittepixY: integer; begin mittepixX := round(((2 * ScrollBox1.HorzScrollBar.Position + ScrollBox1.Width) / 2) / Lastzoom); mittepixY := round(((2 * ScrollBox1.VertScrollBar.Position + ScrollBox1.Height) / 2) / Lastzoom);
ScrollBox1.HorzScrollBar.Position := round((mittepixX * zoom) - (ScrollBox1.Width / 2)); ScrollBox1.VertScrollBar.Position := round((mittepixY * zoom) - (ScrollBox1.Height / 2));
LastZoom := Zoom; end; |
Zoom wird in in dezimalen angegeben (1 = 100%, 1,5 = 150 % etc)
mfg
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!