Centrer un zoom dans un panel en c#

Signaler
Messages postés
2
Date d'inscription
mardi 18 mars 2008
Statut
Membre
Dernière intervention
20 mars 2008
-
Messages postés
2
Date d'inscription
mardi 18 mars 2008
Statut
Membre
Dernière intervention
20 mars 2008
-
Bonjour,

j'ai une windows form dans laquelle j'ai une image dans un panel et il me faut zoomer au centre de cette image.
J'arrive à zoomer mais que en haut à gauche.

voilà mon code du zoom:

private void initZoom()
        {
            //cette fonction est appelle par Form1_Load
            //on calcule le ratio et on recupere la taille d'origine de l'image
            ratio = panel1.BackgroundImage.Width / panel1.BackgroundImage.Height;
            largeur = panel1.BackgroundImage.Width;
            hauteur = panel1.BackgroundImage.Height;
        }

        private void ZoomPicture(double niveauDeZoom)
        {
            //cette fonction est appelle a chaque changement de la trackbar
            //elle prend en paramettre le niveau de zoom

            //on cree la nouvelle taille de l'image qui sera egale a la taille d'origine
            //multiplie par le niveau de zoom
            //le int devant les calculs est necessaire car la fonction newsize prend en paramettre
            //des entiers, et les divisions nous donne des nombres a virgule
            Size nouvelleTaille = new Size((int)(largeur * niveauDeZoom), (int)(hauteur * niveauDeZoom));
            //on cree alors une nouvelle image bitmap a partir de l'image originale du panel
            //a laquelle on donne la nouvelle taille
            Bitmap image = new Bitmap(panel1.BackgroundImage, nouvelleTaille);
            //on remplace l'image originale par l'image zoomee
            panel1.BackgroundImage = image;
           
           
        }

        public Form1()
        {
            InitializeComponent();
        }

        private void trackBar1_Scroll(object sender, EventArgs e)
        {
            //on recupere la valeur de la trackbar
            switch (zoom.Value)

            {
                //suivant la valeur on appelle la fonction zoompicture avec le niveau de zoom souhaite
                case 0:
                    ZoomPicture(1);
                    break;
                case 1:
                    ZoomPicture(1.25);
                    break;
                case 2:
                    ZoomPicture(1.5);
                    break;
                case 3:
                    ZoomPicture(1.75);
                    break;
                case 4:
                    ZoomPicture(2);
                    break;
                default:
                    ZoomPicture(1);
                    break;

            }
        }

2 réponses

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
36
Salut, on ne zoom pas en utilisant le constructeur de la classe Bitmap mais avec la fonction Graphics.DrawImage( .. ) qui prend en paramètres un rectangle source et un rectangle destination.

Un exemple :

http://www.csharpfr.com/infomsg_URGENT-PROJET-DEPLACER-IMAGE-DANS-PICTUREBOX_897611.aspx
Messages postés
2
Date d'inscription
mardi 18 mars 2008
Statut
Membre
Dernière intervention
20 mars 2008

Merci, mais on m'impose presque de garder ce code de zoom, donc j'aimerai pouvoir zoomer au centre avec ce zoom.