2010-08-01 13 views
2

J'essaie de générer une image bitmap à partir d'une bordure WPF. Le tout se trouve dans une application asp.net (côté serveur bien sûr). Net 4.0.Génération de Bitmap de WPIE UIElement dans ASP.NET

Le problème est, que l'image générée est, bien, vide. Est-ce que quelqu'un a une idée pourquoi?

Voici le code.

public static byte[] Draw(int width, int height) 
    { 
     MemoryStream memoryStream 
      = new MemoryStream(); 
     Thread t = new Thread(delegate() 
      { 
       System.Windows.Controls.Border border = new System.Windows.Controls.Border() 
       { 
        Background = Brushes.Red, 
        BorderBrush = Brushes.Green, 
        CornerRadius = new System.Windows.CornerRadius(5), 
        Width = width, 
        Height = height 
       }; 

       border.ApplyTemplate(); 

       RenderTargetBitmap renderTargetBitmap = 
        new RenderTargetBitmap(width, height, 90, 90, PixelFormats.Pbgra32); 

       renderTargetBitmap.Render(border); 

       BitmapEncoder bitmapEncoder = 
        new PngBitmapEncoder(); 

       bitmapEncoder.Frames.Add(BitmapFrame.Create(renderTargetBitmap)); 
       bitmapEncoder.Save(memoryStream); 
      }); 
     t.SetApartmentState(ApartmentState.STA); 
     t.Start(); 
     bool success = t.Join(5000); 

     if (success) 
      return memoryStream.ToArray(); 
     else 
      throw new Exception("Fail"); 
    } 

Le résultat est tout à fait mauvais, comme je l'ai dit la chose renvoie l'image avec la bonne largeur et la hauteur, mais il est vide, donc je suppose que je ne plaisante pas la chose avec le bit de filetage.

Répondre

4

Cumulez après border.ApplyTemplate:

border.Measure(new Size(width, height)); 
border.Arrange(new Rect(0, 0, width, height)); 
border.UpdateLayout(); 

Votre frontière ne se mette à jour avant de vous enregistrer.

+0

bien, merci mon pote! –