IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

Probleme de ressource non libérée - Image en WPF


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 5
    Par défaut Probleme de ressource non libérée - Image en WPF
    Bonjour,

    Débutant en C# je me suis lancé dans une application WPF sous windows 7 avec VSExpress 2010.

    J'ai mis une image à l'intérieur d'un canvas afin d'y dessiner dessus et d'enregistrer l'image modifiée.
    Le problème vient lorsque j'essai de sauvegarder sur le même fichier cela me dis :
    La ressource est en cours d'utilisation.
    Pourtant j'ai fais un clear sur le canvas mais cela ne doit pas être suffisant :s

    Je ne vois aucune fonction dispose ou close sur mon objet image donc je ne sais pas quoi faire d'autre pour libérer cette image afin de l'écraser avec le fichier temporaire.

    Merci de votre aide.


    Ci dessous mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    Code C# :
     
    string fichierOriginal; // contient le chemin de mon fichier original
    InkCanvas canvasPlan; // inkcanvas
    ...
     
    //affectation de l'image dans le canvas
    Image imageCanvas = new Image();
    imageCanvas.Source = new BitmapImage(new Uri(fichierOriginal, UriKind.RelativeOrAbsolute));
    canvasPlan.Children.Add(imageCanvas);
     
     
    //sauvegarde apres modifications
    string fichierJpg= @"c:\temp\canvasPlan.jpg"; //fichier temporaire
    ExportToJpeg(fichierJpg, canvasPlan);
     
    //vide le canvas
    /*foreach (Image uneImage in canvasPlan.Children.OfType<Image>())
    {
    uneImage.Source = new BitmapImage(); // j'ai essayé d'enlever la source mais ca ne change rien
    }*/
    canvasPlan.Children.Clear(); //supprime les objets a l'intérieur du canvas
    canvasPlan.Strokes.Clear(); //supprime les traits de stylet
     
     
    //essai d'ecraser le fichier original avec la modif
    File.Copy(fichierJpg, fichierOriginal, true); //BUG ici : ressource non disponible : fichierOriginal

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 537
    Par défaut
    Essayes d'utiliser BeginIni() et EndInit() :

    http://msdn.microsoft.com/fr-fr/library/ms748873.aspx

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 5
    Par défaut
    Merci de ta réponse,

    j'ai essayé avec mais cela ne changeait rien.

    J'ai fini par trouver en cherchant sur la doc un peu au hasard. j'ai cherché le moyen d'affecter un fichier sous forme de stream a l'image bitmap vu que sur le stream j'ai l'option close dessus.

    et j'ai trouvé ce moyen la :

    http://msdn.microsoft.com/en-us/library/aa970689.aspx

    // Open a Stream and decode a JPEG image
    Stream imageStreamSource = new FileStream("tulipfarm.jpg", FileMode.Open, FileAccess.Read, FileShare.Read);
    JpegBitmapDecoder decoder = new JpegBitmapDecoder(imageStreamSource, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
    BitmapSource bitmapSource = decoder.Frames[0];

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Code C# :
    
    string fichierOriginal; // contient le chemin de mon fichier original
    InkCanvas canvasPlan; // inkcanvas
    private Stream imageStreamSource = null; 
    ...
    
    //affectation de l'image dans le canvas
     this.imageStreamSource = new FileStream(pathImg, FileMode.Open, FileAccess.Read, FileShare.Read);
    JpegBitmapDecoder decoder = new JpegBitmapDecoder(imageStreamSource, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
    BitmapSource bitmapSource = decoder.Frames[0];
    
     // Set the image source.
    imageCanvas.Source = bitmapSource;
    canvasPlan.Children.Add(imageCanvas);
    
    
    //sauvegarde apres modifications
    string fichierJpg= @"c:\temp\canvasPlan.jpg"; //fichier temporaire
    ExportToJpeg(fichierJpg, canvasPlan);
    
    
    //vide le canvas
    if (imageStreamSource != null)
          this.imageStreamSource.Close();     //libere la ressource sur l'image utilisée
    canvasPlan.Children.Clear(); //supprime les objets a l'intérieur du canvas
    canvasPlan.Strokes.Clear(); //supprime les traits de stylet
    
    
    //ecraser le fichier original avec la modif
    File.Copy(fichierJpg, fichierOriginal, true); //plus de bug ^^
    en rouge les modifs qui ont permis de faire marcher le code si ça peut servir à quelqu'un d'autre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de ressources non libérées
    Par Kropernic dans le forum VB.NET
    Réponses: 2
    Dernier message: 06/04/2011, 12h23
  2. Image dans ressource non trouvée depuis une dll
    Par WebPac dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 17/08/2007, 15h10
  3. probleme d'espace non voulu entre 2 bloc
    Par piff62 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 12/04/2005, 16h07
  4. [TOMCAT] ressource non disponible
    Par mousstik dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 12/10/2004, 12h45
  5. [MFC] probleme de rafraichissement d'une image
    Par Vestaproman dans le forum MFC
    Réponses: 6
    Dernier message: 09/01/2004, 23h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo