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 Phone .NET Discussion :

Charger une image depuis l'IsolatedStorage et la binder sur un ItemTemplate


Sujet :

Windows Phone .NET

  1. #1
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut Charger une image depuis l'IsolatedStorage et la binder sur un ItemTemplate
    Hello,

    j'ai un problème dont je n'arrive pas à trouver la solution.

    J'ai une Listbox dont l'ItemTemplate est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <ListBox x:Name="ListBoxSubCategories" ItemsSource="{Binding Path=SelectedCategory.SubCategories}" SelectedItem="{Binding Path=SelectedSubCategory,Mode=TwoWay}" Grid.Row="0">
    	<ListBox.ItemTemplate>
    		<DataTemplate>
    			<Image Source="{Binding Path=Sticker}" Width="96" Height="96" Stretch="Fill" VerticalAlignment="Center" HorizontalAlignment="Center"></Image>				
    		</DataTemplate>
    	</ListBox.ItemTemplate>
    </ListBox>
    Dans mon modèle SubCategory j'ai une propriété qui est la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ....
     private  System.Windows.Media.Imaging.BitmapImage mSticker;
     public System.Windows.Media.Imaging.BitmapImage Stiker
     {
         Get {Return this.mSticker;}
         Set {this.mSticker=value;RaisePropertyChanged("Sticker");}
     }
    ....
    Ayant une structure de données assez complexe (Non représenté ici) j'utilise la classe Helpers de Microsoft pour sauvegarder mes données dans l'IsolatedStorage.

    le premier problème est que cette classe n'arrive pas à sérialiser un objet BitmapImage.

    Donc le code ci-dessus ne fonctionne pas et je me trouve dans l'impossibilité de binder mes images de mes SubCategories.

    Et là je ne vois vraiment pas comment m'en sortir !!!

    Merci

  2. #2
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    En regle generale je ne fonctionne pas comme ca.

    Dans mon ViewModel/Model je laisse une propriete de type string (URL sur Internet par exemple). Ensuite je bind mon image sur cette propriete et je passe par un Converter pour lui dire d'aller chercher dans le cache (Isolated Storage).

  3. #3
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut
    Ah ok,

    Converter un nouvea truc à assimiler pour moi ça.....

    je vais regarder dans cette piste alors

    Merci

  4. #4
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut
    Alors,

    j'ai mis en place un Converter comme suit:

    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
    33
    34
    35
    36
    37
    38
    39
    40
    public object Convert(object value,Type targetType,object parameter,System.Globalization.CultureInfo culture)
    {
      if(value is string)
      {
        string CurrentFileFullName=value.ToString();
        var Store=System.IO.IsolatedStorage.IsolatedStorageFile.GetUserStoreForApplication();
        if(Store==null)
        {
          return null;
        }
        if(!Store.FileExists(CurrentFileFullName))
        {
          //Ici je souhaite retourner une image qui est en ressources
          BitmapImage CurrentBitmap=new BitmapImage();
          CurrentBitmap.UriSource=new System.Uri("/Resources/Icons/MatteCategory.png");
          return CurrentBitmap;
        }
        else
        {
          using(System.IO.IsolatedStorage.IsolatedStorageFileStream CurrentIsolatedStorageStream=Store.OpenFile(CurrentFileFullName,FileMode.Open))
          {
             if(CurrentIsolatedStorageStream.Length>0)
             {
               BitmapImage CurrentBitmap=new BitmapImage();
               CurrentBitmap.SetSource(CurrentIsolatedStorageStream);
               CurrentIsolatedStorageStream.Close();
               return CurrentBitmap;
              }
              else
              {
                return null;
               }
             }
            }
           }
           else
          {
             return value;
           }
    }
    et je l'utilise comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <ListBox.ItemTemplate>
      <DataTemplate>
        <Image Source="{Binding Path=IconFullName, Converter={StaticResource StringToBitmapConverter}}" Width="96" Height="96" Stretch="Fill" VerticalAlignment="Center" HorizontalAlignment="Center"></Image>
        ....
      </DataTemplate>
    </ListBox.ItemTemplate>
    le problème c'est que ça passe bien dedans mais cela ne m'affiche pas mes images !

    Merci

  5. #5
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Et tu passes dans quel return ?

  6. #6
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut
    Alors,

    pour le premier c'est lorsque l'utilisateur n'a pas affecté d'image à la catégorie donc je charge une image par défaut.

    mais là j'ai corrigé, j'avais oublié de spécifier le UriKind !!!

    et dans le deuxième, je charge l'image qui se trouve dans l'IsolatedStorage mais ça passe dedans mais cela n'affiche rien !

  7. #7
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut
    J'ai trouvé !

    une erreur de ma part, j'avais mis une ligne en commentaire et de ce fait le nom de l'image n'était pas enregistrer et donc null au chargement !!

    Vacances, il me faut des vacances

    Encore merci pour ton aide et ton ton tuto sur les Converters...

  8. #8
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut
    Bon ça fonctionne par contre c'est vachement lent pour charger 3 Items !!!!

    Je pense que c'est dû à la taille des photos prises avec la caméra....

  9. #9
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par DotNET74 Voir le message
    Bon ça fonctionne par contre c'est vachement lent pour charger 3 Items !!!!

    Je pense que c'est dû à la taille des photos prises avec la caméra....
    Ben oui les photos de la camera font plus 2Mo je crois.

  10. #10
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut
    A tout hasard y a moyen de les réduires facilement du genre une classe dans System.Windows.Media.Imaging qui permettrait de farie ça ?

    Merci

  11. #11
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Regarde le librairie ImageTools sur CodePlex. Je pense qu'elle doit le permettre a partir d'un WriteableBitmap.

  12. #12
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut
    Ok,

    mais avec une simple ScaleTransform c'est pas possible ?

    et il n'existe pas .Getthumbails() comme on avait en WinForm ?

    Merci

  13. #13
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par DotNET74 Voir le message
    Ok,

    mais avec une simple ScaleTransform c'est pas possible ?

    et il n'existe pas .Getthumbails() comme on avait en WinForm ?

    Merci
    ScaleTransform c'est sur un controle visuel. Un BitmapImage c'est que du code en memoire.

    Justement y'a un GetThumbnail dans la librairie que je t'ai dit de regarder.

  14. #14
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut
    Ok,

    je vais regarder ça alors....

    Merci

  15. #15
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut
    Re,

    J'ai essayer quelque chose qui fonctionne mais j'aimerais savoir quels sont les impacts négatifs sur les images ainsi générées ?

    le code que j'utilise pour sauvegarder l'image est le suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public void SaveImageToIsolatedStorage(string CurrentFullName)
    {
      var MyStore = System.IO.IsolatedStorage.IsolatedStorageFile.GetUserStoreForApplication();
      if(MyStore.FileExists(CurrentFullName))
      {
        MyStore.DeleteFile(CurrentFullName);
      }
      System.IO.IsolatedStorage.IsolatedStorageFileStream MyFileStream=MyStore.CreateFile(CurrentFullName);
      System.Windows.Media.Imaging.Extensions.SaveJpeg(this.CurrentImage,MyFileStream,this.CurrentImage.PixelWidth,this.CurrentImage.PixelHeight,0,85);
      MyFileStream.Close();
    }
    qui donc sauve l'image avec la taille par défaut.....

    j'ai modifié ce code de la façon suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public void SaveImageToIsolatedStorage(string CurrentFullName)
    {
      var MyStore = System.IO.IsolatedStorage.IsolatedStorageFile.GetUserStoreForApplication();
      if(MyStore.FileExists(CurrentFullName))
      {
        MyStore.DeleteFile(CurrentFullName);
      }
      System.IO.IsolatedStorage.IsolatedStorageFileStream MyFileStream=MyStore.CreateFile(CurrentFullName);
      System.Windows.Media.Imaging.Extensions.SaveJpeg(this.CurrentImage,MyFileStream,480,800,0,85);
      MyFileStream.Close();
    }
    et je n'ai plus de temps de chargement longs !!!

    Merci

  16. #16
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Ben ca parait bon comme ca

  17. #17
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut
    Ouaip,

    surtout qu'en creusant un peu plus dans la doc on peut tourner aussi l'image !!!

    C'est cool...........

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

Discussions similaires

  1. Charger une image depuis le net
    Par SNDP dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 17/11/2007, 23h41
  2. Charger une image depuis les ressources projets
    Par Flackou dans le forum DirectX
    Réponses: 2
    Dernier message: 04/06/2007, 14h34
  3. [Image] charger une image depuis un fichier xml.
    Par Invité dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 21/11/2006, 14h59
  4. Charger une image depuis un textfield [noob]
    Par yodark dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 21/04/2006, 08h36

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