Heim > Backend-Entwicklung > C++ > Wie kann ich in C# ein Bild von der Mausposition aus richtig zoomen und verschieben?

Wie kann ich in C# ein Bild von der Mausposition aus richtig zoomen und verschieben?

Susan Sarandon
Freigeben: 2024-12-27 06:37:09
Original
145 Leute haben es durchsucht

How to Correctly Zoom and Translate an Image from the Mouse Location in C#?

Zoomen und Verschieben eines Bildes von der Mausposition aus

Dieser Artikel befasst sich mit dem Problem des Zoomens (Skalierens) eines Bildes von der Mausposition aus mithilfe von Transformationen im Paint-Ereignis. Nach der Übersetzung des Bitmap-Ursprungs in die Mausposition wird das Bild skaliert und sein Ursprung zurückversetzt. Das Bild „springt“ jedoch und kann während der Mauspositionsübersetzung nicht vom verschobenen Ursprung aus skaliert werden.

Lösung:

Um dieses Problem zu beheben, implementieren wir die folgenden Strategien:

  1. Teile und herrsche: Zerlegen Sie die Grafikeffekte und Transformationen in spezialisierte Methoden, die bestimmte Aufgaben ausführen. Entwerfen Sie diese Methoden so, dass sie bei Bedarf nahtlos zusammenarbeiten.
  2. Keep it Simple: Vermeiden Sie die Anhäufung mehrerer grafischer Transformationen innerhalb von Matrixoperationen. Verwenden Sie Matrix.Multiply und Matrix.RotateAt für einfachere Berechnungen.
  3. Verwenden Sie die richtigen Tools:Verwenden Sie eine PictureBox (oder ein nicht zum System gehörendes Flat Label) als „Leinwand“ anstelle eines Panels . PictureBox bietet standardmäßig doppelte Pufferung und ist zum Zeichnen konzipiert.

Zur visuellen Demonstration implementiert unser Beispielcode vier Zoommodi in einem benutzerdefinierten PictureBoxEx-Steuerelement:

  • ImageLocation: Das Bild wird an Ort und Stelle skaliert und behält seine aktuelle Position auf der bei Leinwand.
  • CenterCanvas: Das Bild behält beim Skalieren seine zentrierte Position auf der Leinwand.
  • CenterMouse: Das Bild wird skaliert und verschoben, um sich selbst zu zentrieren auf der aktuellen Position des Mauszeigers auf dem Leinwand.
  • MouseOffset: Das Bild wird skaliert und verschoben, um eine relative Position beizubehalten, die durch die anfängliche Position des Mauszeigers auf dem Bild bestimmt wird.

Code:

Der in der Antwort bereitgestellte Code führt das benutzerdefinierte PictureBoxEx-Steuerelement ein, das von PictureBox erbt und benutzerdefinierte Funktionen enthält. Es enthält auch die Canvas-Variable, die das benutzerdefinierte Steuerelement darstellt, das dem Formular während der Initialisierung hinzugefügt wurde. Die ZoomMode-Enumeration wird verwendet, um die verschiedenen Zoommodi zu definieren.

Die Ereignishandler für Mausereignisse und die Spurleiste sowie die Kern-Mallogik handhaben die Zoom- und Rotationsvorgänge basierend auf dem ausgewählten Zoommodus.

Denken Sie daran, die Zeichenfolge imagePath in den tatsächlichen Pfad Ihrer Bilddatei zu ändern, bevor Sie ausführen Code.

Vorteile:

Dieser Ansatz bietet eine effizientere und stabilere Methode zum Zoomen und Übersetzen von Bildern von der Mausposition aus. Es verringert die Wahrscheinlichkeit unerwarteter visueller Artefakte oder Leistungsprobleme bei der Verarbeitung komplexer Transformationen.

Das obige ist der detaillierte Inhalt vonWie kann ich in C# ein Bild von der Mausposition aus richtig zoomen und verschieben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage