Redimensionner image en gardant les proportions [Résolu]

Messages postés
144
Date d'inscription
samedi 21 octobre 2000
Dernière intervention
7 mai 2009
- - Dernière réponse : leprov
Messages postés
1163
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
21 octobre 2010
- 1 sept. 2008 à 22:51
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
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
357
Date d'inscription
jeudi 8 juin 2006
Dernière intervention
26 décembre 2011
3
Merci
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+

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 95 internautes nous ont dit merci ce mois-ci

Commenter la réponse de xmox667
Messages postés
1163
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
21 octobre 2010
3
Merci
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)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 95 internautes nous ont dit merci ce mois-ci

Commenter la réponse de leprov
Messages postés
1163
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
21 octobre 2010
0
Merci
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
Commenter la réponse de leprov
Messages postés
144
Date d'inscription
samedi 21 octobre 2000
Dernière intervention
7 mai 2009
0
Merci
Oui mais, leprov, le principe c'est de garder les proportions lors du redimensionnement!

Tuizi
Commenter la réponse de Tuizi
Messages postés
1163
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
21 octobre 2010
0
Merci
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?
Commenter la réponse de leprov
Messages postés
144
Date d'inscription
samedi 21 octobre 2000
Dernière intervention
7 mai 2009
0
Merci
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
Commenter la réponse de Tuizi

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.