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

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

DDD
DDDoriginal
2024-12-30 06:40:14497parcourir

How to Correctly Zoom and Translate an Image from a Mouse Location?

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

Dans ce scénario, l'image "saute" et ne parvient pas à être mise à l'échelle à partir de l'origine déplacée car la translation de l'emplacement de la souris vers le centre de l'image n'est pas correctement calculée. De plus, la traduction après la mise à l'échelle de l'image ne prend pas en compte la taille de l'image mise à l'échelle, ce qui entraîne des résultats incorrects.

Pour résoudre ce problème, la séquence de transformation doit être la suivante :

  1. Traduire vers (0, 0) : déplacez l'image vers l'origine afin de pouvoir appliquer des transformations de là.
  2. Redimensionnez l'image : appliquez le facteur de zoom à (0, 0).
  3. Traduisez de nouveau à l'emplacement de la souris : ajoutez la souris emplacement à l'endroit où le centre de l'image devrait être.

Voici un exemple de mise en œuvre :

private void pnl1_Paint(object sender, PaintEventArgs e)
{
    // Translate to (0, 0)
    e.Graphics.TranslateTransform(-img.Width / 2, -img.Height / 2);

    // Scale the image
    e.Graphics.ScaleTransform(zoom, zoom);

    // Translate back to mouse location
    e.Graphics.TranslateTransform(mouse.X, mouse.Y);

    // Draw the image at the new location
    e.Graphics.DrawImage(img, 0, 0);
}

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!

Déclaration:
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