Redimensionner image en gardant les proportions

Résolu
Tuizi Messages postés 144 Date d'inscription samedi 21 octobre 2000 Statut Membre Dernière intervention 7 mai 2009 - 31 août 2008 à 22:45
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre 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

6 réponses

xmox667 Messages postés 357 Date d'inscription jeudi 8 juin 2006 Statut Membre Dernière intervention 26 décembre 2011 4
1 sept. 2008 à 01:09
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+
3
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
1 sept. 2008 à 22:51
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)
3
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
1 sept. 2008 à 09:36
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
0
Tuizi Messages postés 144 Date d'inscription samedi 21 octobre 2000 Statut Membre Dernière intervention 7 mai 2009
1 sept. 2008 à 13:56
Oui mais, leprov, le principe c'est de garder les proportions lors du redimensionnement!

Tuizi
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
1 sept. 2008 à 15:12
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?
0
Tuizi Messages postés 144 Date d'inscription samedi 21 octobre 2000 Statut Membre Dernière intervention 7 mai 2009
1 sept. 2008 à 22:19
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
0
Rejoignez-nous