The Artima Developer Community
Sponsored Link

.NET Buzz Forum
Image aus einem WPF-Control erzeugen

0 replies on 1 page.

Welcome Guest
  Sign In

Go back to the topic listing  Back to Topic List Click to reply to this topic  Reply to this Topic Click to search messages in this forum  Search Forum Click for a threaded view of the topic  Threaded View   
Previous Topic   Next Topic
Flat View: This topic has 0 replies on 1 page
-

Posts: 1524
Nickname: nitronic
Registered: Jul, 2006

Norbert Eder works as a software architect.
Image aus einem WPF-Control erzeugen Posted: Feb 7, 2008 12:50 PM
Reply to this message Reply

This post originated from an RSS feed registered with .NET Buzz by -.
Original Post: Image aus einem WPF-Control erzeugen
Feed Title: Norbert Eder - Living .NET
Feed URL: http://feeds.feedburner.com/NorbertEder-Livingnet
Feed Description: Copyright (c)2005, 2006 by Norbert Eder
Latest .NET Buzz Posts
Latest .NET Buzz Posts by -
Latest Posts From Norbert Eder - Living .NET

Advertisement
Früher oder später stößt jeder WPF-Entwickler auf diese Aufgabe: Aus unterschiedlichsten Gründen muss von einem dargestellten Control eine Grafik erzeugt werden. Wer bereits mit Windows Forms gearbeitet hat, versucht nun vergeblich den Weg über CreateGraphics. Dieser Ansatz funktioniert unter der Windows Presentation Foundation nicht. Stattdessen muss ein anderer Kniff angewandt werden.
Im ersten Schritt kann mittels RenderTargetBitmap ein Bitmap mit der gewünschten Größe erstellt werden. Darin hinein wird nun das entsprechende Control gerendert. Nun müssen wir uns eines Kniffes behelfen (da eventuell die Größe nicht gänzlich korrekt ist). Dazu erstellen wir ein Image-Control, welches das Bitmap als Source erhält und aktualisieren die Größe des Elements entsprechend des Inhaltes mittels der Methoden Measure und Arrange. Nun wird das Image mit der korrekten Größe erneut gerendert und beispielsweise einem Objekt vom Typ PngBitmapEncoder übergeben. Nun kann das Image in einen Stream geschrieben und in ein System.Drawing.Image umgewandelt werden. Hier nun ein Beispielcode:
public System.Drawing.Image Convert(
  FrameworkElement controlToRender)
{
    RenderTargetBitmap rtb = new RenderTargetBitmap(
      (int)controlToRender.ActualWidth, 
      (int)controlToRender.ActualHeight, 
      90, 
      90, 
      PixelFormats.Default);
    
    Visual vis = (Visual)controlToRender;
    rtb.Render(vis);
    
    System.Windows.Controls.Image img = 
      new System.Windows.Controls.Image();
    img.Source = rtb;
    img.Stretch = Stretch.None;
    img.Measure(new System.Windows.Size(
      (int)controlToRender.ActualWidth, 
      (int)controlToRender.ActualHeight));
    System.Windows.Size sizeImage = img.DesiredSize;
    img.Arrange(new System.Windows.Rect(new 
      System.Windows.Point(0, 0), sizeImage));
    
    RenderTargetBitmap rtb2 = new RenderTargetBitmap(
      (int)rtb.Width, 
      (int)rtb.Height, 
      90, 
      90, 
      PixelFormats.Default);
    rtb2.Render(img);
    
    PngBitmapEncoder png = new PngBitmapEncoder();
    png.Frames.Add(BitmapFrame.Create(rtb2));
    
    Stream ms = new MemoryStream();
    png.Save(ms);
    
    ms.Position = 0;
    
    System.Drawing.Image retImg = 
      System.Drawing.Image.FromStream(ms);
    return retImg;
}

Zum PngBitmapEncoder: Hier stehen weitere Encoder bereit. Zusätzliche Informationen sind auf der MSDN-Seite zum Thema BitmapEncoder zu finden. Der Vollständigkeit halber hier die Liste der zur Verfügung stehenden Encoder:
  • BmpBitmapEncoder
  • GifBitmapEncoder
  • JpegBitmapEncoder
  • PngBitmapEncodery
  • TiffBitmapEncoder
  • WmpBitmapEncoder

Read: Image aus einem WPF-Control erzeugen

Topic: Windows Server 2008 RTM Previous Topic   Next Topic Topic: Aufwandsschätzungen verbessern

Sponsored Links



Google
  Web Artima.com   

Copyright © 1996-2019 Artima, Inc. All Rights Reserved. - Privacy Policy - Terms of Use