[C#] Redimentionner l'image [Résolu]

Signaler
Messages postés
86
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
2 avril 2008
-
Messages postés
86
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
2 avril 2008
-
Bonjour,

j'ai un form1 (form principal avec un menu) et un form2 (form qui s'ouvre en MDI dans le form1).

Le form2 affiche une image (sans passer par la picturebox).

Le form2 s'ouvre lorsque l'on clic sur "ouvrir" qui se trouve dans le form1.

Donc voila mon probleme:

Je veux que l'image soit redimentionnée pour etre visible entierement dans le formulaire principal et

en meme temps, que le form2 prenne la forme exacte de l'image.

Pour ce faire, j'ai écrit dans mon form2:

protected override void OnPaint(PaintEventArgs e)

{

// Récuperation de l'objet Graphic du control

Graphics g = e.Graphics;



// Dessin de
l'image bmp via l'objet Graphics aux coord 0;0 et
redimensionnement


float coeff =
Math.Min( (float)this.ClientSize.Width / (float)bmp.Width,

(float)this.ClientSize.Height / (float)bmp.Height);


g.DrawImage(bmp, 0, 0, (int)(bmp.Width * coeff), (int)(bmp.Height *
coeff));





}

Le probleme est que le form2 ne reprend pas exactement la forme de
l'image. Soit en largeur, soit en hauteur, le form2 est plus grand que
l'image. Cependant, il y a toujours un des deux cotés qui se réduit a
la taille de l'image.

Comment faire pour avoir les 2 cotés ???

Merci d'avance.

6 réponses

Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
47
if (((bmp.Width > 700) && (bmp.Width <= 1400))
&& ((bmp.Height > 500) && (bmp.Height <=1000)))
{
ClientSize = (((bmp.Width)/2) && ((bmp.Height)/2));
g.DrawImage(bmp, 0, 0);
}



Je crois qu'il y a comme un probleme a cette ligne ^^

-> this.ClientSize = new Size(bmp.Width / 2, bmp.Height / 2);


Mx
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
47
Je veux que l'image soit redimentionnée pour etre visible entierement dans le formulaire principal et

en meme temps, que le form2 prenne la forme exacte de l'image.

Ok, donc imaginons, tu veux que l'image prenne toute la place, et que le form"epouse" la forme de l'image, (donc aucun vide).

Cependant, dans ton code, tu gardes les proportions de l'image, donc si
l'image n'est pas a la meme resolution que la taille de ta form, c'est
impossible, il va falloir faire des sacrifices :

Soit tu gardes pas les proportions, et alors la, pas de difficultés, tu
affiche ta bmp a la taille de ta form, soit tu gardes les proportions,
mais a ce moment la, ton image prendra dans de rares cas toute ta form,
et donc il y aura des vides. (ou alors, tu redimensionnes ta form a la
taille de l'image, et la, plus aucun probleme, mais ta form sera pas
"maximized")



Mx
Messages postés
86
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
2 avril 2008

En fait si c'est possible. J'ai du mal me faire comprendre.

Je veux un truc style:



Si (image<500*400)

Alors image = taille normale



Si (500*400>image>800*600)

Alors image resize a 50%



Si (image>800*600)

Alors image resize a 25%



Bon je met pas tout c'est juste pour donner le principe. Et donc cette
image ce "resize" en fonction de sa taille et le formulaire 2 épouse
ses formes. Le form2 doit pouvoir etre maximised dans le principal sans
que l'image s'étire ou qoi que ce soit.

Pour si je suis pas assez clair, regarder comment le logiciel photoshop fait quand il ouvre les images.



Aidez moi svp
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
47
Eh bien, procede ainsi :



1) Fais tes tests de résolution de l'image pour savoir quel ratio appliquer

2) Redimensionne l'image selon ton ratio comme tu le fais dans ton post plus haut

3) Redimensionne la form a la même taille que 2)



Au fait, pour ta remarque, on a pas tous photoshop


Mx
Messages postés
86
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
2 avril 2008

lol c'est vrai pour photoshop.

La j'ai un probleme, je fais comme tu me dit mais un proleme apparait:



if (((bmp.Width > 700) && (bmp.Width <= 1400))
&& ((bmp.Height > 500) && (bmp.Height <=1000)))

{


ClientSize = (((bmp.Width)/2) &&
((bmp.Height)/2));

g.DrawImage(bmp, 0, 0);

}



Voila l'erreur qu'il me met:



L'opérateur '&&' ne peut pas être appliqué aux opérandes de type 'int' et 'int'



Comment je gère ça?



Encore merci pour tes réponses
Messages postés
86
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
2 avril 2008

Merci! a march beaucoup mieux maintenant!

Donc j'ai la réponse a ma question. Ce sujet est donc clos

A+