¿Hacer zoom / estirar una picturebox en la posición actual del mouse?

P: ¿Cómo puedo implementar el zoom en la posición actual del mouse sobre un picturebox, algo como hacer zoom en Google Maps?

Estoy diseñando un motor de mapas / SIG simple como mi trabajo de tesis. La aplicación está diseñada de tal manera que los mapas se están cargando en las pestañas de un control de tabulación modificado levemente.

Los mapas son imágenes digitales de formato JPEG o PNG estándar y la mayoría de ellos tienen resoluciones muy altas (2000x2000px y más).

Se cargan en cajas de imágenes que se agregan como subcontroles de pestañas. He implementado un método de zoom simple como un evento de clic de botón que solo se aleja del centro de la imagen / caja de imágenes.

Lo que me gustaría hacer es implementar el zoom en un evento de rueda del ratón de manera que la imagen se amplíe en la posición actual del mouse dentro de la caja de imágenes.

El código para hacer zoom actualmente se ve así:

            timesZoomed += 1;
            zoomRatio += 0.1f;
            pbxMapa.Width = pbxMapa.Width * zoomRatio;
            pbxMapa.Height = pbxMapa.Height * zoomRatio;
            pbxMapa.Location = new Point((this.Width / 2) - (pbxMapa.Width / 2), this.Height / 2) - (pbxMapa.Height / 2));
El valor predeterminado de "zoomRatio" es 1, y se está incrementando hasta 0.6f.El valor predeterminado del argumento "timesZoomed" es 0, sube a 6."pbxMapa" es la picturebox con la imagen cargada del mapa. La propiedad "ImageSizeMode" del picturebox se establece en "Zoom", pero el tamaño del picturebox se establece en el tamaño completo de la imagen del mapa cargado.

Además, estaba experimentando con este código de zoom simple. El cálculo es algo efectivo, pero aún así tiene un gran desplazamiento cuando se amplía / multiplica con una proporción mayor:

                pbxMapa.Location = new Point(pbxMapa.Location.X + (int)((pbxMapa.Location.X * zoomRatio - mouseXPbx) / 8), pbxMapa.Location.Y + (int)((pbxMapa.Location.Y * zoomRatio - mouseYPbx) / 8));
Las variables "mouseXPbx" y "mouseYPbx" representan la posición actual del mouse dentro de "pbxMapa". Dividido por 8 para minimizar el desplazamiento en el posicionamiento.

Cualquier ayuda y sugerencias son apreciadas, gracias de antemano.

Respuestas a la pregunta(2)

Su respuesta a la pregunta