[C#] Redimentionner l'image

Résolu
MickParadiseLost Messages postés 86 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 2 avril 2008 - 28 mai 2005 à 12:14
MickParadiseLost Messages postés 86 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 2 avril 2008 - 29 mai 2005 à 18:00
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

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
29 mai 2005 à 17:06
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
3
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
28 mai 2005 à 13:11
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
0
MickParadiseLost Messages postés 86 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 2 avril 2008
29 mai 2005 à 15:05
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
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
29 mai 2005 à 16:57
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
0

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

Posez votre question
MickParadiseLost Messages postés 86 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 2 avril 2008
29 mai 2005 à 17:02
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
0
MickParadiseLost Messages postés 86 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 2 avril 2008
29 mai 2005 à 18:00
Merci! a march beaucoup mieux maintenant!

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

A+
0
Rejoignez-nous