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

Silverlight Discussion :

comment s'assurer du rendu complet d'un WriteableBitmap


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 26
    Par défaut comment s'assurer du rendu complet d'un WriteableBitmap
    Bonjour,

    J'ai un canvas assez complexe sur lequel j'essaie de faire un WriteableBitmap pour transformer ce canvas en image.

    Hors quand je cré mon Image, mon canvas n'est pas complétement chargé et l'image restitué ne contient pas tous les éléments du canvas.

    Après recherche sur le msdn, j'ai créé une méthode pour parser les elements de mon canvas pour leur appliquer un Measure et un Arrange comme le recomande Microsoft, sans résultat probant.

    Mon code (un peu simplifié car chaque objet du canvas est un objet complexe qui retourne sa propre taille):
    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
     
            internal Image GetImage()
            {
                Image oImage = new Image();
     
                Int16 nLargeurPage = Convert.ToInt16(dLargeur);
                Int16 nHauteurPage = Convert.ToInt16(dHauteur);
     
                foreach (UIElement uIelt in oCanvas.Children)
                {
                    uIelt.UpdateLayout();
                    uIelt.Measure(new Size(Width de l'uielt, Height de uIelt));
                    uIelt.Arrange(new Rect(0, 0, (Width de l'uielt, Height de uIelt));
                }
     
                oCanvas.Measure(new Size(nLargeurPage, nHauteurPage));
                oCanvas.Arrange(new Rect(0, 0, nLargeurPage, nHauteurPage));
     
                WriteableBitmap oWb = new WriteableBitmap(nLargeurPage, nHauteurPage);
     
                oWb.Render(this.oCanvas, null);
                oWb.Invalidate();
     
                oImage.Source = oWb;
                oImage.Width = nLargeurPage;
                oImage.Height = nHauteurPage;
     
                return oImage;
     
            }
    Qu'en pensez vous ?

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Pfiou ta convention de nommage est horrible. Ca fait des années qu'on utilise plus ca

    Essaye d'appeler InvalidateMeasure et InvalidateArrange sur tes objets et sur ton Canvas.

    Ceci dit tu dis que tes controles ne sont pas tous chargés, donc un Invalidate ne va rien changé s'il n'est pas encore chargé...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 26
    Par défaut
    Oui effectivement tant que mon objet ne sera pas affiché je ne pourrai pas le transposer en Image.

    Je vais trouver une autre méthode.

    Merci.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 159
    Par défaut
    Hello,

    J'ai eu un pro'blème similaire en faisant un éditeur de niveaux en Silverlight : http://blogs.msdn.com/b/davrous/arch...light-2-4.aspx . J'avais fini par changer d'approche mais regardes l'article que je cite dedans : http://blogs.msdn.com/b/silverlight_...lverlight.aspx , cela pourra peut-être t'aider.

    Bye,

    David

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 26
    Par défaut
    Ca y est ca tourne,

    J'ai du charger tous mes objets dans un conteneur.

    j'intercepte le LayoutUpdated de mes objets.
    Et à la n énième passe mon objet est chargé (c'est vrai que c'est pas classe, mais ça marche).

    merci pour le coup de main, j'ai bien cru que j'allais me faire chèvre sur ce coup là.

    En fait mon bout de projet est une adaptation du PageTurn de Microsoft, mais avec des objets plus complexe que des Images, ce qui saccade les animations quand j'ai trop d'objet. avec les Images ca tourne nickel.

  6. #6
    Membre Expert
    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 : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    @David: Penses-tu qu'un nouvel evenement Loaded d'un control refletant aussi le chargement de ces enfants pourrait apparaitre dans SL5 ?

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

Discussions similaires

  1. Comment m'assurer que mon fichier est bien un exec unix
    Par Khaled.Noordin dans le forum Apple
    Réponses: 5
    Dernier message: 05/07/2007, 18h37
  2. Comment s'assurer que "window.open" ouvre une nouvelle fenêtre
    Par lodan dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 14/03/2007, 11h12
  3. Réponses: 5
    Dernier message: 04/02/2007, 01h14
  4. Réponses: 9
    Dernier message: 07/10/2006, 10h54
  5. Comment s'assurer qu'un prédicat retourne NO
    Par C_C dans le forum Prolog
    Réponses: 9
    Dernier message: 10/11/2005, 18h38

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