Maison > développement back-end > C++ > Comment zoomer et traduire correctement une image à partir de l'emplacement de la souris en C# ?

Comment zoomer et traduire correctement une image à partir de l'emplacement de la souris en C# ?

Susan Sarandon
Libérer: 2024-12-27 06:37:09
original
142 Les gens l'ont consulté

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

Zoom et traduction d'une image à partir de l'emplacement de la souris

Cet article aborde le problème du zoom (mise à l'échelle) d'une image à partir de l'emplacement de la souris à l'aide de transformations dans l'événement Paint. Après avoir traduit l'origine du bitmap vers l'emplacement de la souris, l'image est mise à l'échelle et son origine est retraduite. Cependant, l'image "saute" et ne parvient pas à être mise à l'échelle à partir de l'origine déplacée lors de la traduction de l'emplacement de la souris.

Solution :

Pour résoudre ce problème, nous mettons en œuvre les stratégies suivantes :

  1. Diviser pour conquérir : Décomposez les effets graphiques et les transformations en méthodes spécialisées qui effectuent des tâches spécifiques. Concevez ces méthodes pour qu'elles fonctionnent ensemble de manière transparente lorsque cela est nécessaire.
  2. Restez simple :Évitez d'accumuler plusieurs transformations graphiques dans les opérations matricielles. Utilisez Matrix.Multiply et Matrix.RotateAt pour des calculs plus simples.
  3. Utilisez les bons outils : Utilisez une PictureBox (ou une étiquette plate non système) comme « toile » au lieu d'un panneau. . PictureBox fournit une double mise en mémoire tampon par défaut et est conçu pour le dessin.

Pour une démonstration visuelle, notre exemple de code implémente quatre modes de zoom dans un contrôle PictureBoxEx personnalisé :

  • ImageLocation : L'image évolue sur place, conservant sa position actuelle sur le toile.
  • CenterCanvas : L'image conserve sa position centrée sur la toile lors de la mise à l'échelle.
  • CenterMouse : L'image est mise à l'échelle et se traduit pour se centrer elle-même sur l'emplacement actuel du pointeur de la souris sur le toile.
  • MouseOffset : L'image est mise à l'échelle et se traduit pour conserver une position relative déterminée par l'emplacement initial du pointeur de la souris sur l'image.

Code :

Le code fourni dans la réponse introduit le contrôle personnalisé PictureBoxEx qui hérite de PictureBox et inclut des fonctionnalités personnalisées. Il inclut également la variable canevas, qui représente le contrôle personnalisé ajouté au formulaire lors de l'initialisation. L'énumération ZoomMode est utilisée pour définir les différents modes de zoom.

Les gestionnaires d'événements pour les événements de souris et la barre de suivi, ainsi que la logique de peinture de base, gèrent les opérations de zoom et de rotation en fonction du mode de zoom sélectionné.

N'oubliez pas de modifier la chaîne imagePath par le chemin réel de votre fichier image avant d'exécuter le code.

Avantages :

Cette approche fournit une méthode plus efficace et plus stable pour zoomer et traduire des images à partir de l'emplacement de la souris. Cela réduit le risque d'artefacts visuels inattendus ou de problèmes de performances lors de la gestion de transformations complexes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal