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

C# Discussion :

WPF Libérer ressources Image [Débutant]


Sujet :

C#

  1. #1
    Membre confirmé
    Homme Profil pro
    SUPINFO International University
    Inscrit en
    Novembre 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : SUPINFO International University

    Informations forums :
    Inscription : Novembre 2011
    Messages : 62
    Par défaut WPF Libérer ressources Image
    Bonjour,

    Dans mon projet WPF j'ai une Image que je modifie via le code C# par ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ImgPoster.Source = new BitmapImage(new Uri(Path,
                           UriKind.Absolute));
    Le "Path" n'est pas une Url mais un chemin tel que "C:\"

    Seulement même quand j'ai modifié l'image, la précédente n'est pas libérée.

    Après pas mal de recherches j'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Application.Current.Dispatcher.Invoke((Action)delegate
                        {
                            ImgPoster.Source = new BitmapImage(new Uri(Path,
                           UriKind.Absolute));
                        });
    Mais toujours le même problème.

    J'ai aussi essayé cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Stream ImgStream = new FileStream(Path, FileMode.Open, FileAccess.Read, FileShare.Read);
    JpegBitmapDecoder decoder = new JpegBitmapDecoder(ImgStream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
    BitmapSource ImgSource = decoder.Frames[0];
    ImgPoster.Source = ImgSource;
    Pensant pouvoir supprimer le flux contenu lorsque je change d'image mais je n'y suis pas parvenu.

    Malheureusement il ne semble pas exister une fonctionne telle que "ImgPoster.Dispose()"...

    J'espère que vous serez plus inspiré que moi sur ce coup là..

    Merci

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2008
    Messages : 231
    Par défaut
    Non mais Close ??

  3. #3
    Membre confirmé
    Homme Profil pro
    SUPINFO International University
    Inscrit en
    Novembre 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : SUPINFO International University

    Informations forums :
    Inscription : Novembre 2011
    Messages : 62
    Par défaut
    non il n'y a pas non plus de Close().

    je suis un peu embêté car mon projet est à rendre pour lundi et il ne me reste plus que ce problème...

  4. #4
    Membre émérite Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Par défaut
    Salut,

    En modifiant CacheOption du bitmap, cela devrait résoudre ton problème :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var bitmap = new BitmapImage();
    bitmap.BeginInit();
    bitmap.CacheOption = BitmapCacheOption.OnLoad;
    bitmap.UriSource = new Uri(Path, UriKind.Absolute);
    bitmap.EndInit();
    ImgPoster.Source = bitmap;

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Le code de yonpo devrait donner le résultat voulu
    Sinon, avec ton code qui utilise le stream, il suffit de fermer le stream une fois l'image chargée

  6. #6
    Membre confirmé
    Homme Profil pro
    SUPINFO International University
    Inscrit en
    Novembre 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : SUPINFO International University

    Informations forums :
    Inscription : Novembre 2011
    Messages : 62
    Par défaut
    yonpo,
    Maintenant le problème est qu'il ne m'affiche plus l'image. en question. et si je veux la supprimer derrière les ressources sont toujours utilisées si je ne change pas d'image entre temps.

    tomlev,
    Si je ferme le flux juste après, l'image ne s'affiche pas non plus...
    C'est ce que je voulais faire à la base

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Essaie comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var bitmap = new BitmapImage();
    using (var stream = File.OpenRead(Path))
    {
        bitmap.BeginInit();
        bitmap.CacheOption = BitmapCacheOption.OnLoad;
        bitmap.StreamSource = stream;
        bitmap.EndInit();
    }
    ImgPoster.Source = bitmap;

  8. #8
    Membre confirmé
    Homme Profil pro
    SUPINFO International University
    Inscrit en
    Novembre 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : SUPINFO International University

    Informations forums :
    Inscription : Novembre 2011
    Messages : 62
    Par défaut
    Autant pour moi cela fonctionn avec la solution de yonpo.

    En faisant un peu plus attention sur ton code (tomlev), je me suis aperçu qu'il me manquait les instructions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    bitmap.BeginInit();
    bitmap.EndInit();
    Merci beaucoup à vous pour votre aide

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

Discussions similaires

  1. NFOP : Bug libération de ressources (Images)
    Par Laur3nT dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 30/07/2008, 17h01
  2. [WPF] Capture d'image depuis appareil photo numérique
    Par Ertai dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 29/01/2008, 17h15
  3. Recherche des ressources image
    Par rvzip64 dans le forum Outils
    Réponses: 3
    Dernier message: 27/09/2007, 22h26
  4. [WPF] Encore les images - question de performances
    Par BruceWayne dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 13/06/2007, 13h23
  5. Utilisation de ressources images
    Par bebeours dans le forum C++Builder
    Réponses: 2
    Dernier message: 20/09/2002, 14h33

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