Redimensionner image en gardant les proportions [Résolu]

Tuizi 144 Messages postés samedi 21 octobre 2000Date d'inscription 7 mai 2009 Dernière intervention - 31 août 2008 à 22:45 - Dernière réponse : leprov 1163 Messages postés vendredi 23 juillet 2004Date d'inscription 21 octobre 2010 Dernière intervention
- 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
xmox667 357 Messages postés jeudi 8 juin 2006Date d'inscription 26 décembre 2011 Dernière intervention - 1 sept. 2008 à 01:09
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+

Merci xmox667 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de xmox667
Meilleure réponse
leprov 1163 Messages postés vendredi 23 juillet 2004Date d'inscription 21 octobre 2010 Dernière intervention - 1 sept. 2008 à 22:51
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)

Merci leprov 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

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

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