Supprimer une image

Signaler
Messages postés
90
Date d'inscription
dimanche 14 septembre 2003
Statut
Membre
Dernière intervention
3 juillet 2008
-
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
-
Salut
En fait j'ai inserrer un object picture dans ma form, et je lui attribué une image de la manière suivante :
try
{


ofdImage =
new OpenFileDialog();


ofdImage.Title = "Selectionner l'image à inserer";


ofdImage.CheckFileExists =
true;


// ofdImage.InitialDirectory = Application.StartupPath;


ofdImage.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal);


ofdImage.Filter = "Fichiers image (*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files (*.*)|*.*" ;


ofdImage.FilterIndex = 1 ;


ofdImage.RestoreDirectory =
true ;



if(ofdImage.ShowDialog() == DialogResult.OK)


{


Logo.Image = (Image)
new Bitmap(ofdImage.FileName);



string PathImage = Path.GetFileName(ofdImage.FileName);


}


}



catch(Exception ex)


{


MessageBox.Show (
string.Concat("Erreur: ", ex.Message));


}

Le pb que j'ai lorsque je veux supprimer ou modifier cette image, voila le code que je fais


File.Copy(ofdImage.FileName,Application.StartupPath+@"\Temp\logo",
true);



J'ai eu comme message d'eurreu :
Le processus ne peut pas acceder au fichier suivant .....
car il est en cours d'utilisation d'un autre processus.

11 réponses

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
je serais tenté de dire que c'est normal puisque ton application accède à l'image tu ne peux pas y toucher.

Essaye ceci à la place de :

Logo.Image = (Image) new Bitmap(ofdImage.FileName);



string PathImage = Path.GetFileName(ofdImage.FileName);

-->
Bitmap b = new Bitmap(ofdImage.FileName);


Logo.Image = (Image)b.Clone();
b.Dispose();

string PathImage = Path.GetFileName(ofdImage.FileName);

Sébastien FERRAND
[MVP C#]
Messages postés
90
Date d'inscription
dimanche 14 septembre 2003
Statut
Membre
Dernière intervention
3 juillet 2008

ca reste le meme message d'erreur quand j'affiche le logo de la manière suivante

Bitmap b =
new Bitmap(Application.StartupPath+@"\Temp\logo");


Logo.Image = (Image)b.Clone();


b.Dispose();



et je voulais le modifier :'(
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
Salut,

Bitmap b = new Bitmap(Application.StartupPath+@"\Temp\logo");
beurk !

Bitmap b = new Bitmap(System.IO.Path.Combine(Application.StartupPath, @"\Temp\logo"));

:-)

/*
coq
MVP Visual C#
*/
Messages postés
90
Date d'inscription
dimanche 14 septembre 2003
Statut
Membre
Dernière intervention
3 juillet 2008

LoL le coq
t'a pas lis bien mon problème :'( car j'arrive à afficher l'image avec
Bitmap b = new Bitmap(Application.StartupPath+@"\Temp\logo");


Logo.Image = (Image)b.Clone();


b.Dispose();



-------
mais mon problème c comment j'affiche l'image et apprès je peux le supprimer ou le modifier
et ne me degage pas le message d'erreur :
Le processus ne peut pas acceder au fichier suivant .....
car il est en cours d'utilisation d'un autre processus
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
Je sais que ce n'est pas la cause du problème, mais beurk quand même :p

Suite à un pb de post mon 2eme message est passé à la trappe :

Ah oui et pour l'image c'est normal, je pense que le Clone réplique aussi d'une certaine manière le handle sur le fichier image.


private static Image SafeFromFile(string imgPath)
{
try
{
Image img = Image.FromFile(imgPath);
return new Bitmap(img);
}
catch
{
return null;
}
}

/*
coq
MVP Visual C#
*/
Messages postés
90
Date d'inscription
dimanche 14 septembre 2003
Statut
Membre
Dernière intervention
3 juillet 2008

et ben tu ma donné une fonction qui retourne une image mais t a pas me montré comment l'utilisé !!!
dsl mais j'aime que tu sois plus claire le coq et merci bien :)
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
rooooh... c'est pas beau en plus...

private static Image SafeFromFile(string imgPath)
{
try
{
Image img = Image.FromFile(imgPath);
Image i = new Bitmap(img);
img.Dispose();
return i;
}
catch
{
return null;
}
}

et tu l'utilises comme ceci :
Logo.Image = SafeFromFile(System.IO.Path.Combine(Application.StartupPath, @"\Temp\logo"));

Sébastien FERRAND
[MVP C#]
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
juste pour info... le Dispose sur l'image est important car sinon, la libération des ressources correspondant à l'image est longue... j'en ai fait les frais sur ma source qui fait des captures d'écrans.

Sébastien FERRAND
[MVP C#]
Messages postés
90
Date d'inscription
dimanche 14 septembre 2003
Statut
Membre
Dernière intervention
3 juillet 2008

quand je fait l'execution pas à pas imgPaths contiens seullement @"\Temp\logo" ???
c pas normale car j'ai eu un message d'erreur aussi
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
l'exmeple n'est pas bon... mais mets le chemin de ton image.

Sébastien FERRAND
[MVP C#]
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Si il s'agit de copier l'image: img.Save( "logo" );