Générer un bitmap d'une interface graphique en wpf

Soyez le premier à donner votre avis sur cette source.

Vue 8 829 fois - Téléchargée 539 fois

Description

Depuis le lancement de WPF et Blend, il est possible de mettre en oeuvre des interfaces graphique très riches visuellement. Alors pourquoi utiliser des logiciels de montage vidéo, lorsque une application .Net peut faire tout le travail.

Prenons les exemples suivants :
- Réalisation d'un bulletin télévisuel, dont le contenu correspond à une application...
- Réalisation d'écran plasma pour des halls d'accueil, sans possibilité de déporter l'application...
- Réalisation d'une vidéo AVI à partir de l'écran d'une application...

Comment pourrions nous les réaliser. C'est tout simple :
1- Vous mettez en place une application WPF sous Visual Studio 2008
2- Vous définissez la taille de la fenêtre sur la résolution finale (720x576 pour de la vidéo standard)
3- Vous faîtes votre mise en forme visuelle sous Blend (Microsoft Expression)
4- Vous générez un Bitmap de votre visuel...

Or justement, comment réaliser un Bitmap à partir d'un Canvas et de tous ses UIElements pré-disposés...

C'est très simple il suffit de se tourner vers le nouvel objet du FrameWork Microsoft "RenderTargetBitmap" :

Source / Exemple :


using System.Windows.Media;
using System.Windows.Media.Imaging;
...

private Canvas _displayer = new Canvas();

public Bitmap generateBitmap() 
{
  /* Generer l'interface graphique, avec les UIElements,
  TextBox / Image / Label / Rectangle / etc... 
  et les ajouter au Canvas 

  • /
_displayer.Children.Add(<all_UIElements>); _displayer.UpdateLayout(); /* Affichage en 720x576 */ Bitmap finalImg = new Bitmap(720, 576); this._displayer.Measure(new System.Windows.Size(720.0, 576.0)); this._displayer.Arrange(new System.Windows.Rect(0.0, 0.0, 720.0, 576.0)); RenderTargetBitmap rtbImage = new RenderTargetBitmap( 720, 576, 96, 96, PixelFormats.Pbgra32); /* On realise le rendu du Canvas */ rtbImage.Render(this._displayer); PngBitmapEncoder pngImage = new PngBitmapEncoder(); pngImage.Frames.Add(BitmapFrame.Create(rtbImage)); using (System.IO.MemoryStream mstr = new System.IO.MemoryStream()) { pngImage.Save(mstr); mstr.Flush(); finalImg = new Bitmap(mstr); } return finalImg; } ...

Conclusion :


A partir de cette image, vous avez toutes les possibilités, par exemple :
- L'envoyer via HTTP/FTP pour la mise à jour d'une interface visuelle
- L'intégrer dans un AVI pour en générer une vidéo

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

mustinteractive
Messages postés
1
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
3 mars 2009

Bonjour,

Le composant existe effectivement sous SL 2.0, mais il n'est pas trop conseillé de l'utiliser sous Silverlight car il faut un haut niveau de sécurité...

Il est donc bien utile en association avec "Blend"..

Cordialement,
Must-Interactive
http://www.must-interactive.fr
jantosze
Messages postés
72
Date d'inscription
mercredi 29 mai 2013
Statut
Membre
Dernière intervention
15 mai 2009

Salut,

Intéressent, il faut que je me dégage du temps pour essayer ce composant. Est il dispo pour SL?

cdt
JAN

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.