WPF - Bitmap d'un Canvas
Il est souvent trés pratique de pouvoir générer un Bitmap directement depuis l'agencement des UIElements d'un Canvas.
1/ Formalisme
Après avoir composé son interface (dans un Canvas), Microsoft a intégré dans son Framework une classe RenderTargetBitmap qui permet d'effectuer un rendu d'une interface graphique pour un stockage dans un Bitmap.
using System.Windows.Media; using System.Windows.Media.Imaging; ...
private Canvas _displayer = new Canvas();
public Bitmap generateBitmap() { /* Generer l'interface graphique, avec TextBox / Image / Label / Rectangle / etc... et les ajouter au Canvas */
_displayer.Children.Add();
_displayer.UpdateLayout(); /* Affichage en 768x576 */ Bitmap finalImg = new Bitmap(768, 576); this._displayer.Measure(new System.Windows.Size(768.0, 576.0)); this._displayer.Arrange(new System.Windows.Rect(0.0, 0.0, 768.0, 576.0)); RenderTargetBitmap rtbImage = new RenderTargetBitmap( 768, 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; }
...
|
2/ Utilisation
1. Pouvoir gérérer un AVI d'une interface graphique. 2. Pouvoir faire une capture d'écran. 3. Etc...
|
|
Mise à jour le Vendredi, 21 Août 2009 09:03 |