Redimensionner image en gardant les proportions [Résolu]

Signaler
Messages postés
144
Date d'inscription
samedi 21 octobre 2000
Statut
Membre
Dernière intervention
7 mai 2009
-
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
-
Bonjour,

Quelle fonction faut-il utiliser pour reproduire le redimensionnement façon "Zoom" d'une picturebox?
Je travail avec des Bitmap et Graphics bien évidement, et je n'ai pas d'IHM pour pouvoir utiliser une picturebox.

Merci d'avance

Tuizi

6 réponses

Messages postés
357
Date d'inscription
jeudi 8 juin 2006
Statut
Membre
Dernière intervention
26 décembre 2011
3
Salut,
J'ai un composant PictureBox  qui redimensionne  l'image en gardant les proportions.
Voici le code brut c# il faudra que tu l'adapte  :

//fonction principale
private void ComputeSizeAndInitialPosition()
        {
            ComputeImageSize();
            ComputeInitialPosition();
        }

//membres privés
mLeft : X de l'image dans la picturebox
mTop: Y de l'image dans la picturebox

        private void ComputeInitialPosition()
        {
            try
            {                if (mCenterImage false) mLeft mTop = 0;
                else
                {
                    mLeft = (Width - mImageSize.Width) / 2;
                    mTop = (Height - mImageSize.Height) / 2;
                }
            }
            catch (Exception)
            {
                mLeft = 0;
                mTop = 0;
            }
        }

        private void ComputeImageSize()
        {            if (Image !null)  mImageSize ComputeSize(Image.Size,new Size(mMaxBmpWidth,mMaxBmpHeight));
            else mImageSize = Size.Empty;
        }

public Size ComputeSize(Size source, Size max)
        {
            Size ImageSize = Size.Empty;

            if (source.Width >= source.Height)
            {
                float h = ((float)source.Height / (float)source.Width) * max.Width;
                ImageSize = new Size(max.Width, (int)h);
                if (ImageSize.Height > max.Height)
                {
                    float w = ((float)source.Width / (float)source.Height) * max.Height;
                    ImageSize = new Size((int)w, max.Height);
                }
            }

            if (source.Width < source.Height)
            {
                float w = ((float)source.Width / (float)source.Height) * max.Height;
                ImageSize = new Size((int)w, max.Height);
                if (ImageSize.Width > max.Width)
                {
                    float h = ((float)source.Height / (float)source.Width) * max.Width;
                    ImageSize = new Size(max.Width, (int)h);
                }
            }
            return ImageSize;
        }

A+
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
mouais, tas juste a faire un bête test...
float WidthPercent = (float)900/800;
float heightPercent = (float)500/600;

int newWidth;
int newHeight;
if (WidthPercent < HeigthPercent)
{
newWidth = OldWidth*WidthPercent;
newHeight = OldHeight*WidthPercent;
}
else
{
newWidth = OldWidth*HeigthPercent;

newHeight = OldHeight*HeigthPercent;

}

Maintenant tu draw d'un graphics à l'autre. C'est ca que fais la picturebox, et entre le code que je viens de donner et celui pour copier d'un graphics a un autre, tu en as pour quoi....20 lignes de codes en plus (autrement plus simples et compréhensibles que l'autre solution)
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
cest vraiment se faire ch**r pour rien! crée une image ou tu veux récupérer le nouvelle taille, récupère le graphics de la première image, le graphics de la seconde, puis dessine le graphics de la première dans le graphics de la seconde avec la méthode DrawImage, en spécifiant bien la taille de la zone ou dessiner (donc la taille que tu veux pour ta nouvelle image). ca prendra moins de code, moins de prise de tete, etc
Messages postés
144
Date d'inscription
samedi 21 octobre 2000
Statut
Membre
Dernière intervention
7 mai 2009

Oui mais, leprov, le principe c'est de garder les proportions lors du redimensionnement!

Tuizi
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
et? si tu veux une image a 70% de sa taille tu as juste a faire

img2 = new Bitmap(img1.Width*70/100, img1.Width*70/100)

ou est le problème?
Messages postés
144
Date d'inscription
samedi 21 octobre 2000
Statut
Membre
Dernière intervention
7 mai 2009

Non c'est pas aussi simple!

En faite admettons j'ai une image de 900 * 500 et moi le max c'est 800*600.

Donc il faut que je redimensionne en 800 * 400 pour garder la proportion. La propriété Zoom d'une picture box le fait très bien, moi je veux juste reproduire cette fonction ou l'utiliser si ça existe.
Je vais voir avec ce que ma donné [auteur/XMOX667/795497.aspx xmox667]

Tuizi