Centrer un zoom dans un panel en c#

poire812 Messages postés 2 Date d'inscription mardi 18 mars 2008 Statut Membre Dernière intervention 20 mars 2008 - 18 mars 2008 à 16:00
poire812 Messages postés 2 Date d'inscription mardi 18 mars 2008 Statut Membre Dernière intervention 20 mars 2008 - 20 mars 2008 à 09:13
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

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
18 mars 2008 à 17:33
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
0
poire812 Messages postés 2 Date d'inscription mardi 18 mars 2008 Statut Membre Dernière intervention 20 mars 2008
20 mars 2008 à 09:13
Merci, mais on m'impose presque de garder ce code de zoom, donc j'aimerai pouvoir zoomer au centre avec ce zoom.
0
Rejoignez-nous