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 :

Récupération des dimensions d'une image


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 : 51
    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 Récupération des dimensions d'une image
    Hello,

    J'ai un contrôle Image qui est bindé sur mon ViewModel de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
            <Canvas x:Name="Canvas1"  Grid.RowSpan="3" Grid.Row="0" Grid.ColumnSpan="2" Grid.Column="0">
                <Image x:Name="Image1" 
                       Source="{Binding Path=URL, Converter={StaticResource StringToBitmapConverter}}" 
                       Width="{Binding Path=ActualWidth,Mode=TwoWay}" 
                       Height="{Binding Path=ActualHeight,Mode=TwoWay}">
                    <Image.RenderTransform>
                        <CompositeTransform ScaleX="{Binding Path=ScaleX,Mode=TwoWay}" 
                                            ScaleY="{Binding Path=ScaleY,Mode=TwoWay}" 
                                            TranslateX="{Binding Path=TranslateX,Mode=TwoWay}" 
                                            TranslateY="{Binding Path=TranslateY,Mode=TwoWay}">
                        </CompositeTransform>
                    </Image.RenderTransform>               
                </Image>            
            </Canvas>
    Cette image a sa BuildAction à Content et je souhaiterais lire les dimensions depuis le constructeur du ViewModel afin d'affecter les bonnes valeurs aux propriétés ActualWidth et ActualHeight ci-dessus.

    J'ai donc créer une méthode qui me fait ça:

    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
                private Point GetImageDimensions(string ImageURL)
                {
                    var Store = System.IO.IsolatedStorage.IsolatedStorageFile.GetUserStoreForApplication();
                    if(Store == null)
                    {
                        return new Point(0,0);
                    }
                    if(ImageURL == string.Empty)
                    {
                        return new Point(0,0);
                    }
                    else
                    {
                        if(!Store.FileExists(ImageURL) || ImageURL == string.Empty)
                        {
                            return new Point(0,0);
                        }
                        else
                        {
                            using(System.IO.IsolatedStorage.IsolatedStorageFileStream CurrentIsolatedStorageStream = Store.OpenFile(ImageURL,System.IO.FileMode.Open))
                            {
                                if(CurrentIsolatedStorageStream.Length > 0)
                                {
                                    BitmapImage CurrentBitmap = new BitmapImage();
                                    CurrentBitmap.SetSource(CurrentIsolatedStorageStream);
                                    CurrentIsolatedStorageStream.Close();
                                    return new Point(CurrentBitmap.PixelWidth,CurrentBitmap.PixelHeight);
                                }
                                else
                                {
                                    return new Point(0,0);
                                }
                            }
                        }
                    }
                }
    Mais ça me renvoi toujours 0,0 !!!

    Je ne vois pas pourquoi ....

    Merci
    La Théorie c'est quand on comprends tout mais que rien ne fonctionne.
    La Pratique c'est quand tout fonctionne mais qu'on ne sait pas pourquoi !

    Si vous aimez ma réponse, cliquez sur la main verte Merci

  2. #2
    Nouveau membre du Club Avatar de Léonard Labat
    Homme Profil pro
    Consultant .NET
    Inscrit en
    Juillet 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .NET
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2010
    Messages : 17
    Points : 33
    Points
    33
    Par défaut
    Si tu veux que ton image conserve sa taille initiale, tu peux tout simplement jouer sur son stretch mode :
    http://msdn.microsoft.com/fr-fr/libr...(v=vs.95).aspx

  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 : 51
    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
    Ben en fait, j'ai besoin de connaître la taille de l'image pour les calculs de zoom ...

    Je pensais que le binding en mode TwoWay permettait de les récupérer au chargement de l'image mais ce n'est pas le cas ...
    La Théorie c'est quand on comprends tout mais que rien ne fonctionne.
    La Pratique c'est quand tout fonctionne mais qu'on ne sait pas pourquoi !

    Si vous aimez ma réponse, cliquez sur la main verte Merci

  4. #4
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    Hello,

    Ton utilisation du Binding me parait un peu nébuleux.
    Par exemple Mode-TwoWay ne sert que dans le cas ou ton control est capable de modifier la valeur bindé. En gros cela concerne les TextBox, Sliders,... mais pas les images qui n'ont pas d'interaction utilisateur.

    Après c'est difficile de savoir pourquoi cela ne marche pas car tu ne decris pas le DataContext appliqué à l'image.

    Pourrais-tu décrire la classe pointé par celui-ci ? Contient-il ActualWidth ?
    .
    Pas de question technique en MP, merci.
    .
    Un emulator Gameboy Color pour Windows Phone ?
    c'est moi qui l'ai fait

  5. #5
    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 : 51
    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
    Quand tu dis DataContext de l'imge tu parles du ViewModel ?

    si oui, je voulais binder les propriétés suivantes de l'image:

    Source, Width et Height

    Et les propriétés de sa CompositeTransfrom comme suit:

    ScaleX,ScaleY, TranslateX et TranslateY.

    Et afin de pouvoir manipuler l'image depuis le ViewModel.

    Comme je n'arrive pas à récupérer la taille de l'image depuis le ViewModel je me retrouve avec une image de 0x0 et donc non visible ...

    Est-ce plus clair pour vous ?

    Merci
    La Théorie c'est quand on comprends tout mais que rien ne fonctionne.
    La Pratique c'est quand tout fonctionne mais qu'on ne sait pas pourquoi !

    Si vous aimez ma réponse, cliquez sur la main verte Merci

  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 : 51
    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 pour résumé mon image fait 2560x1312.

    Vu que depuis le ViewModel je connais l'URL de l'image je passe donc par le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ...
      BitmapImage WorldMapBitmap = new BitmapImage(new Uri("/Resources/Images/WorldMaps/DarkRedWorldMap2560x1312.png",UriKind.Relative));
      Image WorldMapImage = new Image();
      WorldMapImage.CacheMode = new BitmapCache();
      WorldMapImage.Source = WorldMapBitmap;
      CompositeTransform WorldMapImageCompositeTransform = new CompositeTransform();
      WorldMapImageCompositeTransform.ScaleX = 1;
      WorldMapImageCompositeTransform.ScaleY = 1;
      WorldMapImageCompositeTransform.TranslateX = 0;
      WorldMapImageCompositeTransform.TranslateY = 0;
      WorldMapImage.RenderTransform = WorldMapImageCompositeTransform;
     
      WriteableBitmap WorldMapWriteableBitmap = new WriteableBitmap(WorldMapImage,WorldMapImage.RenderTransform);
    Donc le WorldMapWriteableBitmap contient la taille de l'image mais seulement 2048x1049

    Si je fais le même code sur une image de 128x128 j'ai les bonnes valeurs !

    Est-ce que la taille des images est limité sous WP ?

    Merci
    La Théorie c'est quand on comprends tout mais que rien ne fonctionne.
    La Pratique c'est quand tout fonctionne mais qu'on ne sait pas pourquoi !

    Si vous aimez ma réponse, cliquez sur la main verte Merci

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/12/2014, 15h23
  2. Gestion des dimensions d'une image
    Par Lcf.vs dans le forum Java ME
    Réponses: 0
    Dernier message: 25/11/2010, 11h23
  3. [XSLT] Intégration automatique des dimensions d'une image
    Par souffle56 dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 04/04/2010, 23h08
  4. Réponses: 6
    Dernier message: 17/04/2009, 16h48
  5. [VB6] [Graphisme] Dimensions d'une image au saving
    Par jeanseb dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/12/2002, 19h09

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