[C#] Affichage d'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 une image qui s'affiche dans une fenetre MDI suite a un clic sur ouvrir dans un openfiledialog.



Voici le code d'affichage de l'image dans cette nouvelle fenetre:



protected override void OnPaint(PaintEventArgs e)

{

Graphics g = e.Graphics;



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



}



coeff =1 : pour que l'image s'affiche en taille réelle.



1) J'aimerais qu'a la place de s'afficher aux coordonnées 0,0 de la
fenetre, l'image s'affiche de maniere centrée horizontalement et
verticalement dans la fenetre. Je remplace ce qui est en orange par
quoi ?

2) J'aimerais écrire un truc du style: Quand bmp > ClientSize, afficher les scrollbars.

Mais je n'arrive pas a traduire ça en C#.

3) J'ai encore un dernier probleme: j'aimerais afficher le nom de
l'image dans la barre de titre de la fenetre qui affiche l'image. J'ai
écrit ceci:




Form2 frm = new Form2(OuvrirImg.FileName);

frm.Text= OuvrirImg.FileName;

frm.MdiParent =this;

frm.Show();



Ce qui est écrit en rose affiche le chemin complet de l'image ouverte alors que moi je voudrais juste le nom et l'extension.

De plus, si vous pouvez me donner un indice pour afficher la taille
actuelle de l'image en % dans cette barre de titre, ça serait cool



Aidez moi svp. Merci d'avance

32 réponses

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Pour la methode à Mx ca donne ca je pense:

float coef = 0.2f;
float w = bmp.Width * coef;
float h = bmp.Height * coef;
float x = ( this.ClientSize.Width - w ) / 2.0f;
float y = ( this.ClientSize.Height - h ) / 2.0f;


g.DrawImage( bmp,x, y, w, h );
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Nan, j'ai oublié que ton image ne remplie pas totalement ta forme, c'est donc pas la bonne solution.. Reste plus que le double buffering, soit avec la méthode SetStyle soit avec un bitmap..


this.SetStyle( ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.DoubleBuffer, true ); // Dans le ctor
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
eheh.. C'est pas normal que la classe Path ne marche pas chez toi !! Elle marche chez Mx et chez moi.. Sinon la bonne vielle methode :

file = ofd.FileName.Substring( ofd.FileName.LastIndexOf( "\" ) + 1 );
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
3 ) Path.GetFileName( String path );
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Membre
Dernière intervention
30 octobre 2008
55
1) Pour que ce soit centré, tu remplaces tes coordonées 0, 0 par (la
moitié de la largeur de ta fenetre - la moitié de la largeur de ton
image), pareil pour la hauteur.


2) if(bmp.Size > this.ClientSize) this.AutoScroll = true; je pense

Mx
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Membre
Dernière intervention
30 octobre 2008
55
Heureusement que Lutinore est la pour la 3, sinon j'allais te proposer d'utiliser

la méthode OuvrirImg.FileName.LastIndexOf("\"); combinée
avec un OuvrirImg.FileName.SubString()

Mx
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Vi moi aussi j'ai utilisé LasIndexOf pendant longtemps, vieux réflexe je suppose : )
Messages postés
86
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
2 avril 2008

merci pour tout. je vais essayer ça aussitot et je vous dit quoi .
Messages postés
86
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
2 avril 2008

ça y'est, j'ai testé vos codes.


Donc, pour le centrage de l'image dans la fenetre sa marche mais si
j'etire la fenetre, l'image ne se réaffiche pas centrée et garde sa
derniere position. C'est en réduisant la fenetre pui en la réaffichant
en grand qu'elle se recentre bien. C'est un probleme de
raffraichissement automatique. Je sais pas comment faire ça.





Pour le nom qui s'affiche dans la barre de titre, je sais pas par quoi
remplacer Path. Si on pouvait me donner ce que je doit marquer ça irait
mieux .





Et pour les scrollbars, j'arrive toujours pas a le faire
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Le path c'est la propriété FileName du dialog.. Pour l'autre problème tu peux mettre un Invalidate( this.ClientRectangle ) dans la methode "overridée" OnResize..
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Y'a aussi SetStyle..
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Path est une classe static
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
97
La classe Path n'est pas statique, mais plutot ses méthodes. :-)

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
86
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
2 avril 2008

Merci.

Pour l'invalidate, sa marche presque. L'image reste centrée tout le temps mais elle clignote. Sa fait mal aux yeux



Pour le path, j'ai toujours pas compris désolé. Je suis pas très fort en c#.

Je voudrais juste que tu me dise ce que j'écrit a la place de ça:




Form2 frm = new Form2(OuvrirImg.FileName);
frm.Text= OuvrirImg.FileName;



En tout cas, merci beaucoup pour toutes vos aides.
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Elle a un ctor privé c'est ce que j'appelle une classe statique.. il me semble que je ne suis pas le seul à utilisé ce terme.. Si le mot static est maintenant dispo pour les classes dans C# 2.0 c'est justement pour ce genre de classe.
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Path.GetFileName( ofd.Filename ); // ofd = OpenFileDialog
Messages postés
86
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
2 avril 2008

J'ai écrit ce que tu m'as dit et ilme met sa:



C:\Documents and Settings\Eternal
Suffering\Mes documents\C#\Blasphemy v2.0\Form1.cs(567): Le type ou le
nom d'espace de noms 'Path' est introuvable (une directive using ou une
référence d'assembly est-elle manquante ?)



Je fais quoi ?
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Membre
Dernière intervention
30 octobre 2008
55
Ajoute la directive using System.IO;

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

elle y est déja et sa marche toujours pas
Messages postés
86
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
2 avril 2008

sinon, une idée pour l'image qui clignote a cause de "invalidate..." ?