Laden...

Konverter: System.Windows.Controls.Canvas --> System.Windows.Controls.Image

Erstellt von Joetempes vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.719 Views
Joetempes Themenstarter:in
888 Beiträge seit 2007
vor 13 Jahren
Konverter: System.Windows.Controls.Canvas --> System.Windows.Controls.Image

Beschreibung:

Erstellt von einem Canvas mit all seinen Childs ein System.Windows.Controls.Image


/// <summary>
        /// Konvertiert einen WPF Canvas zu einem Bild
        /// </summary>
        /// <param name="canvas">Canvas der konvertiert werden soll</param>
        /// <returns>Bild vom Canvas</returns>
        public static System.Windows.Controls.Image convertCanvasToImage(System.Windows.Controls.Canvas canvas)
        {
            if(canvas == null)
                throw new ArgumentNullException("canvas", "Canvas darf nicht null sein.");

            Transform transform = canvas.LayoutTransform;
            canvas.LayoutTransform = null;

            System.Windows.Size size = new System.Windows.Size(canvas.Width, canvas.Height);
            canvas.Measure(size);
            canvas.Arrange(new System.Windows.Rect(size));

            RenderTargetBitmap renderBitmap = new RenderTargetBitmap((int)size.Width, (int)size.Height, 96d, 96d, System.Windows.Media.PixelFormats.Pbgra32); renderBitmap.Render(canvas);
            BmpBitmapEncoder encoder = new BmpBitmapEncoder();
            encoder.Frames.Add(BitmapFrame.Create(renderBitmap));

            MemoryStream ms = new MemoryStream();      
            encoder.Save(ms);
            ms.Position = 0;

            BitmapImage bi = new BitmapImage();
            bi.BeginInit();
            bi.StreamSource = ms;
            bi.EndInit();

            canvas.LayoutTransform = transform;
            System.Windows.Controls.Image image = new System.Windows.Controls.Image();
            image.Source = bi;
            return image;
        }

Schlagwörter: Canvas, Image