Problème écriture fichier image

[Résolu]
Signaler
Messages postés
69
Date d'inscription
dimanche 30 octobre 2005
Statut
Membre
Dernière intervention
6 mars 2008
-
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
-
Bonjour,
j'ai actuellement un petit problème qui me bloque pour avancer dans mon programme pourtant, cela semble facile à résoudre, mais comment?
Je developpe sous C# express. Mon application modifie des images. C'est à dire que je prend une image par la méthode im=Image.fromFile(string path).Clone() as Image.
Le problème intervient lorsque je veux sauvegardé l'image im que j'ai modifié par im.Save(path). Il me semble que le problème vient du fait que la fichier à l'adresse path est utilisé par le système et que je ne peux donc pas copier im à cet endroit or c'est ce que je dois faire. J'ai vérifié en faisant im.Save("essai.jpg") et ça fonctionne parfaitement... J'ai fait un try catch mais l'erreur découverte est "exeption générique GDI+" bref rien de bien clair.
Merci beaucoup pour votre aide

7 réponses

Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
57
Si tu veux sauver sur le même emplacement, je pense que tu dois :

Faire les modifs que tu veux sur ton image.
La sauver dans un endroit temporaire.
Appeler Dispose et mettre à null ton image.
Faire un File.Move() pour écraser.

<hr size= "2" /> VC# forever
=13319
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Salut,

try
{
    Image img = Image.FromFile( path );
    Bitmap bmp = new Bitmap( img.Width, img.Height, img.PixelFormat );


    using ( Graphics g = Graphics.FromImage( bmp ) )
    {
        g.DrawImage( img, new Rectangle( 0, 0, img.Width, img.Height ) );


        // Dispose l'originale.
        img.Dispose( );
        img = null;


        // Ici tu travailles sur l'image avec le Graphics.
        //g.DrawString( DateTime.Now.ToLongDateString( ), this.Font, Brushes.White, 10.0f, 10.0f );
    }


    // Sauvegarde la copie.
    bmp.Save( path, ImageFormat.Jpeg );
}
catch ( Exception ex )
{
    MessageBox.Show( ex.ToString( ) );
}
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
57
Salut,
Oui, tu dois sauver ton image à un autre droit, car l'image est court d'utilisation...
Faut spécifier un autre path.

<hr size= "2" /> VC# forever
=13319
Messages postés
69
Date d'inscription
dimanche 30 octobre 2005
Statut
Membre
Dernière intervention
6 mars 2008

Ah mince, le problème c'est qu'il faut impérativement que mon image modifiée soit dans le repertoire d'origine à la place de l'image originale... En fait je penser que .clone() ça faisait comme une copie de l'image et la laissée inutilisée mais apparement ce n'est pas le cas. Sinon, pensez vous qu'en copiant l'image originale dans un dossier temporaire, prendre cette copie en .clone() permettra d'enregistrer dans le path initial?
Merci beaucoup
Messages postés
69
Date d'inscription
dimanche 30 octobre 2005
Statut
Membre
Dernière intervention
6 mars 2008

Merci,
je vais essayer ça et si ça marche, ce qui me ferait  bien plaisir!!! je valide ta réponse,
merci et bonne soirée
Messages postés
69
Date d'inscription
dimanche 30 octobre 2005
Statut
Membre
Dernière intervention
6 mars 2008

Merci beaucoup Bidou!
J'ai fait comme tu m'as conseillé à la différence que j'ai fait un File.Copy() qui permet un overwritte sur un fichier existant alors que File.Move() veut à tout prix creér un nouveau fichier etr n'aime pas que le fichier existe déjà. (Enfin de ce que j'ai vu en programmant).
Merci infiniment pour cette aide précieuse, rapide et efficace, C# forever
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
57
Moui, je pense que c'est une meilleure solution, on est quitte de devoir sauver dans un endroit temporaire...

<hr size= "2" /> VC# forever
=13319