Précédent   Forum du club des développeurs et IT Pro > Dotnet > Général Dotnet > Développement Mobile > Windows Phone
Windows Phone Forum d'entraide sur le développement d'applications compatibles avec Windows Phone 7.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 21/12/2012, 10h08   #1
DotNET74
Membre Expert
 
Avatar de DotNET74
 
Homme
Watch R&D Engineer & Apprenti .NET
Inscription : août 2003
Messages : 1 561
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 40
Localisation : France

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

Informations forums :
Inscription : août 2003
Messages : 1 561
Points : 1 120
Points : 1 120
Envoyer un message via MSN à DotNET74
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 :
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 :
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
DotNET74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2012, 10h28   #2
Léonard Labat
Nouveau Membre du Club
 
Avatar de Léonard Labat
 
Homme Léonard Labat
Consultant .NET
Inscription : juillet 2010
Messages : 16
Détails du profil
Informations personnelles :
Nom : Homme Léonard Labat
Localisation : France, Paris (Île de France)

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

Informations forums :
Inscription : juillet 2010
Messages : 16
Points : 32
Points : 32
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
Léonard Labat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2012, 10h49   #3
DotNET74
Membre Expert
 
Avatar de DotNET74
 
Homme
Watch R&D Engineer & Apprenti .NET
Inscription : août 2003
Messages : 1 561
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 40
Localisation : France

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

Informations forums :
Inscription : août 2003
Messages : 1 561
Points : 1 120
Points : 1 120
Envoyer un message via MSN à DotNET74
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
DotNET74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2012, 16h21   #4
Samuel Blanchard
Rédacteur/Modérateur

 
Avatar de Samuel Blanchard
 
Homme Samuel Blanchard
Expert .NET
Inscription : février 2010
Messages : 1 499
Détails du profil
Informations personnelles :
Nom : Homme Samuel Blanchard
Âge : 39
Localisation : France

Informations professionnelles :
Activité : Expert .NET

Informations forums :
Inscription : février 2010
Messages : 1 499
Points : 2 469
Points : 2 469
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
Samuel Blanchard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2012, 19h54   #5
DotNET74
Membre Expert
 
Avatar de DotNET74
 
Homme
Watch R&D Engineer & Apprenti .NET
Inscription : août 2003
Messages : 1 561
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 40
Localisation : France

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

Informations forums :
Inscription : août 2003
Messages : 1 561
Points : 1 120
Points : 1 120
Envoyer un message via MSN à DotNET74
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
DotNET74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2012, 22h20   #6
DotNET74
Membre Expert
 
Avatar de DotNET74
 
Homme
Watch R&D Engineer & Apprenti .NET
Inscription : août 2003
Messages : 1 561
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 40
Localisation : France

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

Informations forums :
Inscription : août 2003
Messages : 1 561
Points : 1 120
Points : 1 120
Envoyer un message via MSN à DotNET74
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 :
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
DotNET74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 19h45.


 
 
 
 
Partenaires

Hébergement Web