Articles taggés silverlight

[WP7] Tout savoir sur la gestion des images

0

Un très rapide post pour partager le lien vers un excellent article de Stefan Wick sur l’optimisation et la gestion des images sur Windows Phone 7 : http://blogs.msdn.com/b/swick/archive/2011/04/07/image-tips-for-windows-phone-7.aspx

En particulier il nous présente, bien entendu les classiques BitmapCreateOptions de la classe BitmapImage pour choisir un chargement/décodage à la demande ou immédiat.

Mais aussi le PictureDecoder, qui permet de décoder une image dans la résolution voulue, et donc de gagner en vitesse et empreinte mémoire ! Malheureusement, celui ci ne sait décoder que les JPG, et pas les PNG…

Une dernière chose, à laquelle je me suis heurté lors du développement du Tile Toolkit : le décodage d’image ne peut se faire QUE sur le thread UI et c’est fort dommage…

Composition d’image : rendre du XAML sous forme d’image [Update 12/2011]

2

Voici un morceau de code qui pourront rendre service lors de développements Silverlight (3 et +, Windows Phone 7, …) : si vous avez besoin de générer une image dans votre application : à partir de Silverlight 3, la classe WriteableBitmap est à votre disposition et permet de créer une image pixel par pixel.

Elle est de transformer un arbre XAML en une image, seule ombre au tableau; cette classe est parfaite pour l’affichage à l’écran, en effet le contrôle Image est capable d’afficher un WriteableBitmap mais pour la sauvegarde c’est une autre paire de manche : nativement, Silverlight ne propose pas d’encodeur PNG ou JPEG pour exporter ce paquet de pixels.

Le code qui suit vous permettra de profiter de la praticité de Silverlight pour composer une image (à vous les superpositions alpha, le texte antialiasé positionné comme bon vous semble en quelques lignes, les layouts faciles à utiliser – grid, stackpanel, …) exportable en PNG non compressé (attention quand même du coup, et en passant merci à Joe Stegman pour son PNGEncoder).

Vous pourrez ensuite manipuler ces images comme bon vous semble, car deux formats de sorties sont disponibles, l’une en Stream et l’autre en Byte[]. Aucun problème pour les sérialiser (contrairement aux BitmapImage) :-)

Code and english version of the post available below

(Lire la suite…)

Snippet nprop

[SL/WP7] Snippet nprop

0


Avouez-le, vous en avez plein vos DataContext, des propriétés bêtes et méchantes qui font appel à une fonction NotifyPropertyChanged. [ Pour ceux du fond près du radiateur, dans une UI Silverlight, l'objet contexte de la page, s'il implémente INotifyPropertyChanged, possède un event PropertyChanged qui permet de signifier à Silverlight que de la valeur d'une propriété à changé et qu'il est temps de mettre à jour les éléments de l'UI attachés à cette propriété. ]

Nativement, dans Visual Studio nous avons à notre disposition prop et propdp, bien utiles dans la vie de tous les jours du développeur Silverlight pour créer propriétés et DependencyProperties sans trop avoir à taper du code purement répétitif. Par contre rien pour les propriétés déclenchant l’évènement PropertyChanged - sans doute car l’implémentation concrète d’INotifyPropertyChanged est laissée au développeur… bien que l’on fasse quasiement tous pareil.

Pour palier à ce manque je vous propose nprop, un snippet venant s’ajouter à votre IDE et qui vous permettra du temps dans vos développements :)

Elle s’utilise comme n’importe quel autre snippet, tapez juste nprop puis TAB et le code apparaitra en vous invitant à remplir les trous.

UPDATE : Toujours pas fan du snippet fourni avec MVVM Light, j’ai un petit peu retouché nprop depuis le temps, dont voici la dernière version

[WP7] Missing CheckAccess()

0

Une petite note technique pour ceux qui se demandaient où était passée Dispatcher.CheckAccess() dans les CTP de Windows Phone 7.

Cette primitive permet de savoir si le code courant tourne dans le thread d’UI ou pas, et donc si un BeginInvoke() est nécessaire ou pas.

Exemple, pour récupérer un setting de l’IsolatedStorage depuis n’importe quel thread :

public void GetSetting(string key, out object value)
        {
            if (Deployment.Current.Dispatcher.CheckAccess())
            {
                value = IsolatedStorageSettings.ApplicationSettings[key];
            }
            else
            {
                using (ManualResetEvent sync = new ManualResetEvent(false))
                {
                    object _value = null;

                    Deployment.Current.Dispatcher.BeginInvoke(() =>
                        {
                            _value = IsolatedStorageSettings.ApplicationSettings[key];
                            sync.Set();
                        });

                    sync.WaitOne();
                    value = _value;
                }
            }
        }

Et bien CheckAccess() est toujours bien là dans la classe Dispatcher, même si l’Intellisense de Visual Studio ne vous la propose pas.

Rappel : Pour les débutants en multi-threading sous Silverlight, le seul Dispatcher auquel vous avez accès depuis un autre thread que l’UI est Deployment.Current.Dispatcher. Si vous essayez de taper directement dans le Dispatcher d’un FrameworkElement vous irez tout droit à la CrossThreadException ;-) .

Source : Forums MSDN

Ready-made usual flavour HttpWebRequest for Windows Phone 7

3

Si vous effectuez des portages d’applications .NET vers Silverlight ou Windows Phone 7, cette classe pourrait bien vous être utile.
En effet, dans Silverlight, les WebRequests sont asynchrones (c’est très bien !), seulement ce changement d’API peut causer de nombreuses modifications de code. C’est dans cette optique que j’ai crée cette classe C# : HttpWebRequestSync qui propose une interface au plus proche de ce qui existait avant.

Attention, pour le coup vous perdrez l’avantage des requêtes asynchrones et votre thread appelant sera bloqué pendant le déroulement de la requête, comme au bon vieux temps !
Tout retour de bug ou message de remerciement est le bienvenu, ce code est disponible sous licence LGPL.

If you’re looking forward to port .NET applications to Silverlight/Windows Phone 7, the following might interest you.
In Silverlight, the WebRequests are asynchronous (and that’s a good thing), but this change in the API can cause numerous changes in your code. That’s what lead me to write this C# class : HttpWebRequestSync featuring an interface as close as possible as what was there before.

Note that you’ll lose the advantage of asynchronous requests and that you’re thread will be locked waiting for the request to complete, ol’school style.
If you find any bug or just want to leave a ‘thank you’ not you’re welcome. This code is available under the LGPL license.

(Lire la suite…)

Haut de page